@@ -67,22 +67,36 @@ defmodule RabbitMQ.MessageDeduplicationPlugin.Exchange do
6767 def validate ( exchange ( arguments: args ) ) do
6868 case List . keyfind ( args , "x-cache-size" , 0 ) do
6969 { "x-cache-size" , :long , val } when val > 0 -> :ok
70+ { "x-cache-size" , :longstr , val } ->
71+ case Integer . parse ( val , 10 ) do
72+ :error -> RabbitMisc . protocol_error (
73+ :precondition_failed ,
74+ "Missing or invalid argument, \
75+ 'x-cache-size' must be an integer greater than 0", [ ] )
76+ _ -> :ok
77+ end
7078 _ ->
7179 RabbitMisc . protocol_error (
7280 :precondition_failed ,
7381 "Missing or invalid argument, \
74- 'x-cache-size' must be an integer greater than 0",
75- [ ] )
82+ 'x-cache-size' must be an integer greater than 0", [ ] )
7683 end
7784
7885 case List . keyfind ( args , "x-cache-ttl" , 0 ) do
7986 nil -> :ok
8087 { "x-cache-ttl" , :long , val } when val > 0 -> :ok
88+ { "x-cache-ttl" , :longstr , val } ->
89+ case Integer . parse ( val , 10 ) do
90+ :error -> RabbitMisc . protocol_error (
91+ :precondition_failed ,
92+ "Invalid argument, \
93+ 'x-cache-ttl' must be an integer greater than 0", [ ] )
94+ _ -> :ok
95+ end
8196 _ -> RabbitMisc . protocol_error (
8297 :precondition_failed ,
8398 "Invalid argument, \
84- 'x-cache-ttl' must be an integer greater than 0",
85- [ ] )
99+ 'x-cache-ttl' must be an integer greater than 0", [ ] )
86100 end
87101
88102 case List . keyfind ( args , "x-cache-persistence" , 0 ) do
@@ -92,8 +106,7 @@ defmodule RabbitMQ.MessageDeduplicationPlugin.Exchange do
92106 _ -> RabbitMisc . protocol_error (
93107 :precondition_failed ,
94108 "Invalid argument, \
95- 'x-cache-persistence' must be either 'disk' or 'memory'",
96- [ ] )
109+ 'x-cache-persistence' must be either 'disk' or 'memory'", [ ] )
97110 end
98111 end
99112
@@ -103,8 +116,15 @@ defmodule RabbitMQ.MessageDeduplicationPlugin.Exchange do
103116
104117 def create ( :transaction , exchange ( name: name , arguments: args ) ) do
105118 cache = cache_name ( name )
106- ttl = rabbitmq_keyfind ( args , "x-cache-ttl" )
107- size = rabbitmq_keyfind ( args , "x-cache-size" )
119+ ttl = case rabbitmq_keyfind ( args , "x-cache-ttl" ) do
120+ nil -> nil
121+ integer when is_integer ( integer ) -> integer
122+ number when is_bitstring ( number ) -> String . to_integer ( number )
123+ end
124+ size = case rabbitmq_keyfind ( args , "x-cache-size" ) do
125+ integer when is_integer ( integer ) -> integer
126+ number when is_bitstring ( number ) -> String . to_integer ( number )
127+ end
108128 persistence =
109129 args
110130 |> rabbitmq_keyfind ( "x-cache-persistence" , "memory" )
0 commit comments