@@ -106,23 +106,27 @@ init(QRef) ->
106106 {ok , undefined , {continue , QRef }}.
107107
108108-spec handle_continue (rabbit_amqqueue :name (), undefined ) ->
109- {noreply , state ()}.
109+ {noreply , state ()} | { stop , term (), undefined } .
110110handle_continue (QRef , undefined ) ->
111111 {ok , Prefetch } = application :get_env (rabbit ,
112112 dead_letter_worker_consumer_prefetch ),
113113 {ok , SettleTimeout } = application :get_env (rabbit ,
114114 dead_letter_worker_publisher_confirm_timeout ),
115115 {ok , Q } = rabbit_amqqueue :lookup (QRef ),
116116 {ClusterName , _MaybeOldLeaderNode } = amqqueue :get_pid (Q ),
117- {ok , ConsumerState } = rabbit_fifo_dlx_client :checkout (QRef ,
118- {ClusterName , node ()},
119- Prefetch ),
120- {noreply , lookup_topology (# state {queue_ref = QRef ,
121- queue_type_state = rabbit_queue_type :init (),
122- settle_timeout = SettleTimeout ,
123- dlx_client_state = ConsumerState ,
124- monitor_ref = erlang :monitor (process , ClusterName )
125- })}.
117+ case rabbit_fifo_dlx_client :checkout (QRef , {ClusterName , node ()}, Prefetch ) of
118+ {ok , ConsumerState } ->
119+ {noreply , lookup_topology (# state {queue_ref = QRef ,
120+ queue_type_state = rabbit_queue_type :init (),
121+ settle_timeout = SettleTimeout ,
122+ dlx_client_state = ConsumerState ,
123+ monitor_ref = erlang :monitor (process , ClusterName )
124+ })};
125+ {error , non_local_leader = Reason } ->
126+ {stop , {shutdown , Reason }, undefined };
127+ Error ->
128+ {stop , Error , undefined }
129+ end .
126130
127131terminate (_Reason , State ) ->
128132 cancel_timer (State ).
0 commit comments