2021-06-09 15:13:24 +03:00
start_server { tags { " r e p l e x t e r n a l : s k i p " } } {
2011-07-11 00:46:25 +02:00
start_server { } {
test { First server should have role slave after SLAVEOF} {
r - 1 slaveof [ srv 0 host] [ srv 0 port]
2013-06-25 15:13:14 +02:00
wait_for_condition 50 100 {
[ s - 1 master_link_status] eq { up }
} else {
fail " R e p l i c a t i o n n o t s t a r t e d . "
}
}
2011-07-11 00:46:25 +02:00
2011-07-11 12:15:35 +02:00
if { $::accurate } { set numops 50000 } else { set numops 5000 }
2011-07-11 00:46:25 +02:00
test { MASTER and SLAVE consistency with expire} {
2011-07-11 12:15:35 +02:00
createComplexDataset r $numops useexpire
2021-11-10 19:39:26 +02:00
# Make sure everything expired before taking the digest
# createComplexDataset uses max expire time of 2 seconds
wait_for_condition 50 100 {
0 == [ scan [ regexp - inline { expires \ = ( [ \ d ] * ) } [ r - 1 info keyspace] ] expires= % d]
} else {
fail " e x p i r e d i d n ' t e n d "
}
# make sure the replica got all the DELs
wait_for_ofs_sync [ srv 0 client] [ srv - 1 client]
2011-07-11 00:46:25 +02:00
if { [ r debug digest] ne [ r - 1 debug digest] } {
set csv1 [ csvdump r]
set csv2 [ csvdump { r - 1 } ]
set fd [ open / tmp/ repldump1.txt w]
puts - nonewline $fd $csv1
close $fd
set fd [ open / tmp/ repldump2.txt w]
puts - nonewline $fd $csv2
close $fd
2018-09-11 11:03:28 +02:00
puts " M a s t e r - R e p l i c a i n c o n s i s t e n c y "
2011-07-11 00:46:25 +02:00
puts " R u n d i f f - u a g a i n s t / t m p / r e p l d u m p * . t x t f o r m o r e i n f o "
}
assert_equal [ r debug digest] [ r - 1 debug digest]
}
2016-12-13 16:28:12 +01:00
2021-08-08 17:34:11 -07:00
test { Master can replicate command longer than client-query-buffer-limit on replica} {
# Configure the master to have a bigger query buffer limit
r config set client-query-buffer-limit 2000000
r - 1 config set client-query-buffer-limit 1048576
# Write a very large command onto the master
r set key [ string repeat " x " 1100000 ]
wait_for_condition 300 100 {
[ r - 1 get key] eq [ string repeat " x " 1100000 ]
} else {
fail " U n a b l e t o r e p l i c a t e c o m m a n d l o n g e r t h a n c l i e n t - q u e r y - b u f f e r - l i m i t "
}
}
2016-12-13 16:28:12 +01:00
test { Slave is able to evict keys created in writable slaves} {
r - 1 select 5
assert { [ r - 1 dbsize] == 0 }
r - 1 config set slave-read-only no
r - 1 set key1 1 ex 5
r - 1 set key2 2 ex 5
r - 1 set key3 3 ex 5
assert { [ r - 1 dbsize] == 3 }
after 6000
r - 1 dbsize
} { 0 }
2021-11-28 10:26:28 +01:00
test { Writable replica doesn' t return expired keys} {
r select 5
assert { [ r dbsize] == 0 }
r debug set-active-expire 0
r set key1 5 px 10
r set key2 5 px 10
r - 1 select 5
wait_for_condition 50 100 {
[ r - 1 dbsize] == 2 && [ r - 1 exists key1 key2] == 0
} else {
fail " K e y s d i d n ' t r e p l i c a t e o r d i d n ' t e x p i r e . "
}
r - 1 config set slave-read-only no
assert_equal 2 [ r - 1 dbsize] ; # active expire is off
assert_equal 1 [ r - 1 incr key1] ; # incr expires and re-creates key1
assert_equal - 1 [ r - 1 ttl key1] ; # incr created key1 without TTL
assert_equal { } [ r - 1 get key2] ; # key2 expired but not deleted
assert_equal 2 [ r - 1 dbsize]
# cleanup
r debug set-active-expire 1
r - 1 del key1 key2
r - 1 config set slave-read-only yes
r del key1 key2
}
test { PFCOUNT updates cache on readonly replica} {
r select 5
assert { [ r dbsize] == 0 }
r pfadd key a b c d e f g h i j k l m n o p q
set strval [ r get key]
r - 1 select 5
wait_for_condition 50 100 {
[ r - 1 dbsize] == 1
} else {
fail " R e p l i c a t i o n t i m e o u t . "
}
assert { $strval == [ r - 1 get key] }
assert_equal 17 [ r - 1 pfcount key]
assert { $strval != [ r - 1 get key] } ; # cache updated
# cleanup
r del key
}
test { PFCOUNT doesn' t use expired key on readonly replica} {
r select 5
assert { [ r dbsize] == 0 }
r debug set-active-expire 0
r pfadd key a b c d e f g h i j k l m n o p q
r pexpire key 10
r - 1 select 5
wait_for_condition 50 100 {
[ r - 1 dbsize] == 1 && [ r - 1 exists key] == 0
} else {
fail " K e y d i d n ' t r e p l i c a t e o r d i d n ' t e x p i r e . "
}
assert_equal [ r - 1 pfcount key] 0 ; # expired key not used
assert_equal [ r - 1 dbsize] 1 ; # but it's also not deleted
# cleanup
r debug set-active-expire 1
r del key
}
2011-07-11 00:46:25 +02:00
}
}