Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hotfix/hdel create null tombstone #165

Merged
merged 6 commits into from
Jan 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified tests/assets/linux/crdt.so
Binary file not shown.
61 changes: 61 additions & 0 deletions tests/ctrip/unit/crdt_hash.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -553,3 +553,64 @@ start_server { tags {"repl"} config {crdt.conf} overrides {crdt-gid 1 repl-diskl
}



start_server {tags {"repl"} overrides {crdt-gid 1} module {crdt.so} } {
set master [srv 0 client]
set master_host [srv 0 host]
set master_port [srv 0 port]
set master_log [srv 0 stdout]
$master config set hz 100

start_server {tags {"repl"} overrides {crdt-gid 2} module {crdt.so} } {
set peer [srv 0 client]
set peer_host [srv 0 host]
set peer_port [srv 0 port]
set peer_log [srv 0 stdout]
$peer config set hz 100
$peer config crdt.set repl-timeout 120
$peer peerof 1 $master_host $master_port
$master peerof 2 $peer_host $peer_port
wait_for_peer_sync $peer
wait_for_peer_sync $master
set peer_ovc [crdt_repl $peer ovc]
$master hdel h k
if {[$master tombstonesize] == 1} {
#only test gc old null tombstone
set try 10
while {$try > 0} {
if {[$master tombstonesize] == 0} {
break;
}
after 500
set try [expr {$try-1}]
}
assert {$try > 0}
} else {
assert {[crdt_repl $peer ovc] == $peer_ovc}
}


$master hset h k v
while 1 {
if {[$peer hget h k] == "v"} {
break;
}
}
set peer_ovc [crdt_repl $peer ovc]
$master hdel h k1
if {[$master tombstonesize] == 1} {
#only test gc old null tombstone
set try 10
while {$try > 0} {
if {[$master tombstonesize] == 0} {
break;
}
after 500
set try [expr {$try-1}]
}
assert {$try > 0}
} elseif {[$master tombstonesize] == 0} {
assert {[crdt_repl $peer ovc] == $peer_ovc}
}
}
}
65 changes: 65 additions & 0 deletions tests/ctrip/unit/crdt_set.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -547,3 +547,68 @@ start_server {tags {"crdt-set"} overrides {crdt-gid 1} config {crdt.conf} module

}

start_server {tags {"repl"} overrides {crdt-gid 1} module {crdt.so} } {
set master [srv 0 client]
set master_host [srv 0 host]
set master_port [srv 0 port]
set master_log [srv 0 stdout]
$master config set hz 100

start_server {tags {"repl"} overrides {crdt-gid 2} module {crdt.so} } {
set peer [srv 0 client]
set peer_host [srv 0 host]
set peer_port [srv 0 port]
set peer_log [srv 0 stdout]
$peer config set hz 100
$peer config crdt.set repl-timeout 120
$peer peerof 1 $master_host $master_port
$master peerof 2 $peer_host $peer_port
wait_for_peer_sync $peer
wait_for_peer_sync $master
set peer_data_info [$peer crdt.datainfo s]
set master_data_info [$master crdt.datainfo s]
$master srem s f
if {[$master tombstonesize] == 1} {
#only test gc old null tombstone
set try 10
while {$try > 0} {
if {[$master tombstonesize] == 0} {
break;
}
after 500
set try [expr {$try-1}]
}
assert {$try > 0}
} else {
assert {[$peer crdt.datainfo s] == $peer_data_info}
assert {[$master crdt.datainfo s] == $master_data_info}
}

$master sadd s a
while 1 {
if {[$peer sismember s a] == 1} {
break;
}
}

set peer_data_info [$peer crdt.datainfo s]
set master_data_info [$master crdt.datainfo s]
$master crdt.debug_gc set 0
$master srem s f
if {[$master tombstonesize] == 1} {
#only test gc old null tombstone
set try 10
while {$try > 0} {
if {[$master tombstonesize] == 0} {
break;
}
after 500
set try [expr {$try-1}]
}
assert {$try > 0}
} else {
assert {[$peer crdt.datainfo s] == $peer_data_info}
assert {[$master crdt.datainfo s] == $master_data_info}
}
}
}
101 changes: 101 additions & 0 deletions tests/ctrip/unit/crdt_zset.tcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
start_server {tags {"repl"} overrides {crdt-gid 1} module {crdt.so} } {
set master [srv 0 client]
set master_host [srv 0 host]
set master_port [srv 0 port]
set master_log [srv 0 stdout]
$master config set hz 100

start_server {tags {"repl"} overrides {crdt-gid 2} module {crdt.so} } {
set peer [srv 0 client]
set peer_host [srv 0 host]
set peer_port [srv 0 port]
set peer_log [srv 0 stdout]
$peer config set hz 100
$peer config crdt.set repl-timeout 120
$peer peerof 1 $master_host $master_port
$master peerof 2 $peer_host $peer_port
wait_for_peer_sync $peer
wait_for_peer_sync $master
set peer_data_info [$peer crdt.datainfo z]
set master_data_info [$master crdt.datainfo z]
$master zrem z f
if {[$master tombstonesize] == 1} {
#only test gc old null tombstone
set try 10
while {$try > 0} {
if {[$master tombstonesize] == 0} {
break;
}
after 500
set try [expr {$try-1}]
}
assert {$try > 0}
} else {
assert {[$peer crdt.datainfo z] == $peer_data_info}
assert {[$master crdt.datainfo z] == $master_data_info}
}

assert_equal [$master zremrangebyrank z 10 -1] 0
assert {[$master crdt.datainfo z] == $master_data_info}
after 1000
assert {[$peer crdt.datainfo z] == $peer_data_info}


assert_equal [$master zremrangebyscore z 1 11] 0
assert {[$master crdt.datainfo z] == $master_data_info}
after 1000
assert {[$peer crdt.datainfo z] == $peer_data_info}


assert_equal [$master zremrangebylex z "\[a" "\[z"] 0
assert {[$master crdt.datainfo z] == $master_data_info}
after 1000
assert {[$peer crdt.datainfo z] == $peer_data_info}
#add zset key

$master zadd z 10 f
while 1 {
if {[$peer zscore z f] == 10} {
break;
}
}
set peer_data_info [$peer crdt.datainfo z]
set master_data_info [$master crdt.datainfo z]
$master zrem z f1
if {[$master tombstonesize] == 1} {
#only test gc old null tombstone
set try 10
while {$try > 0} {
if {[$master tombstonesize] == 0} {
break;
}
after 500
set try [expr {$try-1}]
}
assert {$try > 0}
} elseif {[$master tombstonesize] == 0} {
assert {[$peer crdt.datainfo z] == $peer_data_info}
assert {[$master crdt.datainfo z] == $master_data_info}
}

$master crdt.debug_gc zset 0
assert_equal [$master zremrangebyrank z 1 -1] 0

assert_equal [$master tombstonesize] 0
assert {[$master crdt.datainfo z] == $master_data_info}
after 1000
assert {[$peer crdt.datainfo z] == $peer_data_info}

assert_equal [$master zremrangebyscore z 11 15] 0
assert_equal [$master tombstonesize] 0
assert {$master_data_info == [$master crdt.datainfo z]}
after 1000
assert {[$peer crdt.datainfo z] == $peer_data_info}

assert_equal [$master zremrangebylex z "\[g" "\[z"] 0
assert_equal [$master tombstonesize] 0
assert {[$master crdt.datainfo z] == $master_data_info}
after 1000
assert {[$peer crdt.datainfo z] == $peer_data_info}
}
}
Loading