
This is work in progress, focusing on two main areas: * Avoiding race conditions with cluster configuration propagation. * Ignoring limitations with redis-cli --cluster fix which makes it hard to distinguish real errors (e.g. failure to fix) from expected conditions in this test (e.g. nodes not agreeing on configuration).
57 lines
1.4 KiB
Tcl
57 lines
1.4 KiB
Tcl
# Tests for many simlutaneous migrations.
|
|
|
|
source "../tests/includes/init-tests.tcl"
|
|
source "../tests/includes/utils.tcl"
|
|
|
|
# TODO: This test currently runs without replicas, as failovers (which may
|
|
# happen on lower-end CI platforms) are still not handled properly by the
|
|
# cluster during slot migration (related to #6339).
|
|
|
|
test "Create a 10 nodes cluster" {
|
|
create_cluster 10 0
|
|
}
|
|
|
|
test "Cluster is up" {
|
|
assert_cluster_state ok
|
|
}
|
|
|
|
set cluster [redis_cluster 127.0.0.1:[get_instance_attrib redis 0 port]]
|
|
catch {unset nodefrom}
|
|
catch {unset nodeto}
|
|
|
|
$cluster refresh_nodes_map
|
|
|
|
test "Set many keys" {
|
|
for {set i 0} {$i < 40000} {incr i} {
|
|
$cluster set key:$i val:$i
|
|
}
|
|
}
|
|
|
|
test "Keys are accessible" {
|
|
for {set i 0} {$i < 40000} {incr i} {
|
|
assert { [$cluster get key:$i] eq "val:$i" }
|
|
}
|
|
}
|
|
|
|
test "Init migration of many slots" {
|
|
for {set slot 0} {$slot < 1000} {incr slot} {
|
|
array set nodefrom [$cluster masternode_for_slot $slot]
|
|
array set nodeto [$cluster masternode_notfor_slot $slot]
|
|
|
|
$nodefrom(link) cluster setslot $slot migrating $nodeto(id)
|
|
$nodeto(link) cluster setslot $slot importing $nodefrom(id)
|
|
}
|
|
}
|
|
|
|
test "Fix cluster" {
|
|
wait_for_cluster_propagation
|
|
fix_cluster $nodefrom(addr)
|
|
}
|
|
|
|
test "Keys are accessible" {
|
|
for {set i 0} {$i < 40000} {incr i} {
|
|
assert { [$cluster get key:$i] eq "val:$i" }
|
|
}
|
|
}
|
|
|