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.
This commit is contained in:
parent
0f370f9b66
commit
e05a7df7f9
25
src/rdb.c
25
src/rdb.c
@ -2425,7 +2425,7 @@ int rdbLoad(char *filename, rdbSaveInfo *rsi, int rdbflags) {
|
|||||||
|
|
||||||
/* A background saving child (BGSAVE) terminated its work. Handle this.
|
/* A background saving child (BGSAVE) terminated its work. Handle this.
|
||||||
* This function covers the case of actual BGSAVEs. */
|
* 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) {
|
if (!bysignal && exitcode == 0) {
|
||||||
serverLog(LL_NOTICE,
|
serverLog(LL_NOTICE,
|
||||||
"Background saving terminated with success");
|
"Background saving terminated with success");
|
||||||
@ -2449,19 +2449,12 @@ void backgroundSaveDoneHandlerDisk(int exitcode, int bysignal) {
|
|||||||
if (bysignal != SIGUSR1)
|
if (bysignal != SIGUSR1)
|
||||||
server.lastbgsave_status = C_ERR;
|
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.
|
/* A background saving child (BGSAVE) terminated its work. Handle this.
|
||||||
* This function covers the case of RDB -> Slaves socket transfers for
|
* This function covers the case of RDB -> Slaves socket transfers for
|
||||||
* diskless replication. */
|
* diskless replication. */
|
||||||
void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) {
|
static void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) {
|
||||||
if (!bysignal && exitcode == 0) {
|
if (!bysignal && exitcode == 0) {
|
||||||
serverLog(LL_NOTICE,
|
serverLog(LL_NOTICE,
|
||||||
"Background RDB transfer terminated with success");
|
"Background RDB transfer terminated with success");
|
||||||
@ -2471,9 +2464,6 @@ void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) {
|
|||||||
serverLog(LL_WARNING,
|
serverLog(LL_WARNING,
|
||||||
"Background transfer terminated by signal %d", bysignal);
|
"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;
|
|
||||||
if (server.rdb_child_exit_pipe!=-1)
|
if (server.rdb_child_exit_pipe!=-1)
|
||||||
close(server.rdb_child_exit_pipe);
|
close(server.rdb_child_exit_pipe);
|
||||||
close(server.rdb_pipe_read);
|
close(server.rdb_pipe_read);
|
||||||
@ -2486,12 +2476,11 @@ void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) {
|
|||||||
zfree(server.rdb_pipe_buff);
|
zfree(server.rdb_pipe_buff);
|
||||||
server.rdb_pipe_buff = NULL;
|
server.rdb_pipe_buff = NULL;
|
||||||
server.rdb_pipe_bufflen = 0;
|
server.rdb_pipe_bufflen = 0;
|
||||||
|
|
||||||
updateSlavesWaitingBgsave((!bysignal && exitcode == 0) ? C_OK : C_ERR, RDB_CHILD_TYPE_SOCKET);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* When a background RDB saving/transfer terminates, call the right handler. */
|
/* When a background RDB saving/transfer terminates, call the right handler. */
|
||||||
void backgroundSaveDoneHandler(int exitcode, int bysignal) {
|
void backgroundSaveDoneHandler(int exitcode, int bysignal) {
|
||||||
|
int type = server.rdb_child_type;
|
||||||
switch(server.rdb_child_type) {
|
switch(server.rdb_child_type) {
|
||||||
case RDB_CHILD_TYPE_DISK:
|
case RDB_CHILD_TYPE_DISK:
|
||||||
backgroundSaveDoneHandlerDisk(exitcode,bysignal);
|
backgroundSaveDoneHandlerDisk(exitcode,bysignal);
|
||||||
@ -2503,6 +2492,14 @@ void backgroundSaveDoneHandler(int exitcode, int bysignal) {
|
|||||||
serverPanic("Unknown RDB child type.");
|
serverPanic("Unknown RDB child type.");
|
||||||
break;
|
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
|
/* Kill the RDB saving child using SIGUSR1 (so that the parent will know
|
||||||
|
Loading…
x
Reference in New Issue
Block a user