diff --git a/deps/rabbitmq_stream/src/rabbit_stream_reader.erl b/deps/rabbitmq_stream/src/rabbit_stream_reader.erl index bc2bf8d78b8f..21969915c32d 100644 --- a/deps/rabbitmq_stream/src/rabbit_stream_reader.erl +++ b/deps/rabbitmq_stream/src/rabbit_stream_reader.erl @@ -4045,9 +4045,10 @@ sac_register_consumer(VH, St, PartitionIndex, Name, Pid, ConnName, SubId) -> end). sac_unregister_consumer(VH, St, Name, Pid, SubId) -> - sac_call(fun() -> - ?SAC_MOD:unregister_consumer(VH, St, Name, Pid, SubId) - end). + Call = fun() -> + ?SAC_MOD:unregister_consumer(VH, St, Name, Pid, SubId) + end, + sac_call(retryable_sac_call(Call)). sac_call(Call) -> case Call() of @@ -4063,3 +4064,16 @@ sac_call(Call) -> R -> R end. + +retryable_sac_call(Call) -> + fun() -> retry_sac_call(Call, 3) end. + +retry_sac_call(_Call, 0) -> + {error, coordinator_unavailable}; +retry_sac_call(Call, N) -> + case Call() of + {error, coordinator_unavailable} -> + retry_sac_call(Call, N - 1); + R -> + R + end.