20
20
is /1 ,
21
21
key_from_name /1 ,
22
22
pid_from_name /2 ,
23
- local_cast /2 ,
24
- local_call /2 ,
25
23
exists /1 ,
26
- ff_enabled /0 ]).
24
+ ff_enabled /0 ,
25
+ local_cast /2 ,
26
+ local_call /2 ]).
27
27
28
+ % % rabbit_queue_type callbacks
28
29
-export ([declare /2 ,
29
30
supports_stateful_delivery /0 ,
30
31
deliver /3 ,
79
80
-spec new (rabbit_amqqueue :name ()) ->
80
81
amqqueue :amqqueue () | error .
81
82
new (# resource {virtual_host = Vhost ,
82
- name = <<" amq.rabbitmq.reply-to" >>} = QName ) ->
83
- new0 (QName , self (), Vhost );
83
+ name = <<" amq.rabbitmq.reply-to" >>} = Name ) ->
84
+ new0 (Name , self (), Vhost );
84
85
new (# resource {virtual_host = Vhost ,
85
- name = QNameBin } = QName ) ->
86
- case pid_from_name (QNameBin , nodes_with_hashes ()) of
86
+ name = NameBin } = Name ) ->
87
+ case pid_from_name (NameBin , nodes_with_hashes ()) of
87
88
{ok , Pid } when is_pid (Pid ) ->
88
- new0 (QName , Pid , Vhost );
89
+ new0 (Name , Pid , Vhost );
89
90
_ ->
90
91
error
91
92
end .
92
93
93
- new0 (QName , Pid , Vhost ) ->
94
- amqqueue :new (QName , Pid , false , true , none , [], Vhost , #{}, ? MODULE ).
95
-
96
- nodes_with_hashes () ->
97
- #{erlang :phash2 (Node ) => Node || Node <- rabbit_nodes :list_members ()}.
94
+ new0 (Name , Pid , Vhost ) ->
95
+ amqqueue :new (Name , Pid , false , true , none , [], Vhost , #{}, ? MODULE ).
98
96
99
97
-spec is (rabbit_misc :resource_name ()) ->
100
98
boolean ().
101
99
is (<<? PREFIX , _ /binary >>) ->
102
100
true ;
103
- is (_ ) ->
101
+ is (Name ) when is_binary ( Name ) ->
104
102
false .
105
103
106
104
init (Q ) ->
@@ -121,15 +119,15 @@ consume(_Q, Spec, State) ->
121
119
credit = Credit }}.
122
120
123
121
declare (Q , _Node ) ->
124
- # resource {name = QNameBin } = QName = amqqueue :get_name (Q ),
125
- case QNameBin of
122
+ # resource {name = NameBin } = Name = amqqueue :get_name (Q ),
123
+ case NameBin of
126
124
<<" amq.rabbitmq.reply-to" >> ->
127
125
{existing , Q };
128
126
_ ->
129
- case exists (QName ) of
127
+ case exists (Name ) of
130
128
true ->
131
129
{existing , Q };
132
- _ ->
130
+ false ->
133
131
{absent , Q , stopped }
134
132
end
135
133
end .
@@ -142,7 +140,6 @@ exists(#resource{kind = queue,
142
140
case ff_enabled () of
143
141
true ->
144
142
Request = {has_state , QName , ? MODULE },
145
- % % We use delegate instead of erpc to guarantee that order is preserved.
146
143
MFA = {? MODULE , local_call , [Request ]},
147
144
try delegate :invoke (Pid , MFA )
148
145
catch _ :_ -> false
@@ -187,7 +184,6 @@ deliver0(Q, Msg) ->
187
184
case ff_enabled () of
188
185
true ->
189
186
Request = {queue_event , QName , {deliver , Msg }},
190
- % % We use delegate instead of erpc to guarantee that order is preserved.
191
187
MFA = {? MODULE , local_cast , [Request ]},
192
188
delegate :invoke_no_result (QPid , MFA );
193
189
false ->
@@ -253,20 +249,23 @@ credit(_QName, CTag, DeliveryCountRcv, LinkCreditRcv, Drain,
253
249
end ,
254
250
{State #? STATE {delivery_count = DeliveryCount ,
255
251
credit = Credit },
256
- [{credit_reply , CTag , DeliveryCount , Credit , 0 , Drain }]}.
252
+ [{credit_reply , CTag , DeliveryCount , Credit , _Available = 0 , Drain }]}.
257
253
258
254
close (#? STATE {}) ->
259
255
ok .
260
256
261
- update (_ , State ) ->
257
+ update (_ , # ? STATE {} = State ) ->
262
258
State .
263
259
264
- cancel (_ , _ , State ) ->
260
+ cancel (_ , _ , # ? STATE {} = State ) ->
265
261
{ok , State }.
266
262
267
263
is_enabled () ->
268
264
true .
269
265
266
+ ff_enabled () ->
267
+ rabbit_feature_flags :is_enabled ('rabbitmq_4.2.0' ).
268
+
270
269
is_compatible (_ , _ , _ ) ->
271
270
true .
272
271
@@ -322,18 +321,18 @@ delete(_, _, _, _) ->
322
321
recover (_ , _ ) ->
323
322
{[], []}.
324
323
325
- settle (_ , _ , _ , _ , State ) ->
324
+ settle (_ , _ , _ , _ , # ? STATE {} = State ) ->
326
325
{State , []}.
327
326
328
- credit_v1 (_ , _ , _ , _ , State ) ->
327
+ credit_v1 (_ , _ , _ , _ , # ? STATE {} = State ) ->
329
328
{State , []}.
330
329
331
330
dequeue (_ , _ , _ , _ , #? STATE {name = Name }) ->
332
331
{protocol_error , not_implemented ,
333
332
" basic.get not supported by volatile ~ts " ,
334
333
[rabbit_misc :rs (Name )]}.
335
334
336
- state_info (_ ) ->
335
+ state_info (# ? STATE {} ) ->
337
336
#{}.
338
337
339
338
info (_ , _ ) ->
@@ -342,9 +341,6 @@ info(_, _) ->
342
341
policy_apply_to_name () ->
343
342
<<>>.
344
343
345
- ff_enabled () ->
346
- rabbit_feature_flags :is_enabled ('rabbitmq_4.2.0' ).
347
-
348
344
-spec new_name () ->
349
345
rabbit_misc :resource_name ().
350
346
new_name () ->
@@ -408,3 +404,6 @@ key_from_name(<<?PREFIX, Suffix/binary>>) ->
408
404
end ;
409
405
key_from_name (_ ) ->
410
406
error .
407
+
408
+ nodes_with_hashes () ->
409
+ #{erlang :phash2 (Node ) => Node || Node <- rabbit_nodes :list_members ()}.
0 commit comments