From db52edaa0d6bcb455e46703ed082f80157723178 Mon Sep 17 00:00:00 2001 From: Luc Heinrich Date: Mon, 23 Mar 2009 12:28:28 +0100 Subject: [PATCH 1/4] Added gitignore file. --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..973ee7e31 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.o +*.rdb +redis-cli +redis-server +redis-benchmark From ed329fcf25bb1c41949678eec125034326f86af2 Mon Sep 17 00:00:00 2001 From: Luc Heinrich Date: Mon, 23 Mar 2009 12:31:33 +0100 Subject: [PATCH 2/4] Allow to specify the pid file from the config file. --- redis.c | 9 ++++++++- redis.conf | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/redis.c b/redis.c index 04504eec2..dae4e0af0 100644 --- a/redis.c +++ b/redis.c @@ -171,6 +171,7 @@ struct redisServer { int maxidletime; int dbnum; int daemonize; + char *pidfile; int bgsaveinprogress; struct saveparam *saveparams; int saveparamslen; @@ -715,6 +716,7 @@ static void initServerConfig() { server.bindaddr = NULL; server.glueoutputbuf = 1; server.daemonize = 0; + server.pidfile = "/var/run/redis.pid"; server.dbfilename = "dump.rdb"; ResetServerSaveParams(); @@ -878,6 +880,8 @@ static void loadServerConfig(char *filename) { else { err = "argument must be 'yes' or 'no'"; goto loaderr; } + } else if (!strcmp(argv[0],"pidfile") && argc == 2) { + server.pidfile = zstrdup(argv[1]); } else { err = "Bad directive or wrong number of arguments"; goto loaderr; } @@ -1899,6 +1903,9 @@ static void bgsaveCommand(redisClient *c) { static void shutdownCommand(redisClient *c) { redisLog(REDIS_WARNING,"User requested shutdown, saving DB..."); if (saveDb(server.dbfilename) == REDIS_OK) { + if (server.daemonize) { + unlink(server.pidfile); + } redisLog(REDIS_WARNING,"Server exit now, bye bye..."); exit(1); } else { @@ -3033,7 +3040,7 @@ static void daemonize(void) { if (fd > STDERR_FILENO) close(fd); } /* Try to write the pid file */ - fp = fopen("/var/run/redis.pid","w"); + fp = fopen(server.pidfile,"w"); if (fp) { fprintf(fp,"%d\n",getpid()); fclose(fp); diff --git a/redis.conf b/redis.conf index 19a9c6401..3727efd59 100644 --- a/redis.conf +++ b/redis.conf @@ -4,6 +4,10 @@ # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. daemonize no +# When run as a daemon, Redis write a pid file in /var/run/redis.pid by default. +# You can specify a custom pid file location here. +pidfile /var/run/redis.pid + # Accept connections on the specified port, default is 6379 port 6379 From 46713f83d46babbc9ad48d11c52cd954a8553846 Mon Sep 17 00:00:00 2001 From: Luc Heinrich Date: Mon, 23 Mar 2009 12:42:10 +0100 Subject: [PATCH 3/4] Display the port on server startup. --- redis.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redis.c b/redis.c index dae4e0af0..fa0d6158f 100644 --- a/redis.c +++ b/redis.c @@ -3063,7 +3063,7 @@ int main(int argc, char **argv) { redisLog(REDIS_NOTICE,"DB loaded from disk"); if (aeCreateFileEvent(server.el, server.fd, AE_READABLE, acceptHandler, NULL, NULL) == AE_ERR) oom("creating file event"); - redisLog(REDIS_NOTICE,"The server is now ready to accept connections"); + redisLog(REDIS_NOTICE,"The server is now ready to accept connections on port %d", server.port); aeMain(server.el); aeDeleteEventLoop(server.el); return 0; From b91f03a4d14c166bb8ead41e5b556b1080ccd559 Mon Sep 17 00:00:00 2001 From: Luc Heinrich Date: Mon, 23 Mar 2009 12:43:16 +0100 Subject: [PATCH 4/4] Fixed redis-cli readLine loop to correctly handle EOF. When using the shutdown command with redis-cli the server saves the database and, if successful, silently closes the connection. The redis-cli tool did not correcty handle this EOF case in its readLine loop and was therefore infinitely looping - and eating 100% of the CPU - while waiting for some data which would never come. --- redis-cli.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/redis-cli.c b/redis-cli.c index 38c986b34..cd106684f 100644 --- a/redis-cli.c +++ b/redis-cli.c @@ -135,11 +135,13 @@ static sds cliReadLine(int fd) { while(1) { char c; + ssize_t ret; - if (read(fd,&c,1) == -1) { + ret = read(fd,&c,1); + if (ret == -1) { sdsfree(line); return NULL; - } else if (c == '\n') { + } else if ((ret == 0) || (c == '\n')) { break; } else { line = sdscatlen(line,&c,1);