1# Test replication of blocking lists and zset operations. 2# Unlike stream operations such operations are "pop" style, so they consume 3# the list or sorted set, and must be replicated correctly. 4 5proc start_bg_block_op {host port db ops} { 6 set tclsh [info nameofexecutable] 7 exec $tclsh tests/helpers/bg_block_op.tcl $host $port $db $ops & 8} 9 10proc stop_bg_block_op {handle} { 11 catch {exec /bin/kill -9 $handle} 12} 13 14start_server {tags {"repl"}} { 15 start_server {} { 16 set master [srv -1 client] 17 set master_host [srv -1 host] 18 set master_port [srv -1 port] 19 set slave [srv 0 client] 20 21 set load_handle0 [start_bg_block_op $master_host $master_port 9 100000] 22 set load_handle1 [start_bg_block_op $master_host $master_port 9 100000] 23 set load_handle2 [start_bg_block_op $master_host $master_port 9 100000] 24 25 test {First server should have role slave after SLAVEOF} { 26 $slave slaveof $master_host $master_port 27 after 1000 28 s 0 role 29 } {slave} 30 31 test {Test replication with blocking lists and sorted sets operations} { 32 after 25000 33 stop_bg_block_op $load_handle0 34 stop_bg_block_op $load_handle1 35 stop_bg_block_op $load_handle2 36 set retry 10 37 while {$retry && ([$master debug digest] ne [$slave debug digest])}\ 38 { 39 after 1000 40 incr retry -1 41 } 42 43 if {[$master debug digest] ne [$slave debug digest]} { 44 set csv1 [csvdump r] 45 set csv2 [csvdump {r -1}] 46 set fd [open /tmp/repldump1.txt w] 47 puts -nonewline $fd $csv1 48 close $fd 49 set fd [open /tmp/repldump2.txt w] 50 puts -nonewline $fd $csv2 51 close $fd 52 puts "Master - Replica inconsistency" 53 puts "Run diff -u against /tmp/repldump*.txt for more info" 54 } 55 assert_equal [r debug digest] [r -1 debug digest] 56 } 57 } 58} 59