From fcb3aef7c424ede2d3f0e58adddd1a84154d29ae Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 13 Oct 2015 11:08:24 +0200 Subject: [PATCH] DEBUG RESTART/CRASH-AND-RECOVER [delay] implemented. --- src/debug.c | 14 ++++++++++++++ src/server.c | 3 +++ 2 files changed, 17 insertions(+) diff --git a/src/debug.c b/src/debug.c index 704e4bbf..a9644462 100644 --- a/src/debug.c +++ b/src/debug.c @@ -261,6 +261,20 @@ void inputCatSds(void *result, const char *str) { void debugCommand(client *c) { if (!strcasecmp(c->argv[1]->ptr,"segfault")) { *((char*)-1) = 'x'; + } else if (!strcasecmp(c->argv[1]->ptr,"restart") || + !strcasecmp(c->argv[1]->ptr,"crash-and-recover")) + { + long long delay = 0; + if (c->argc >= 3) { + if (getLongLongFromObjectOrReply(c, c->argv[2], &delay, NULL) + != C_OK) return; + if (delay < 0) delay = 0; + } + int flags = !strcasecmp(c->argv[1]->ptr,"restart") ? + (RESTART_SERVER_GRACEFULLY|RESTART_SERVER_CONFIG_REWRITE) : + RESTART_SERVER_NONE; + restartServer(flags,delay); + addReplyError(c,"failed to restart the server. Check server logs."); } else if (!strcasecmp(c->argv[1]->ptr,"oom")) { void *ptr = zmalloc(ULONG_MAX); /* Should trigger an out of memory. */ zfree(ptr); diff --git a/src/server.c b/src/server.c index 68704faa..c425bb3e 100644 --- a/src/server.c +++ b/src/server.c @@ -1579,6 +1579,9 @@ extern char **environ; /* Restart the server, executing the same executable that started this * instance, with the same arguments and configuration file. * + * The function is designed to directly call execve() so that the new + * server instance will retain the PID of the previous one. + * * The list of flags, that may be bitwise ORed together, alter the * behavior of this function: *