mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 08:08:53 -05:00
Refactoring: always kill AOF/RDB child via helper functions.
This commit is contained in:
parent
5f42bfce05
commit
4dc69497f5
@ -204,7 +204,7 @@ void aof_background_fsync(int fd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Kills an AOFRW child process if exists */
|
/* Kills an AOFRW child process if exists */
|
||||||
static void killAppendOnlyChild(void) {
|
void killAppendOnlyChild(void) {
|
||||||
int statloc;
|
int statloc;
|
||||||
/* No AOFRW child? return. */
|
/* No AOFRW child? return. */
|
||||||
if (server.aof_child_pid == -1) return;
|
if (server.aof_child_pid == -1) return;
|
||||||
|
7
src/db.c
7
src/db.c
@ -448,12 +448,7 @@ void flushallCommand(client *c) {
|
|||||||
signalFlushedDb(-1);
|
signalFlushedDb(-1);
|
||||||
server.dirty += emptyDb(-1,flags,NULL);
|
server.dirty += emptyDb(-1,flags,NULL);
|
||||||
addReply(c,shared.ok);
|
addReply(c,shared.ok);
|
||||||
if (server.rdb_child_pid != -1) {
|
if (server.rdb_child_pid != -1) killRDBChild();
|
||||||
kill(server.rdb_child_pid,SIGUSR1);
|
|
||||||
rdbRemoveTempFile(server.rdb_child_pid);
|
|
||||||
closeChildInfoPipe();
|
|
||||||
updateDictResizePolicy();
|
|
||||||
}
|
|
||||||
if (server.saveparamslen > 0) {
|
if (server.saveparamslen > 0) {
|
||||||
/* Normally rdbSave() will reset dirty, but we don't want this here
|
/* Normally rdbSave() will reset dirty, but we don't want this here
|
||||||
* as otherwise FLUSHALL will not be replicated nor put into the AOF. */
|
* as otherwise FLUSHALL will not be replicated nor put into the AOF. */
|
||||||
|
10
src/rdb.c
10
src/rdb.c
@ -2225,6 +2225,16 @@ void backgroundSaveDoneHandler(int exitcode, int bysignal) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Kill the RDB saving child using SIGUSR1 (so that the parent will know
|
||||||
|
* the child did not exit for an error, but because we wanted), and performs
|
||||||
|
* the cleanup needed. */
|
||||||
|
void killRDBChild(void) {
|
||||||
|
kill(server.rdb_child_pid,SIGUSR1);
|
||||||
|
rdbRemoveTempFile(server.rdb_child_pid);
|
||||||
|
closeChildInfoPipe();
|
||||||
|
updateDictResizePolicy();
|
||||||
|
}
|
||||||
|
|
||||||
/* Spawn an RDB child that writes the RDB to the sockets of the slaves
|
/* Spawn an RDB child that writes the RDB to the sockets of the slaves
|
||||||
* that are currently in SLAVE_STATE_WAIT_BGSAVE_START state. */
|
* that are currently in SLAVE_STATE_WAIT_BGSAVE_START state. */
|
||||||
int rdbSaveToSlavesSockets(rdbSaveInfo *rsi) {
|
int rdbSaveToSlavesSockets(rdbSaveInfo *rsi) {
|
||||||
|
@ -1254,10 +1254,7 @@ void readSyncBulkPayload(aeEventLoop *el, int fd, void *privdata, int mask) {
|
|||||||
"Killing process %ld and removing its temp file to avoid "
|
"Killing process %ld and removing its temp file to avoid "
|
||||||
"any race",
|
"any race",
|
||||||
(long) server.rdb_child_pid);
|
(long) server.rdb_child_pid);
|
||||||
kill(server.rdb_child_pid,SIGUSR1);
|
killRDBChild();
|
||||||
rdbRemoveTempFile(server.rdb_child_pid);
|
|
||||||
closeChildInfoPipe();
|
|
||||||
updateDictResizePolicy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rename(server.repl_transfer_tmpfile,server.rdb_filename) == -1) {
|
if (rename(server.repl_transfer_tmpfile,server.rdb_filename) == -1) {
|
||||||
|
@ -2798,8 +2798,7 @@ int prepareForShutdown(int flags) {
|
|||||||
overwrite the synchronous saving did by SHUTDOWN. */
|
overwrite the synchronous saving did by SHUTDOWN. */
|
||||||
if (server.rdb_child_pid != -1) {
|
if (server.rdb_child_pid != -1) {
|
||||||
serverLog(LL_WARNING,"There is a child saving an .rdb. Killing it!");
|
serverLog(LL_WARNING,"There is a child saving an .rdb. Killing it!");
|
||||||
kill(server.rdb_child_pid,SIGUSR1);
|
killRDBChild();
|
||||||
rdbRemoveTempFile(server.rdb_child_pid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (server.aof_state != AOF_OFF) {
|
if (server.aof_state != AOF_OFF) {
|
||||||
@ -2814,7 +2813,7 @@ int prepareForShutdown(int flags) {
|
|||||||
}
|
}
|
||||||
serverLog(LL_WARNING,
|
serverLog(LL_WARNING,
|
||||||
"There is a child rewriting the AOF. Killing it!");
|
"There is a child rewriting the AOF. Killing it!");
|
||||||
kill(server.aof_child_pid,SIGUSR1);
|
killAppendOnlyChild();
|
||||||
}
|
}
|
||||||
/* Append only file: flush buffers and fsync() the AOF at exit */
|
/* Append only file: flush buffers and fsync() the AOF at exit */
|
||||||
serverLog(LL_NOTICE,"Calling fsync() on the AOF file.");
|
serverLog(LL_NOTICE,"Calling fsync() on the AOF file.");
|
||||||
|
@ -1674,6 +1674,7 @@ int writeCommandsDeniedByDiskError(void);
|
|||||||
/* RDB persistence */
|
/* RDB persistence */
|
||||||
#include "rdb.h"
|
#include "rdb.h"
|
||||||
int rdbSaveRio(rio *rdb, int *error, int flags, rdbSaveInfo *rsi);
|
int rdbSaveRio(rio *rdb, int *error, int flags, rdbSaveInfo *rsi);
|
||||||
|
void killRDBChild(void);
|
||||||
|
|
||||||
/* AOF persistence */
|
/* AOF persistence */
|
||||||
void flushAppendOnlyFile(int force);
|
void flushAppendOnlyFile(int force);
|
||||||
@ -1687,6 +1688,7 @@ void backgroundRewriteDoneHandler(int exitcode, int bysignal);
|
|||||||
void aofRewriteBufferReset(void);
|
void aofRewriteBufferReset(void);
|
||||||
unsigned long aofRewriteBufferSize(void);
|
unsigned long aofRewriteBufferSize(void);
|
||||||
ssize_t aofReadDiffFromParent(void);
|
ssize_t aofReadDiffFromParent(void);
|
||||||
|
void killAppendOnlyChild(void);
|
||||||
|
|
||||||
/* Child info */
|
/* Child info */
|
||||||
void openChildInfoPipe(void);
|
void openChildInfoPipe(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user