Merge branch 'master' into qq-peek-command
This commit is contained in:
		
						commit
						aa2b985461
					
				|  | @ -0,0 +1,15 @@ | |||
| ## This Source Code Form is subject to the terms of the Mozilla Public | ||||
| ## License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
| ## file, You can obtain one at https://mozilla.org/MPL/2.0/. | ||||
| ## | ||||
| ## Copyright (c) 2007-2020 VMware, Inc. or its affiliates.  All rights reserved. | ||||
| 
 | ||||
| # Should be used by commands that require rabbit app to be stopped | ||||
| # but need no other execution environment validators. | ||||
| defmodule RabbitMQ.CLI.Core.MergesDefaultVirtualHost do | ||||
|   defmacro __using__(_) do | ||||
|     quote do | ||||
|       def merge_defaults(args, opts), do: {args, Map.merge(%{vhost: "/"}, opts)} | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										69
									
								
								deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/reclaim_quorum_memory_command.ex
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										69
									
								
								deps/rabbitmq_cli/lib/rabbitmq/cli/queues/commands/reclaim_quorum_memory_command.ex
								
								
								
									vendored
								
								
									Normal file
								
							|  | @ -0,0 +1,69 @@ | |||
| ## This Source Code Form is subject to the terms of the Mozilla Public | ||||
| ## License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
| ## file, You can obtain one at https://mozilla.org/MPL/2.0/. | ||||
| ## | ||||
| ## Copyright (c) 2007-2020 VMware, Inc. or its affiliates.  All rights reserved. | ||||
| 
 | ||||
| defmodule RabbitMQ.CLI.Queues.Commands.ReclaimQuorumMemoryCommand do | ||||
|   alias RabbitMQ.CLI.Core.DocGuide | ||||
| 
 | ||||
|   @behaviour RabbitMQ.CLI.CommandBehaviour | ||||
|   def scopes(), do: [:diagnostics, :queues] | ||||
| 
 | ||||
|   use RabbitMQ.CLI.Core.MergesDefaultVirtualHost | ||||
|   use RabbitMQ.CLI.Core.AcceptsOnePositionalArgument | ||||
|   use RabbitMQ.CLI.Core.RequiresRabbitAppRunning | ||||
| 
 | ||||
|   def run([name] = _args, %{node: node_name, vhost: vhost}) do | ||||
|     case :rabbit_misc.rpc_call(node_name, :rabbit_quorum_queue, :reclaim_memory, [vhost, name]) do | ||||
|       {:error, :classic_queue_not_supported} -> | ||||
|         {:error, "This operation is not applicable to classic queues"} | ||||
| 
 | ||||
|       other -> | ||||
|         other | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def output({:error, :not_found}, %{vhost: vhost, formatter: "json"}) do | ||||
|     {:error, | ||||
|      %{ | ||||
|        "result" => "error", | ||||
|        "message" => "Target queue was not found in virtual host '#{vhost}'" | ||||
|      }} | ||||
|   end | ||||
|   def output({:error, error}, %{formatter: "json"}) do | ||||
|     {:error, | ||||
|      %{ | ||||
|        "result" => "error", | ||||
|        "message" => "Failed to perform the operation: #{error}" | ||||
|      }} | ||||
|   end | ||||
|   def output({:error, :not_found}, %{vhost: vhost}) do | ||||
|     {:error, "Target queue was not found in virtual host '#{vhost}'"} | ||||
|   end | ||||
|   use RabbitMQ.CLI.DefaultOutput | ||||
| 
 | ||||
|   def usage() do | ||||
|     "reclaim_quorum_memory  [--vhost <vhost>] <quorum queue>" | ||||
|   end | ||||
| 
 | ||||
|   def usage_additional do | ||||
|     [ | ||||
|       ["<queue>", "Name of the quorum queue"] | ||||
|     ] | ||||
|   end | ||||
| 
 | ||||
|   def usage_doc_guides() do | ||||
|     [ | ||||
|       DocGuide.quorum_queues(), | ||||
|       DocGuide.memory_use() | ||||
|     ] | ||||
|   end | ||||
| 
 | ||||
|   def help_section(), do: :operations | ||||
| 
 | ||||
|   def description(), do: "Flushes quorum queue processes WAL, performs a full sweep GC on all of its local Erlang processes" | ||||
| 
 | ||||
|   def banner([name], %{}), | ||||
|     do: "Will flush Raft WAL of quorum queue #{name} ..." | ||||
| end | ||||
|  | @ -0,0 +1,45 @@ | |||
| ## This Source Code Form is subject to the terms of the Mozilla Public | ||||
| ## License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
| ## file, You can obtain one at https://mozilla.org/MPL/2.0/. | ||||
| ## | ||||
| ## Copyright (c) 2007-2020 VMware, Inc. or its affiliates.  All rights reserved. | ||||
| 
 | ||||
| defmodule RabbitMQ.CLI.Queues.Commands.ReclaimQuorumMemoryCommandTest do | ||||
|   use ExUnit.Case, async: false | ||||
|   import TestHelper | ||||
| 
 | ||||
|   @command RabbitMQ.CLI.Queues.Commands.ReclaimQuorumMemoryCommand | ||||
| 
 | ||||
|   setup_all do | ||||
|     RabbitMQ.CLI.Core.Distribution.start() | ||||
| 
 | ||||
|     :ok | ||||
|   end | ||||
| 
 | ||||
|   setup context do | ||||
|     {:ok, opts: %{ | ||||
|         node: get_rabbit_hostname(), | ||||
|         timeout: context[:test_timeout] || 30000 | ||||
|       }} | ||||
|   end | ||||
| 
 | ||||
| 
 | ||||
|   test "validate: treats no arguments as a failure" do | ||||
|     assert @command.validate([], %{}) == {:validation_failure, :not_enough_args} | ||||
|   end | ||||
| 
 | ||||
|   test "validate: accepts a single positional argument" do | ||||
|     assert @command.validate(["quorum-queue-a"], %{}) == :ok | ||||
|   end | ||||
| 
 | ||||
|   test "validate: when two or more arguments are provided, returns a failure" do | ||||
|     assert @command.validate(["quorum-queue-a", "one-extra-arg"], %{}) == {:validation_failure, :too_many_args} | ||||
|     assert @command.validate(["quorum-queue-a", "extra-arg", "another-extra-arg"], %{}) == {:validation_failure, :too_many_args} | ||||
|   end | ||||
| 
 | ||||
|   @tag test_timeout: 3000 | ||||
|   test "run: targeting an unreachable node throws a badrpc" do | ||||
|     assert match?({:badrpc, _}, @command.run(["quorum-queue-a"], | ||||
|                                              %{node: :jake@thedog, vhost: "/", timeout: 200})) | ||||
|   end | ||||
| end | ||||
		Loading…
	
		Reference in New Issue