Skip to content
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
1 change: 1 addition & 0 deletions src/ctrip_swap_iter.c
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ rocksIter *rocksCreateIter(rocks *rocks, redisDb *db) {
if (rocks->snapshot) rocksdb_readoptions_set_snapshot(rocks->iter_ropts, rocks->snapshot);
rocksdb_options_t* cf_opts[CF_COUNT], *db_opts;
db_opts = rocksdb_options_create_copy(rocks->db_opts);
rocksdb_options_set_db_log_dir(db_opts, "");
/* disable background jobs since child have no background threads */
rocksdb_options_set_max_background_jobs(db_opts, 0);
rocksdb_options_set_max_background_compactions(db_opts, 0);
Expand Down
5 changes: 4 additions & 1 deletion src/ctrip_swap_rocks.c
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,10 @@ void rocksReleaseCheckpoint(rocks *rocks) {
serverLog(LL_NOTICE, "[rocks] releasing checkpoint in (%s).", server.rocksdb_checkpoint_dir);
rocksdb_checkpoint_object_destroy(server.rocksdb_checkpoint);
server.rocksdb_checkpoint = NULL;
rocksdb_destroy_db(rocks->db_opts, server.rocksdb_checkpoint_dir, &err);
rocksdb_options_t *db_opts = rocksdb_options_create_copy(rocks->db_opts);
rocksdb_options_set_db_log_dir(db_opts, "");
rocksdb_destroy_db(db_opts, server.rocksdb_checkpoint_dir, &err);
rocksdb_options_destroy(db_opts);
if (err != NULL) {
serverLog(LL_WARNING, "[rocks] destory db fail: %s", server.rocksdb_checkpoint_dir);
}
Expand Down
144 changes: 144 additions & 0 deletions tests/swap/integration/rocksdb_log_rotate.tcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@

proc do_fullsync {slave master_host master_port} {
$slave slaveof no one
$slave set testing.fullsync 1
after 100
$slave slaveof $master_host $master_port
wait_for_sync $slave
}


proc count_old_logs {logs_dir} {
return [llength [glob -nocomplain "$logs_dir/*_LOG.old.*"]]
}


proc get_log_file {logs_dir} {
set list [glob -nocomplain "$logs_dir/*_LOG"]
if {[llength $list] != 1} {
return ""
}
return [lindex $list 0]
}


start_server {tags {"swap rocksdb-log-rotate"} overrides {
swap-repl-rordb-sync yes
}} {
start_server {overrides {
swap-repl-rordb-sync yes
}} {
set master [srv -1 client]
set master_host [srv -1 host]
set master_port [srv -1 port]
set master_dir [lindex [$master config get dir] 1]
set slave [srv 0 client]
set slave_dir [lindex [$slave config get dir] 1]


set master_logs_dir "$master_dir/logs.rocks"
set slave_logs_dir "$slave_dir/logs.rocks"

$master mset k1 v1 k2 v2 k3 v3

test {rocksdb log rotate: step1 ror fullsync logs.rocks/LOG exist} {
$master set k1 v1
$master set k2 v2

$slave slaveof $master_host $master_port
wait_for_sync $slave

wait_for_condition 50 100 {
[get_log_file $master_logs_dir] != ""
} else {
fail "full sync logs.rocks/LOG exist fail"
}

assert {[file size [get_log_file $master_logs_dir]] > 1}
assert {[file size [get_log_file $slave_logs_dir]] > 1}
}

test {rocksdb log rotate:step2 ror fullsync slave LOG.old.* count<=12} {


for {set i 0} {$i < 13} {incr i} {
do_fullsync $slave $master_host $master_port
wait_for_condition 50 200 {
[status $master sync_full] == [expr {$i + 2}]
} else {
fail "sync_full not updated"
}
}

after 500

assert {[get_log_file $master_logs_dir] != ""}

assert {[file size [get_log_file $master_logs_dir]] > 1}
assert {[count_old_logs $master_logs_dir] == 0}
assert {[file size [get_log_file $slave_logs_dir]] > 1}
assert {[count_old_logs $slave_logs_dir] == 11}
}


}
}


start_server {tags {"swap rocksdb-log-rotate rdb fullsync"} overrides {
swap-repl-rordb-sync no
}} {
start_server {overrides {
swap-repl-rordb-sync no
}} {
set master [srv -1 client]
set master_host [srv -1 host]
set master_port [srv -1 port]
set master_dir [lindex [$master config get dir] 1]
set slave [srv 0 client]
set slave_dir [lindex [$slave config get dir] 1]



set master_logs_dir "$master_dir/logs.rocks"
set slave_logs_dir "$slave_dir/logs.rocks"

$master mset k1 v1 k2 v2 k3 v3

test {rocksdb log rotate: step1 rdb fullsync logs.rocks/LOG exist} {
$master set k1 v1
$master set k2 v2

$slave slaveof $master_host $master_port
wait_for_sync $slave

wait_for_condition 50 100 {
[get_log_file $master_logs_dir] != ""
} else {
fail "full sync logs.rocks/LOG exist fail"
}

assert {[file size [get_log_file $master_logs_dir]] > 1}
assert {[file size [get_log_file $slave_logs_dir]] > 1}
}

test {rocksdb log rotate:step2 rdb fullsync slave LOG.old.* count == 0} {

for {set i 0} {$i < 13} {incr i} {
do_fullsync $slave $master_host $master_port
wait_for_condition 50 200 {
[status $master sync_full] == [expr {$i + 2}]
} else {
fail "sync_full not updated"
}
}

assert {[get_log_file $master_logs_dir] != ""}

assert {[file size [get_log_file $master_logs_dir]] > 1}
assert {[count_old_logs $master_logs_dir] == 0}
assert {[file size [get_log_file $slave_logs_dir]] > 1}
assert {[count_old_logs $slave_logs_dir] == 0}
}
}
}
2 changes: 1 addition & 1 deletion tests/swap/unit/ltrim_check.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ start_server {tags {"list" "repl"} overrides {save ""}} {
$slave config set swap-debug-evict-keys -1

# Panic on replication error to detect the divergence immediately.
$slave config set propagation-error-behavior panic-on-replicas
# $slave config set propagation-error-behavior panic-on-replicas

test {swap-list LTRIM cold-segment repl divergence: no panic and master/replica consistent} {
set num_keys 4
Expand Down
1 change: 1 addition & 0 deletions tests/test_helper.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ set ::disk_tests {
swap/integration/expire_evict
swap/integration/swap_load
swap/integration/persist
swap/integration/rocksdb_log_rotate
swap/unit/swap_mode
swap/unit/absent_cache
swap/unit/dbsize
Expand Down
Loading