@@ -24,6 +24,14 @@ defmodule RabbitMQ.CLI.Ctl.Commands.SetDiskFreeLimitCommand do
2424 { :validation_failure , :too_many_args }
2525 end
2626
27+ def validate ( [ "mount" | _ ] = args , _ ) when length ( args ) < 3 do
28+ { :validation_failure , :not_enough_args }
29+ end
30+
31+ def validate ( [ "mount" | _ ] = args , _ ) when length ( args ) > 3 do
32+ { :validation_failure , :too_many_args }
33+ end
34+
2735 def validate ( [ limit ] , _ ) do
2836 case Integer . parse ( limit ) do
2937 { _ , "" } ->
@@ -47,12 +55,41 @@ defmodule RabbitMQ.CLI.Ctl.Commands.SetDiskFreeLimitCommand do
4755 end
4856 end
4957
58+ def validate ( [ "mount" , _name , limit ] , _ ) do
59+ case Integer . parse ( limit ) do
60+ { _ , "" } ->
61+ :ok
62+
63+ { limit_val , units } ->
64+ case memory_unit_absolute ( limit_val , units ) do
65+ scaled_limit when is_integer ( scaled_limit ) -> :ok
66+ _ -> { :validation_failure , :bad_argument }
67+ end
68+
69+ _ ->
70+ { :validation_failure , :bad_argument }
71+ end
72+ end
73+
5074 def validate ( [ _ | rest ] , _ ) when length ( rest ) > 0 do
5175 { :validation_failure , :too_many_args }
5276 end
5377
5478 use RabbitMQ.CLI.Core.RequiresRabbitAppRunning
5579
80+ def run ( [ "mount" , mount_name , limit ] , % { node: node_name } ) do
81+ limit =
82+ case Integer . parse ( limit ) do
83+ { limit , "" } -> limit
84+ { limit , units } ->
85+ case memory_unit_absolute ( limit , units ) do
86+ scaled_limit when is_integer ( scaled_limit ) ->
87+ scaled_limit
88+ end
89+ end
90+ make_rpc_call ( node_name , [ mount_name , limit ] )
91+ end
92+
5693 def run ( [ "mem_relative" , _ ] = args , opts ) do
5794 set_disk_free_limit_relative ( args , opts )
5895 end
@@ -70,19 +107,24 @@ defmodule RabbitMQ.CLI.Ctl.Commands.SetDiskFreeLimitCommand do
70107
71108 use RabbitMQ.CLI.DefaultOutput
72109
110+ def banner ( [ "mount" , mount , limit ] , % { node: node_name } ) do
111+ "Setting disk free limit for mount #{ mount } on #{ node_name } to #{ limit } ..."
112+ end
113+
73114 def banner ( [ "mem_relative" , arg ] , % { node: node_name } ) do
74115 "Setting disk free limit on #{ node_name } to #{ arg } times the total RAM ..."
75116 end
76117
77118 def banner ( [ arg ] , % { node: node_name } ) ,
78119 do: "Setting disk free limit on #{ node_name } to #{ arg } bytes ..."
79120
80- def usage , do: "set_disk_free_limit <disk_limit> | mem_relative <fraction>"
121+ def usage , do: "set_disk_free_limit <disk_limit> | mem_relative <fraction> | mount <name> <disk_limit> "
81122
82123 def usage_additional ( ) do
83124 [
84125 [ "<disk_limit>" , "New limit as an absolute value with units, e.g. 1GB" ] ,
85- [ "mem_relative <fraction>" , "New limit as a fraction of total memory reported by the OS" ]
126+ [ "mem_relative <fraction>" , "New limit as a fraction of total memory reported by the OS" ] ,
127+ [ "mount <name> <disk_limit>" , "New limit for the given mount name as an absolute value with units, e.g. 1GB" ]
86128 ]
87129 end
88130
0 commit comments