From 56fa48ffc136b7540f8144562d8aa2a13b8a3fa7 Mon Sep 17 00:00:00 2001 From: yoav-steinberg Date: Thu, 17 Feb 2022 14:32:48 +0200 Subject: [PATCH] aof rewrite and rdb save counters in info (#10178) Add aof_rewrites and rdb_snapshots counters to info. This is useful to figure our if a rewrite or snapshot happened since last check. This was part of the (ongoing) effort to provide a safe backup solution for multipart-aof backups. --- src/aof.c | 2 +- src/rdb.c | 1 + src/server.c | 6 ++++++ src/server.h | 2 ++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/aof.c b/src/aof.c index d7ba6b318..affe74441 100644 --- a/src/aof.c +++ b/src/aof.c @@ -2348,7 +2348,7 @@ int rewriteAppendOnlyFileBackground(void) { server.aof_selected_db = -1; flushAppendOnlyFile(1); if (openNewIncrAofForAppend() != C_OK) return C_ERR; - + server.stat_aof_rewrites++; if ((childpid = redisFork(CHILD_TYPE_AOF)) == 0) { char tmpfile[256]; diff --git a/src/rdb.c b/src/rdb.c index 533665d16..360ca605b 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -1471,6 +1471,7 @@ int rdbSaveBackground(int req, char *filename, rdbSaveInfo *rsi) { pid_t childpid; if (hasActiveChildProcess()) return C_ERR; + server.stat_rdb_saves++; server.dirty_before_bgsave = server.dirty; server.lastbgsave_try = time(NULL); diff --git a/src/server.c b/src/server.c index 16cf285e1..e157bd854 100644 --- a/src/server.c +++ b/src/server.c @@ -2282,6 +2282,8 @@ void resetServerStats(void) { memset(server.inst_metric[j].samples,0, sizeof(server.inst_metric[j].samples)); } + server.stat_aof_rewrites = 0; + server.stat_rdb_saves = 0; atomicSet(server.stat_net_input_bytes, 0); atomicSet(server.stat_net_output_bytes, 0); server.stat_unexpected_error_replies = 0; @@ -5277,6 +5279,7 @@ sds genRedisInfoString(dict *section_dict, int all_sections, int everything) { "rdb_last_bgsave_status:%s\r\n" "rdb_last_bgsave_time_sec:%jd\r\n" "rdb_current_bgsave_time_sec:%jd\r\n" + "rdb_saves:%lld\r\n" "rdb_last_cow_size:%zu\r\n" "rdb_last_load_keys_expired:%lld\r\n" "rdb_last_load_keys_loaded:%lld\r\n" @@ -5286,6 +5289,7 @@ sds genRedisInfoString(dict *section_dict, int all_sections, int everything) { "aof_last_rewrite_time_sec:%jd\r\n" "aof_current_rewrite_time_sec:%jd\r\n" "aof_last_bgrewrite_status:%s\r\n" + "aof_rewrites:%lld\r\n" "aof_last_write_status:%s\r\n" "aof_last_cow_size:%zu\r\n" "module_fork_in_progress:%d\r\n" @@ -5305,6 +5309,7 @@ sds genRedisInfoString(dict *section_dict, int all_sections, int everything) { (intmax_t)server.rdb_save_time_last, (intmax_t)((server.child_type != CHILD_TYPE_RDB) ? -1 : time(NULL)-server.rdb_save_time_start), + server.stat_rdb_saves, server.stat_rdb_cow_bytes, server.rdb_last_load_keys_expired, server.rdb_last_load_keys_loaded, @@ -5315,6 +5320,7 @@ sds genRedisInfoString(dict *section_dict, int all_sections, int everything) { (intmax_t)((server.child_type != CHILD_TYPE_AOF) ? -1 : time(NULL)-server.aof_rewrite_time_start), (server.aof_lastbgrewrite_status == C_OK) ? "ok" : "err", + server.stat_aof_rewrites, (server.aof_last_write_status == C_OK && aof_bio_fsync_status == C_OK) ? "ok" : "err", server.stat_aof_cow_bytes, diff --git a/src/server.h b/src/server.h index ed514a32b..41c1a3feb 100644 --- a/src/server.h +++ b/src/server.h @@ -1544,6 +1544,8 @@ struct redisServer { long long stat_total_active_defrag_time; /* Total time memory fragmentation over the limit, unit us */ monotime stat_last_active_defrag_time; /* Timestamp of current active defrag start */ size_t stat_peak_memory; /* Max used memory record */ + long long stat_aof_rewrites; /* number of aof file rewrites performed */ + long long stat_rdb_saves; /* number of rdb saves performed */ long long stat_fork_time; /* Time needed to perform latest fork() */ double stat_fork_rate; /* Fork rate in GB/sec. */ long long stat_total_forks; /* Total count of fork. */