1start_server {tags {"repl"}} { 2 start_server {} { 3 test {First server should have role slave after SLAVEOF} { 4 r -1 slaveof [srv 0 host] [srv 0 port] 5 wait_for_condition 50 100 { 6 [s -1 master_link_status] eq {up} 7 } else { 8 fail "Replication not started." 9 } 10 } 11 12 test {If min-slaves-to-write is honored, write is accepted} { 13 r config set min-slaves-to-write 1 14 r config set min-slaves-max-lag 10 15 r set foo 12345 16 wait_for_condition 50 100 { 17 [r -1 get foo] eq {12345} 18 } else { 19 fail "Write did not reached replica" 20 } 21 } 22 23 test {No write if min-slaves-to-write is < attached slaves} { 24 r config set min-slaves-to-write 2 25 r config set min-slaves-max-lag 10 26 catch {r set foo 12345} err 27 set err 28 } {NOREPLICAS*} 29 30 test {If min-slaves-to-write is honored, write is accepted (again)} { 31 r config set min-slaves-to-write 1 32 r config set min-slaves-max-lag 10 33 r set foo 12345 34 wait_for_condition 50 100 { 35 [r -1 get foo] eq {12345} 36 } else { 37 fail "Write did not reached replica" 38 } 39 } 40 41 test {No write if min-slaves-max-lag is > of the slave lag} { 42 r -1 deferred 1 43 r config set min-slaves-to-write 1 44 r config set min-slaves-max-lag 2 45 r -1 debug sleep 6 46 assert {[r set foo 12345] eq {OK}} 47 after 4000 48 catch {r set foo 12345} err 49 assert {[r -1 read] eq {OK}} 50 r -1 deferred 0 51 set err 52 } {NOREPLICAS*} 53 54 test {min-slaves-to-write is ignored by slaves} { 55 r config set min-slaves-to-write 1 56 r config set min-slaves-max-lag 10 57 r -1 config set min-slaves-to-write 1 58 r -1 config set min-slaves-max-lag 10 59 r set foo aaabbb 60 wait_for_condition 50 100 { 61 [r -1 get foo] eq {aaabbb} 62 } else { 63 fail "Write did not reached replica" 64 } 65 } 66 67 # Fix parameters for the next test to work 68 r config set min-slaves-to-write 0 69 r -1 config set min-slaves-to-write 0 70 r flushall 71 72 test {MASTER and SLAVE dataset should be identical after complex ops} { 73 createComplexDataset r 10000 74 after 500 75 if {[r debug digest] ne [r -1 debug digest]} { 76 set csv1 [csvdump r] 77 set csv2 [csvdump {r -1}] 78 set fd [open /tmp/repldump1.txt w] 79 puts -nonewline $fd $csv1 80 close $fd 81 set fd [open /tmp/repldump2.txt w] 82 puts -nonewline $fd $csv2 83 close $fd 84 puts "Master - Replica inconsistency" 85 puts "Run diff -u against /tmp/repldump*.txt for more info" 86 } 87 assert_equal [r debug digest] [r -1 debug digest] 88 } 89 } 90} 91