# Replica migration test #2. # # Check that the status of master that can be targeted by replica migration # is acquired again, after being getting slots again, in a cluster where the # other masters have slaves. source "../tests/includes/init-tests.tcl" # Create a cluster with 5 master and 10 slaves, so that we have 2 # slaves for each master. test "Create a 5 nodes cluster" { create_cluster 5 10 } test "Cluster is up" { assert_cluster_state ok } test "Each master should have two replicas attached" { foreach_redis_id id { if {$id < 5} { wait_for_condition 1000 50 { [llength [lindex [R 0 role] 2]] == 2 } else { fail "Master #$id does not have 2 slaves as expected" } } } } set master0_id [dict get [get_myself 0] id] test "Resharding all the master #0 slots away from it" { set output [exec \ ../../../src/redis-trib.rb rebalance \ --weight ${master0_id}=0 \ 127.0.0.1:[get_instance_attrib redis 0 port] >@ stdout] } test "Master #0 should lose its replicas" { wait_for_condition 1000 50 { [llength [lindex [R 0 role] 2]] == 0 } else { fail "Master #0 still has replicas" } } test "Resharding all the master #0 slots back to it" { set output [exec \ ../../../src/redis-trib.rb rebalance \ --weight ${master0_id}=1 \ --use-empty-masters \ 127.0.0.1:[get_instance_attrib redis 0 port]] } test "Master #0 should re-acquire one or more replicas" { wait_for_condition 1000 50 { [llength [lindex [R 0 role] 2]] >= 1 } else { fail "Master #0 has no has replicas" } }