summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2012-07-28 20:55:17 +0200
committerantirez <antirez@gmail.com>2012-07-28 20:55:17 +0200
commit7f5bdba4343cf32c8ae7d38a3f6d0d163677c14c (patch)
tree2716bccb2bbb3d11501ce9f19fa8b65c58ed11d0
parent3f194a9d2571df21717b635f037040407a51d50d (diff)
parentf3a61431999ce99b1823de8ba7d8566a22d7566e (diff)
downloadredis-7f5bdba4343cf32c8ae7d38a3f6d0d163677c14c.tar.gz
Merge remote-tracking branch 'origin/unstable' into unstable
-rw-r--r--src/aof.c13
-rw-r--r--src/redis.c9
-rw-r--r--src/redis.h1
-rw-r--r--src/sentinel.c1
4 files changed, 21 insertions, 3 deletions
diff --git a/src/aof.c b/src/aof.c
index 09bfb0492..441ccaf18 100644
--- a/src/aof.c
+++ b/src/aof.c
@@ -250,6 +250,13 @@ void flushAppendOnlyFile(int force) {
strerror(errno),
(long)nwritten,
(long)sdslen(server.aof_buf));
+
+ if (ftruncate(server.aof_fd, server.aof_current_size) == -1) {
+ redisLog(REDIS_WARNING, "Could not remove short write "
+ "from the append-only file. Redis may refuse "
+ "to load the AOF the next time it starts. "
+ "ftruncate: %s", strerror(errno));
+ }
}
exit(1);
}
@@ -1093,6 +1100,8 @@ void backgroundRewriteDoneHandler(int exitcode, int bysignal) {
server.aof_buf = sdsempty();
}
+ server.aof_lastbgrewrite_status = REDIS_OK;
+
redisLog(REDIS_NOTICE, "Background AOF rewrite finished successfully");
/* Change state from WAIT_REWRITE to ON if needed */
if (server.aof_state == REDIS_AOF_WAIT_REWRITE)
@@ -1104,9 +1113,13 @@ void backgroundRewriteDoneHandler(int exitcode, int bysignal) {
redisLog(REDIS_VERBOSE,
"Background AOF rewrite signal handler took %lldus", ustime()-now);
} else if (!bysignal && exitcode != 0) {
+ server.aof_lastbgrewrite_status = REDIS_ERR;
+
redisLog(REDIS_WARNING,
"Background AOF rewrite terminated with error");
} else {
+ server.aof_lastbgrewrite_status = REDIS_ERR;
+
redisLog(REDIS_WARNING,
"Background AOF rewrite terminated by signal %d", bysignal);
}
diff --git a/src/redis.c b/src/redis.c
index e636aa9b5..f2c5e2c70 100644
--- a/src/redis.c
+++ b/src/redis.c
@@ -1121,6 +1121,7 @@ void initServerConfig() {
server.aof_last_fsync = time(NULL);
server.aof_rewrite_time_last = -1;
server.aof_rewrite_time_start = -1;
+ server.aof_lastbgrewrite_status = REDIS_OK;
server.aof_delayed_fsync = 0;
server.aof_fd = -1;
server.aof_selected_db = -1; /* Make sure the first time will not match */
@@ -1967,12 +1968,13 @@ sds genRedisInfoString(char *section) {
"aof_rewrite_in_progress:%d\r\n"
"aof_rewrite_scheduled:%d\r\n"
"aof_last_rewrite_time_sec:%ld\r\n"
- "aof_current_rewrite_time_sec:%ld\r\n",
+ "aof_current_rewrite_time_sec:%ld\r\n"
+ "aof_last_bgrewrite_status:%s\r\n",
server.loading,
server.dirty,
server.rdb_child_pid != -1,
server.lastsave,
- server.lastbgsave_status == REDIS_OK ? "ok" : "err",
+ (server.lastbgsave_status == REDIS_OK) ? "ok" : "err",
server.rdb_save_time_last,
(server.rdb_child_pid == -1) ?
-1 : time(NULL)-server.rdb_save_time_start,
@@ -1981,7 +1983,8 @@ sds genRedisInfoString(char *section) {
server.aof_rewrite_scheduled,
server.aof_rewrite_time_last,
(server.aof_child_pid == -1) ?
- -1 : time(NULL)-server.aof_rewrite_time_start);
+ -1 : time(NULL)-server.aof_rewrite_time_start,
+ (server.aof_lastbgrewrite_status == REDIS_OK) ? "ok" : "err");
if (server.aof_state != REDIS_AOF_OFF) {
info = sdscatprintf(info,
diff --git a/src/redis.h b/src/redis.h
index bee8cf4f1..d12e94458 100644
--- a/src/redis.h
+++ b/src/redis.h
@@ -652,6 +652,7 @@ struct redisServer {
time_t aof_last_fsync; /* UNIX time of last fsync() */
time_t aof_rewrite_time_last; /* Time used by last AOF rewrite run. */
time_t aof_rewrite_time_start; /* Current AOF rewrite start time. */
+ int aof_lastbgrewrite_status; /* REDIS_OK or REDIS_ERR */
unsigned long aof_delayed_fsync; /* delayed AOF fsync() counter */
/* RDB persistence */
long long dirty; /* Changes to DB from the last save */
diff --git a/src/sentinel.c b/src/sentinel.c
index 7bad05d04..1048e8c72 100644
--- a/src/sentinel.c
+++ b/src/sentinel.c
@@ -36,6 +36,7 @@
#include <ctype.h>
#include <arpa/inet.h>
#include <sys/socket.h>
+#include <sys/wait.h>
extern char **environ;