Skip to content

Commit

Permalink
show rdb load info in INFO reply
Browse files Browse the repository at this point in the history
  • Loading branch information
soloestoy committed Sep 10, 2021
1 parent 3ed9315 commit 9fbdb75
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 13 deletions.
15 changes: 8 additions & 7 deletions src/rdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -2343,6 +2343,8 @@ void startLoading(size_t size, int rdbflags) {
server.loading_loaded_bytes = 0;
server.loading_total_bytes = size;
server.loading_rdb_used_mem = 0;
server.rdb_last_load_keys_expired = 0;
server.rdb_last_load_keys_loaded = 0;
blockingOperationStarts();

/* Fire the loading modules start event. */
Expand Down Expand Up @@ -2433,7 +2435,7 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
redisDb *db = server.db+0;
char buf[1024];
int error;
long long empty_keys_skipped = 0, expired_keys_skipped = 0, keys_loaded = 0;
long long empty_keys_skipped = 0;

rdb->update_cksum = rdbLoadProgressCallback;
rdb->max_processing_chunk = server.loading_process_events_interval_bytes;
Expand Down Expand Up @@ -2676,15 +2678,14 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
}
sdsfree(key);
decrRefCount(val);
expired_keys_skipped++;
server.rdb_expired_keys_last_load++;
server.rdb_last_load_keys_expired++;
} else {
robj keyobj;
initStaticStringObject(keyobj,key);

/* Add the new object in the hash table */
int added = dbAddRDBLoad(db,key,val);
keys_loaded++;
server.rdb_last_load_keys_loaded++;
if (!added) {
if (rdbflags & RDBFLAGS_ALLOW_DUP) {
/* This flag is useful for DEBUG RELOAD special modes.
Expand Down Expand Up @@ -2745,11 +2746,11 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
if (empty_keys_skipped) {
serverLog(LL_WARNING,
"Done loading RDB, keys loaded: %lld, keys expired: %lld, empty keys skipped: %lld.",
keys_loaded, expired_keys_skipped, empty_keys_skipped);
server.rdb_last_load_keys_loaded, server.rdb_last_load_keys_expired, empty_keys_skipped);
} else {
serverLog(LL_WARNING,
serverLog(LL_NOTICE,
"Done loading RDB, keys loaded: %lld, keys expired: %lld.",
keys_loaded, expired_keys_skipped);
server.rdb_last_load_keys_loaded, server.rdb_last_load_keys_expired);
}
return C_OK;

Expand Down
9 changes: 6 additions & 3 deletions src/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -3137,7 +3137,6 @@ void resetServerStats(void) {
server.stat_total_error_replies = 0;
server.stat_dump_payload_sanitizations = 0;
server.aof_delayed_fsync = 0;
server.rdb_expired_keys_last_load = 0;
lazyfreeResetStats();
}

Expand Down Expand Up @@ -3282,6 +3281,8 @@ void initServer(void) {
server.lastbgsave_try = 0; /* At startup we never tried to BGSAVE. */
server.rdb_save_time_last = -1;
server.rdb_save_time_start = -1;
server.rdb_last_load_keys_expired = 0;
server.rdb_last_load_keys_loaded = 0;
server.dirty = 0;
resetServerStats();
/* A few stats we don't want to reset: server startup time, and peak mem. */
Expand Down Expand Up @@ -4902,7 +4903,8 @@ sds genRedisInfoString(const char *section) {
"rdb_last_bgsave_time_sec:%jd\r\n"
"rdb_current_bgsave_time_sec:%jd\r\n"
"rdb_last_cow_size:%zu\r\n"
"rdb_expired_keys_last_load:%lld\r\n"
"rdb_last_load_keys_expired:%lld\r\n"
"rdb_last_load_keys_loaded:%lld\r\n"
"aof_enabled:%d\r\n"
"aof_rewrite_in_progress:%d\r\n"
"aof_rewrite_scheduled:%d\r\n"
Expand All @@ -4928,7 +4930,8 @@ sds genRedisInfoString(const char *section) {
(intmax_t)((server.child_type != CHILD_TYPE_RDB) ?
-1 : time(NULL)-server.rdb_save_time_start),
server.stat_rdb_cow_bytes,
server.rdb_expired_keys_last_load,
server.rdb_last_load_keys_expired,
server.rdb_last_load_keys_loaded,
server.aof_state != AOF_OFF,
server.child_type == CHILD_TYPE_AOF,
server.aof_rewrite_scheduled,
Expand Down
3 changes: 2 additions & 1 deletion src/server.h
Original file line number Diff line number Diff line change
Expand Up @@ -1432,7 +1432,8 @@ struct redisServer {
/* RDB persistence */
long long dirty; /* Changes to DB from the last save */
long long dirty_before_bgsave; /* Used to restore dirty on failed BGSAVE */
long long rdb_expired_keys_last_load; /* number of expired keys when loading RDB */
long long rdb_last_load_keys_expired; /* number of expired keys when loading RDB */
long long rdb_last_load_keys_loaded; /* number of loaded keys when loading RDB */
struct saveparam *saveparams; /* Save points array for RDB */
int saveparamslen; /* Number of saving points */
char *rdb_filename; /* Name of RDB file */
Expand Down
4 changes: 2 additions & 2 deletions tests/integration/psync2-master-restart.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ start_server {} {

set expired_offset [status $master repl_backlog_histlen]
# Stale keys expired and master_repl_offset grows correctly
assert {[status $master rdb_expired_keys_last_load] == 1024}
assert {[status $master rdb_last_load_keys_expired] == 1024}
assert {[status $master master_repl_offset] == [expr $offset+$expired_offset]}

# Partial resync after Master restart
Expand Down Expand Up @@ -149,7 +149,7 @@ start_server {} {
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_expired_keys_last_load] == 1024}
assert {[status $master rdb_last_load_keys_expired] == 1024}
assert {[status $replica sync_full] == 1}

set digest [$master debug digest]
Expand Down
24 changes: 24 additions & 0 deletions tests/integration/rdb.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,30 @@ test {client freed during loading} {
}
}

start_server {} {
test {Test RDB load info} {
r debug populate 1000
r save
restart_server 0 true false
wait_done_loading r
assert {[s rdb_last_load_keys_expired] == 0}
assert {[s rdb_last_load_keys_loaded] == 1000}

r debug set-active-expire 0
for {set j 0} {$j < 1024} {incr j} {
r select [expr $j%16]
r setex $j 1 somevalue
}
after 1100

r save
restart_server 0 true false
wait_done_loading r
assert {[s rdb_last_load_keys_expired] == 1024}
assert {[s rdb_last_load_keys_loaded] == 1000}
}
}

# Our COW metrics (Private_Dirty) work only on Linux
set system_name [string tolower [exec uname -s]]
if {$system_name eq {linux}} {
Expand Down

0 comments on commit 9fbdb75

Please sign in to comment.