From 39272f6836d55c4a9f5ee274e119efcf63501bf0 Mon Sep 17 00:00:00 2001 From: WuYunlong Date: Fri, 23 Oct 2020 20:26:30 +0800 Subject: [PATCH] Update rdb_last_bgsave_time_sec in INFO on diskless replication (#7917) `info Persistence` will include correct (updated) rdb_last_bgsave_time_sec For diskless bgsave (sockets) too (like a few other persistence info fields). Refactor code to reduce duplicate code. (cherry picked from commit 51f36283df29e6969215baf63223653d7cec0059) --- src/rdb.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/rdb.c b/src/rdb.c index fa3934027..ee9418c6b 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -2426,7 +2426,7 @@ int rdbLoad(char *filename, rdbSaveInfo *rsi, int rdbflags) { /* A background saving child (BGSAVE) terminated its work. Handle this. * This function covers the case of actual BGSAVEs. */ -void backgroundSaveDoneHandlerDisk(int exitcode, int bysignal) { +static void backgroundSaveDoneHandlerDisk(int exitcode, int bysignal) { if (!bysignal && exitcode == 0) { serverLog(LL_NOTICE, "Background saving terminated with success"); @@ -2450,19 +2450,12 @@ void backgroundSaveDoneHandlerDisk(int exitcode, int bysignal) { if (bysignal != SIGUSR1) server.lastbgsave_status = C_ERR; } - server.rdb_child_pid = -1; - server.rdb_child_type = RDB_CHILD_TYPE_NONE; - server.rdb_save_time_last = time(NULL)-server.rdb_save_time_start; - server.rdb_save_time_start = -1; - /* Possibly there are slaves waiting for a BGSAVE in order to be served - * (the first stage of SYNC is a bulk transfer of dump.rdb) */ - updateSlavesWaitingBgsave((!bysignal && exitcode == 0) ? C_OK : C_ERR, RDB_CHILD_TYPE_DISK); } /* A background saving child (BGSAVE) terminated its work. Handle this. * This function covers the case of RDB -> Slaves socket transfers for * diskless replication. */ -void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) { +static void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) { if (!bysignal && exitcode == 0) { serverLog(LL_NOTICE, "Background RDB transfer terminated with success"); @@ -2472,15 +2465,11 @@ void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) { serverLog(LL_WARNING, "Background transfer terminated by signal %d", bysignal); } - server.rdb_child_pid = -1; - server.rdb_child_type = RDB_CHILD_TYPE_NONE; - server.rdb_save_time_start = -1; - - updateSlavesWaitingBgsave((!bysignal && exitcode == 0) ? C_OK : C_ERR, RDB_CHILD_TYPE_SOCKET); } /* When a background RDB saving/transfer terminates, call the right handler. */ void backgroundSaveDoneHandler(int exitcode, int bysignal) { + int type = server.rdb_child_type; switch(server.rdb_child_type) { case RDB_CHILD_TYPE_DISK: backgroundSaveDoneHandlerDisk(exitcode,bysignal); @@ -2492,6 +2481,14 @@ void backgroundSaveDoneHandler(int exitcode, int bysignal) { serverPanic("Unknown RDB child type."); break; } + + server.rdb_child_pid = -1; + server.rdb_child_type = RDB_CHILD_TYPE_NONE; + server.rdb_save_time_last = time(NULL)-server.rdb_save_time_start; + server.rdb_save_time_start = -1; + /* Possibly there are slaves waiting for a BGSAVE in order to be served + * (the first stage of SYNC is a bulk transfer of dump.rdb) */ + updateSlavesWaitingBgsave((!bysignal && exitcode == 0) ? C_OK : C_ERR, type); } /* Kill the RDB saving child using SIGUSR1 (so that the parent will know