summaryrefslogtreecommitdiff
path: root/examples/redis-unstable/tests/integration/psync2-master-restart.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'examples/redis-unstable/tests/integration/psync2-master-restart.tcl')
-rw-r--r--examples/redis-unstable/tests/integration/psync2-master-restart.tcl233
1 files changed, 0 insertions, 233 deletions
diff --git a/examples/redis-unstable/tests/integration/psync2-master-restart.tcl b/examples/redis-unstable/tests/integration/psync2-master-restart.tcl
deleted file mode 100644
index 5971e74..0000000
--- a/examples/redis-unstable/tests/integration/psync2-master-restart.tcl
+++ /dev/null
@@ -1,233 +0,0 @@
-start_server {tags {"psync2 external:skip"}} {
-start_server {} {
-start_server {} {
- set master [srv 0 client]
- set master_host [srv 0 host]
- set master_port [srv 0 port]
-
- set replica [srv -1 client]
- set replica_host [srv -1 host]
- set replica_port [srv -1 port]
-
- set sub_replica [srv -2 client]
-
- # Make sure the server saves an RDB on shutdown
- $master config set save "3600 1"
-
- # Because we will test partial resync later, we don't want a timeout to cause
- # the master-replica disconnect, then the extra reconnections will break the
- # sync_partial_ok stat test
- $master config set repl-timeout 3600
- $replica config set repl-timeout 3600
- $sub_replica config set repl-timeout 3600
-
- # Avoid PINGs
- $master config set repl-ping-replica-period 3600
- $master config rewrite
-
- # Build replication chain
- $replica replicaof $master_host $master_port
- $sub_replica replicaof $replica_host $replica_port
-
- wait_for_condition 50 100 {
- [status $replica master_link_status] eq {up} &&
- [status $sub_replica master_link_status] eq {up}
- } else {
- fail "Replication not started."
- }
-
- test "PSYNC2: Partial resync after Master restart using RDB aux fields when offset is 0" {
- assert {[status $master master_repl_offset] == 0}
-
- set replid [status $master master_replid]
- $replica config resetstat
-
- catch {
- restart_server 0 true false true now
- set master [srv 0 client]
- }
- wait_for_condition 50 1000 {
- [status $replica master_link_status] eq {up} &&
- [status $sub_replica master_link_status] eq {up}
- } else {
- fail "Replicas didn't sync after master restart"
- }
-
- # Make sure master restore replication info correctly
- assert {[status $master master_replid] != $replid}
- assert {[status $master master_repl_offset] == 0}
- assert {[status $master master_replid2] eq $replid}
- assert {[status $master second_repl_offset] == 1}
-
- # Make sure master set replication backlog correctly
- assert {[status $master repl_backlog_active] == 1}
- assert {[status $master repl_backlog_first_byte_offset] == 1}
- assert {[status $master repl_backlog_histlen] == 0}
-
- # Partial resync after Master restart
- assert {[status $master sync_partial_ok] == 1}
- assert {[status $replica sync_partial_ok] == 1}
- }
-
- # Generate some data
- createComplexDataset $master 1000
-
- test "PSYNC2: Partial resync after Master restart using RDB aux fields with data" {
- wait_for_condition 500 100 {
- [status $master master_repl_offset] == [status $replica master_repl_offset] &&
- [status $master master_repl_offset] == [status $sub_replica master_repl_offset]
- } else {
- fail "Replicas and master offsets were unable to match *exactly*."
- }
-
- set replid [status $master master_replid]
- set offset [status $master master_repl_offset]
- $replica config resetstat
-
- catch {
- # SHUTDOWN NOW ensures master doesn't send GETACK to replicas before
- # shutting down which would affect the replication offset.
- restart_server 0 true false true now
- set master [srv 0 client]
- }
- wait_for_condition 50 1000 {
- [status $replica master_link_status] eq {up} &&
- [status $sub_replica master_link_status] eq {up}
- } else {
- fail "Replicas didn't sync after master restart"
- }
-
- # Make sure master restore replication info correctly
- assert {[status $master master_replid] != $replid}
- assert {[status $master master_repl_offset] == $offset}
- assert {[status $master master_replid2] eq $replid}
- assert {[status $master second_repl_offset] == [expr $offset+1]}
-
- # Make sure master set replication backlog correctly
- assert {[status $master repl_backlog_active] == 1}
- assert {[status $master repl_backlog_first_byte_offset] == [expr $offset+1]}
- assert {[status $master repl_backlog_histlen] == 0}
-
- # Partial resync after Master restart
- assert {[status $master sync_partial_ok] == 1}
- assert {[status $replica sync_partial_ok] == 1}
- }
-
- test "PSYNC2: Partial resync after Master restart using RDB aux fields with expire" {
- $master debug set-active-expire 0
- for {set j 0} {$j < 1024} {incr j} {
- $master select [expr $j%16]
- $master set $j somevalue px 10
- }
-
- after 20
-
- # Wait until master has received ACK from replica. If the master thinks
- # that any replica is lagging when it shuts down, master would send
- # GETACK to the replicas, affecting the replication offset.
- set offset [status $master master_repl_offset]
- wait_for_condition 500 100 {
- [string match "*slave0:*,offset=$offset,*" [$master info replication]] &&
- $offset == [status $replica master_repl_offset] &&
- $offset == [status $sub_replica master_repl_offset]
- } else {
- show_cluster_status
- fail "Replicas and master offsets were unable to match *exactly*."
- }
-
- set offset [status $master master_repl_offset]
- $replica config resetstat
-
- catch {
- # Unlike the test above, here we use SIGTERM, which behaves
- # differently compared to SHUTDOWN NOW if there are lagging
- # replicas. This is just to increase coverage and let each test use
- # a different shutdown approach. In this case there are no lagging
- # replicas though.
- restart_server 0 true false
- set master [srv 0 client]
- }
- wait_for_condition 50 1000 {
- [status $replica master_link_status] eq {up} &&
- [status $sub_replica master_link_status] eq {up}
- } else {
- fail "Replicas didn't sync after master restart"
- }
-
- set expired_offset [status $master repl_backlog_histlen]
- # Stale keys expired and master_repl_offset grows correctly
- assert {[status $master rdb_last_load_keys_expired] == 1024}
- assert {[status $master master_repl_offset] == [expr $offset+$expired_offset]}
-
- # Partial resync after Master restart
- assert {[status $master sync_partial_ok] == 1}
- assert {[status $replica sync_partial_ok] == 1}
-
- set digest [$master debug digest]
- wait_for_condition 10 100 {
- $digest eq [$replica debug digest] &&
- $digest eq [$sub_replica debug digest]
- } else {
- fail "Replica and sub-replica didn't sync after master restart in time..."
- }
- }
-
- test "PSYNC2: Full resync after Master restart when too many key expired" {
- $master config set repl-backlog-size 16384
- $master config rewrite
-
- $master debug set-active-expire 0
- # Make sure replication backlog is full and will be trimmed.
- for {set j 0} {$j < 2048} {incr j} {
- $master select [expr $j%16]
- $master set $j somevalue px 10
- }
-
- ##### hash-field-expiration
- # Hashes of type OBJ_ENCODING_LISTPACK_EX won't be discarded during
- # RDB load, even if they are expired.
- $master hset myhash1 f1 v1 f2 v2 f3 v3
- $master hpexpire myhash1 10 FIELDS 3 f1 f2 f3
- # Hashes of type RDB_TYPE_HASH_METADATA will be discarded during RDB load.
- $master config set hash-max-listpack-entries 0
- $master hset myhash2 f1 v1 f2 v2
- $master hpexpire myhash2 10 FIELDS 2 f1 f2
- $master config set hash-max-listpack-entries 1
-
- after 20
-
- wait_for_condition 500 100 {
- [status $master master_repl_offset] == [status $replica master_repl_offset] &&
- [status $master master_repl_offset] == [status $sub_replica master_repl_offset]
- } else {
- fail "Replicas and master offsets were unable to match *exactly*."
- }
-
- $replica config resetstat
-
- catch {
- # Unlike the test above, here we use SIGTERM. This is just to
- # increase coverage and let each test use a different shutdown
- # approach.
- restart_server 0 true false
- set master [srv 0 client]
- }
- wait_for_condition 50 1000 {
- [status $replica master_link_status] eq {up} &&
- [status $sub_replica master_link_status] eq {up}
- } else {
- fail "Replicas didn't sync after master restart"
- }
-
- # Replication backlog is full
- assert {[status $master repl_backlog_first_byte_offset] > [status $master second_repl_offset]}
- assert {[status $master sync_partial_ok] == 0}
- assert {[status $master sync_full] == 1}
- assert {[status $master rdb_last_load_keys_expired] == 2048}
- assert {[status $replica sync_full] == 1}
-
- set digest [$master debug digest]
- assert {$digest eq [$replica debug digest]}
- assert {$digest eq [$sub_replica debug digest]}
- }
-}}}