diff --git a/lib/redis_client/cluster/pub_sub.rb b/lib/redis_client/cluster/pub_sub.rb index 80338c8..89a159c 100644 --- a/lib/redis_client/cluster/pub_sub.rb +++ b/lib/redis_client/cluster/pub_sub.rb @@ -35,11 +35,15 @@ def spawn_worker(client, queue) # Ruby VM allocates 1 MB memory as a stack for a thread. # It is a fixed size but we can modify the size with some environment variables. # So it consumes memory 1 MB multiplied a number of workers. - Thread.new(client, queue) do |pubsub, q| + Thread.new(client, queue, nil) do |pubsub, q, prev_err| loop do q << pubsub.next_event + prev_err = nil rescue StandardError => e + next sleep 0.005 if e.instance_of?(prev_err.class) && e.message == prev_err&.message + q << e + prev_err = e end end end @@ -160,7 +164,6 @@ def start_over @router.renew_cluster_state @state_dict.each_value(&:close) @state_dict.clear - @queue.clear @commands.each { |command| _call(command) } break rescue ::RedisClient::ConnectionError, ::RedisClient::Cluster::NodeMightBeDown