Skip to content

Commit 1b8984c

Browse files
committed
Fix resharding helper method for the cluster mode
1 parent d90c404 commit 1b8984c

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

test/support/cluster/orchestrator.rb

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def failover
3434
sleep 3
3535
end
3636

37-
def start_resharding(slot, src_node_key, dest_node_key)
37+
def start_resharding(slot, src_node_key, dest_node_key, slice_size: 10)
3838
node_map = hashify_node_map(@clients.first)
3939
src_node_id = node_map.fetch(src_node_key)
4040
src_client = find_client(@clients, src_node_key)
@@ -45,11 +45,21 @@ def start_resharding(slot, src_node_key, dest_node_key)
4545
dest_client.cluster(:setslot, slot, 'IMPORTING', src_node_id)
4646
src_client.cluster(:setslot, slot, 'MIGRATING', dest_node_id)
4747

48+
keys_count = src_client.cluster(:countkeysinslot, slot)
4849
loop do
49-
keys = src_client.cluster(:getkeysinslot, slot, 100)
50+
break if keys_count <= 0
51+
keys = src_client.cluster(:getkeysinslot, slot, slice_size)
5052
break if keys.empty?
51-
keys.each { |k| src_client.migrate(k, host: dest_host, port: dest_port) }
52-
sleep 0.1
53+
keys.each do |k|
54+
begin
55+
src_client.migrate(k, host: dest_host, port: dest_port)
56+
rescue Redis::CommandError => err
57+
raise unless err.message.start_with?('IOERR')
58+
src_client.migrate(k, host: dest_host, port: dest_port, replace: true) # retry once
59+
ensure
60+
keys_count -= 1
61+
end
62+
end
5363
end
5464
end
5565

0 commit comments

Comments
 (0)