diff --git a/src/aof.c b/src/aof.c index 27dfd3efbe02152c30eb442119356494a115af5e..c50611b9e57be14871681b12ab400d17b56d865e 100644 --- a/src/aof.c +++ b/src/aof.c @@ -21,38 +21,38 @@ void aof_background_fsync(int fd) { void stopAppendOnly(void) { redisAssert(server.aof_state != REDIS_AOF_OFF); flushAppendOnlyFile(1); - aof_fsync(server.appendfd); - close(server.appendfd); + aof_fsync(server.aof_fd); + close(server.aof_fd); - server.appendfd = -1; - server.appendseldb = -1; + server.aof_fd = -1; + server.aof_selected_db = -1; server.aof_state = REDIS_AOF_OFF; /* rewrite operation in progress? kill it, wait child exit */ - if (server.bgrewritechildpid != -1) { + if (server.aof_child_pid != -1) { int statloc; - if (kill(server.bgrewritechildpid,SIGKILL) != -1) + if (kill(server.aof_child_pid,SIGKILL) != -1) wait3(&statloc,0,NULL); /* reset the buffer accumulating changes while the child saves */ - sdsfree(server.bgrewritebuf); - server.bgrewritebuf = sdsempty(); - aofRemoveTempFile(server.bgrewritechildpid); - server.bgrewritechildpid = -1; + sdsfree(server.aof_rewrite_buf); + server.aof_rewrite_buf = sdsempty(); + aofRemoveTempFile(server.aof_child_pid); + server.aof_child_pid = -1; } } /* Called when the user switches from "appendonly no" to "appendonly yes" * at runtime using the CONFIG command. */ int startAppendOnly(void) { - server.lastfsync = time(NULL); - server.appendfd = open(server.aof_filename,O_WRONLY|O_APPEND|O_CREAT,0644); + server.aof_last_fsync = time(NULL); + server.aof_fd = open(server.aof_filename,O_WRONLY|O_APPEND|O_CREAT,0644); redisAssert(server.aof_state == REDIS_AOF_OFF); - if (server.appendfd == -1) { + if (server.aof_fd == -1) { redisLog(REDIS_WARNING,"Redis needs to enable the AOF but can't open the append only file: %s",strerror(errno)); return REDIS_ERR; } if (rewriteAppendOnlyFileBackground() == REDIS_ERR) { - close(server.appendfd); + close(server.aof_fd); redisLog(REDIS_WARNING,"Redis needs to enable the AOF but can't trigger a background AOF rewrite operation. Check the above logs for more info about the error."); return REDIS_ERR; } @@ -84,7 +84,7 @@ void flushAppendOnlyFile(int force) { ssize_t nwritten; int sync_in_progress = 0; - if (sdslen(server.aofbuf) == 0) return; + if (sdslen(server.aof_buf) == 0) return; if (server.aof_fsync == AOF_FSYNC_EVERYSEC) sync_in_progress = bioPendingJobsOfType(REDIS_BIO_AOF_FSYNC) != 0; @@ -118,8 +118,8 @@ void flushAppendOnlyFile(int force) { * While this will save us against the server being killed I don't think * there is much to do about the whole server stopping for power problems * or alike */ - nwritten = write(server.appendfd,server.aofbuf,sdslen(server.aofbuf)); - if (nwritten != (signed)sdslen(server.aofbuf)) { + nwritten = write(server.aof_fd,server.aof_buf,sdslen(server.aof_buf)); + if (nwritten != (signed)sdslen(server.aof_buf)) { /* Ooops, we are in troubles. The best thing to do for now is * aborting instead of giving the illusion that everything is * working as expected. */ @@ -134,29 +134,29 @@ void flushAppendOnlyFile(int force) { /* Re-use AOF buffer when it is small enough. The maximum comes from the * arena size of 4k minus some overhead (but is otherwise arbitrary). */ - if ((sdslen(server.aofbuf)+sdsavail(server.aofbuf)) < 4000) { - sdsclear(server.aofbuf); + if ((sdslen(server.aof_buf)+sdsavail(server.aof_buf)) < 4000) { + sdsclear(server.aof_buf); } else { - sdsfree(server.aofbuf); - server.aofbuf = sdsempty(); + sdsfree(server.aof_buf); + server.aof_buf = sdsempty(); } /* Don't fsync if no-appendfsync-on-rewrite is set to yes and there are * children doing I/O in the background. */ if (server.aof_no_fsync_on_rewrite && - (server.bgrewritechildpid != -1 || server.bgsavechildpid != -1)) + (server.aof_child_pid != -1 || server.bgsavechildpid != -1)) return; /* Perform the fsync if needed. */ if (server.aof_fsync == AOF_FSYNC_ALWAYS) { /* aof_fsync is defined as fdatasync() for Linux in order to avoid * flushing metadata. */ - aof_fsync(server.appendfd); /* Let's try to get this data on the disk */ - server.lastfsync = server.unixtime; + aof_fsync(server.aof_fd); /* Let's try to get this data on the disk */ + server.aof_last_fsync = server.unixtime; } else if ((server.aof_fsync == AOF_FSYNC_EVERYSEC && - server.unixtime > server.lastfsync)) { - if (!sync_in_progress) aof_background_fsync(server.appendfd); - server.lastfsync = server.unixtime; + server.unixtime > server.aof_last_fsync)) { + if (!sync_in_progress) aof_background_fsync(server.aof_fd); + server.aof_last_fsync = server.unixtime; } } @@ -228,13 +228,13 @@ void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv, int a /* The DB this command was targetting is not the same as the last command * we appendend. To issue a SELECT command is needed. */ - if (dictid != server.appendseldb) { + if (dictid != server.aof_selected_db) { char seldb[64]; snprintf(seldb,sizeof(seldb),"%d",dictid); buf = sdscatprintf(buf,"*2\r\n$6\r\nSELECT\r\n$%lu\r\n%s\r\n", (unsigned long)strlen(seldb),seldb); - server.appendseldb = dictid; + server.aof_selected_db = dictid; } if (cmd->proc == expireCommand || cmd->proc == pexpireCommand || @@ -260,14 +260,14 @@ void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv, int a * of re-entering the event loop, so before the client will get a * positive reply about the operation performed. */ if (server.aof_state == REDIS_AOF_ON) - server.aofbuf = sdscatlen(server.aofbuf,buf,sdslen(buf)); + server.aof_buf = sdscatlen(server.aof_buf,buf,sdslen(buf)); /* If a background append only file rewriting is in progress we want to * accumulate the differences between the child DB and the current one * in a buffer, so that when the child process will do its work we * can append the differences to the new append only file. */ - if (server.bgrewritechildpid != -1) - server.bgrewritebuf = sdscatlen(server.bgrewritebuf,buf,sdslen(buf)); + if (server.aof_child_pid != -1) + server.aof_rewrite_buf = sdscatlen(server.aof_rewrite_buf,buf,sdslen(buf)); sdsfree(buf); } @@ -763,10 +763,10 @@ werr: * 1) The user calls BGREWRITEAOF * 2) Redis calls this function, that forks(): * 2a) the child rewrite the append only file in a temp file. - * 2b) the parent accumulates differences in server.bgrewritebuf. + * 2b) the parent accumulates differences in server.aof_rewrite_buf. * 3) When the child finished '2a' exists. * 4) The parent will trap the exit code, if it's OK, will append the - * data accumulated into server.bgrewritebuf into the temp file, and + * data accumulated into server.aof_rewrite_buf into the temp file, and * finally will rename(2) the temp file in the actual file name. * The the new file is reopened as the new append only file. Profit! */ @@ -774,7 +774,7 @@ int rewriteAppendOnlyFileBackground(void) { pid_t childpid; long long start; - if (server.bgrewritechildpid != -1) return REDIS_ERR; + if (server.aof_child_pid != -1) return REDIS_ERR; start = ustime(); if ((childpid = fork()) == 0) { char tmpfile[256]; @@ -800,20 +800,20 @@ int rewriteAppendOnlyFileBackground(void) { redisLog(REDIS_NOTICE, "Background append only file rewriting started by pid %d",childpid); server.aof_rewrite_scheduled = 0; - server.bgrewritechildpid = childpid; + server.aof_child_pid = childpid; updateDictResizePolicy(); /* We set appendseldb to -1 in order to force the next call to the * feedAppendOnlyFile() to issue a SELECT command, so the differences - * accumulated by the parent into server.bgrewritebuf will start + * accumulated by the parent into server.aof_rewrite_buf will start * with a SELECT statement and it will be safe to merge. */ - server.appendseldb = -1; + server.aof_selected_db = -1; return REDIS_OK; } return REDIS_OK; /* unreached */ } void bgrewriteaofCommand(redisClient *c) { - if (server.bgrewritechildpid != -1) { + if (server.aof_child_pid != -1) { addReplyError(c,"Background append only file rewriting already in progress"); } else if (server.bgsavechildpid != -1) { server.aof_rewrite_scheduled = 1; @@ -839,7 +839,7 @@ void aofRemoveTempFile(pid_t childpid) { void aofUpdateCurrentSize(void) { struct redis_stat sb; - if (redis_fstat(server.appendfd,&sb) == -1) { + if (redis_fstat(server.aof_fd,&sb) == -1) { redisLog(REDIS_WARNING,"Unable to check the AOF length: %s", strerror(errno)); } else { @@ -862,7 +862,7 @@ void backgroundRewriteDoneHandler(int exitcode, int bysignal) { /* Flush the differences accumulated by the parent to the * rewritten AOF. */ snprintf(tmpfile,256,"temp-rewriteaof-bg-%d.aof", - (int)server.bgrewritechildpid); + (int)server.aof_child_pid); newfd = open(tmpfile,O_WRONLY|O_APPEND); if (newfd == -1) { redisLog(REDIS_WARNING, @@ -870,8 +870,8 @@ void backgroundRewriteDoneHandler(int exitcode, int bysignal) { goto cleanup; } - nwritten = write(newfd,server.bgrewritebuf,sdslen(server.bgrewritebuf)); - if (nwritten != (signed)sdslen(server.bgrewritebuf)) { + nwritten = write(newfd,server.aof_rewrite_buf,sdslen(server.aof_rewrite_buf)); + if (nwritten != (signed)sdslen(server.aof_rewrite_buf)) { if (nwritten == -1) { redisLog(REDIS_WARNING, "Error trying to flush the parent diff to the rewritten AOF: %s", strerror(errno)); @@ -913,7 +913,7 @@ void backgroundRewriteDoneHandler(int exitcode, int bysignal) { * guarantee atomicity for this switch has already happened by then, so * we don't care what the outcome or duration of that close operation * is, as long as the file descriptor is released again. */ - if (server.appendfd == -1) { + if (server.aof_fd == -1) { /* AOF disabled */ /* Don't care if this fails: oldfd will be -1 and we handle that. @@ -935,26 +935,26 @@ void backgroundRewriteDoneHandler(int exitcode, int bysignal) { goto cleanup; } - if (server.appendfd == -1) { + if (server.aof_fd == -1) { /* AOF disabled, we don't need to set the AOF file descriptor * to this new file, so we can close it. */ close(newfd); } else { /* AOF enabled, replace the old fd with the new one. */ - oldfd = server.appendfd; - server.appendfd = newfd; + oldfd = server.aof_fd; + server.aof_fd = newfd; if (server.aof_fsync == AOF_FSYNC_ALWAYS) aof_fsync(newfd); else if (server.aof_fsync == AOF_FSYNC_EVERYSEC) aof_background_fsync(newfd); - server.appendseldb = -1; /* Make sure SELECT is re-issued */ + server.aof_selected_db = -1; /* Make sure SELECT is re-issued */ aofUpdateCurrentSize(); server.aof_rewrite_base_size = server.aof_current_size; /* Clear regular AOF buffer since its contents was just written to * the new AOF from the background rewrite buffer. */ - sdsfree(server.aofbuf); - server.aofbuf = sdsempty(); + sdsfree(server.aof_buf); + server.aof_buf = sdsempty(); } redisLog(REDIS_NOTICE, "Background AOF rewrite successful"); @@ -976,10 +976,10 @@ void backgroundRewriteDoneHandler(int exitcode, int bysignal) { } cleanup: - sdsfree(server.bgrewritebuf); - server.bgrewritebuf = sdsempty(); - aofRemoveTempFile(server.bgrewritechildpid); - server.bgrewritechildpid = -1; + sdsfree(server.aof_rewrite_buf); + server.aof_rewrite_buf = sdsempty(); + aofRemoveTempFile(server.aof_child_pid); + server.aof_child_pid = -1; /* Schedule a new rewrite if we are waiting for it to switch the AOF ON. */ if (server.aof_state == REDIS_AOF_WAIT_REWRITE) server.aof_rewrite_scheduled = 1; diff --git a/src/db.c b/src/db.c index 616b1fa1f3ad4d40e357769be8cc2191c0c15c13..0b6ce045085a007c2decd281207f8735b8def261 100644 --- a/src/db.c +++ b/src/db.c @@ -40,7 +40,7 @@ robj *lookupKey(redisDb *db, robj *key) { /* Update the access time for the aging algorithm. * Don't do it if we have a saving child, as this will trigger * a copy on write madness. */ - if (server.bgsavechildpid == -1 && server.bgrewritechildpid == -1) + if (server.bgsavechildpid == -1 && server.aof_child_pid == -1) val->lru = server.lruclock; server.stat_keyspace_hits++; return val; diff --git a/src/rdb.c b/src/rdb.c index 2c0feb6ded874318b19226a14ea6026c58d705e5..a401fe89aa0c7c456d7e244a7ed7b72ccb9a3168 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -1085,7 +1085,7 @@ void saveCommand(redisClient *c) { void bgsaveCommand(redisClient *c) { if (server.bgsavechildpid != -1) { addReplyError(c,"Background save already in progress"); - } else if (server.bgrewritechildpid != -1) { + } else if (server.aof_child_pid != -1) { addReplyError(c,"Can't BGSAVE while AOF log rewriting is in progress"); } else if (rdbSaveBackground(server.dbfilename) == REDIS_OK) { addReplyStatus(c,"Background saving started"); diff --git a/src/redis.c b/src/redis.c index 21e368f4c73c6a2666bd12279124c8607754d94f..6236f60375b1a471a137341d9db4e377fb81f88b 100644 --- a/src/redis.c +++ b/src/redis.c @@ -563,7 +563,7 @@ void incrementallyRehash(void) { * for dict.c to resize the hash tables accordingly to the fact we have o not * running childs. */ void updateDictResizePolicy(void) { - if (server.bgsavechildpid == -1 && server.bgrewritechildpid == -1) + if (server.bgsavechildpid == -1 && server.aof_child_pid == -1) dictEnableResize(); else dictDisableResize(); @@ -673,7 +673,7 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) { * if we resize the HT while there is the saving child at work actually * a lot of memory movements in the parent will cause a lot of pages * copied. */ - if (server.bgsavechildpid == -1 && server.bgrewritechildpid == -1) { + if (server.bgsavechildpid == -1 && server.aof_child_pid == -1) { if (!(loops % 10)) tryResizeHashTables(); if (server.activerehashing) incrementallyRehash(); } @@ -692,14 +692,14 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) { /* Start a scheduled AOF rewrite if this was requested by the user while * a BGSAVE was in progress. */ - if (server.bgsavechildpid == -1 && server.bgrewritechildpid == -1 && + if (server.bgsavechildpid == -1 && server.aof_child_pid == -1 && server.aof_rewrite_scheduled) { rewriteAppendOnlyFileBackground(); } /* Check if a background saving or AOF rewrite in progress terminated. */ - if (server.bgsavechildpid != -1 || server.bgrewritechildpid != -1) { + if (server.bgsavechildpid != -1 || server.aof_child_pid != -1) { int statloc; pid_t pid; @@ -735,7 +735,7 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) { /* Trigger an AOF rewrite if needed */ if (server.bgsavechildpid == -1 && - server.bgrewritechildpid == -1 && + server.aof_child_pid == -1 && server.aof_rewrite_perc && server.aof_current_size > server.aof_rewrite_min_size) { @@ -880,9 +880,9 @@ void initServerConfig() { server.aof_rewrite_min_size = REDIS_AOF_REWRITE_MIN_SIZE; server.aof_rewrite_base_size = 0; server.aof_rewrite_scheduled = 0; - server.lastfsync = time(NULL); - server.appendfd = -1; - server.appendseldb = -1; /* Make sure the first time will not match */ + server.aof_last_fsync = time(NULL); + server.aof_fd = -1; + server.aof_selected_db = -1; /* Make sure the first time will not match */ server.aof_flush_postponed_start = 0; server.pidfile = zstrdup("/var/run/redis.pid"); server.dbfilename = zstrdup("dump.rdb"); @@ -1045,9 +1045,9 @@ void initServer() { listSetMatchMethod(server.pubsub_patterns,listMatchPubsubPattern); server.cronloops = 0; server.bgsavechildpid = -1; - server.bgrewritechildpid = -1; - server.bgrewritebuf = sdsempty(); - server.aofbuf = sdsempty(); + server.aof_child_pid = -1; + server.aof_rewrite_buf = sdsempty(); + server.aof_buf = sdsempty(); server.lastsave = time(NULL); server.dirty = 0; server.stat_numcommands = 0; @@ -1068,9 +1068,9 @@ void initServer() { acceptUnixHandler,NULL) == AE_ERR) oom("creating file event"); if (server.aof_state == REDIS_AOF_ON) { - server.appendfd = open(server.aof_filename, + server.aof_fd = open(server.aof_filename, O_WRONLY|O_APPEND|O_CREAT,0644); - if (server.appendfd == -1) { + if (server.aof_fd == -1) { redisLog(REDIS_WARNING, "Can't open the append-only file: %s", strerror(errno)); exit(1); @@ -1313,14 +1313,14 @@ int prepareForShutdown(int flags) { if (server.aof_state != REDIS_AOF_OFF) { /* Kill the AOF saving child as the AOF we already have may be longer * but contains the full dataset anyway. */ - if (server.bgrewritechildpid != -1) { + if (server.aof_child_pid != -1) { redisLog(REDIS_WARNING, "There is a child rewriting the AOF. Killing it!"); - kill(server.bgrewritechildpid,SIGKILL); + kill(server.aof_child_pid,SIGKILL); } /* Append only file: fsync() the AOF and exit */ redisLog(REDIS_NOTICE,"Calling fsync() on the AOF file."); - aof_fsync(server.appendfd); + aof_fsync(server.aof_fd); } if ((server.saveparamslen > 0 && !nosave) || save) { redisLog(REDIS_NOTICE,"Saving the final RDB snapshot before exiting."); @@ -1501,7 +1501,7 @@ sds genRedisInfoString(char *section) { server.dirty, server.bgsavechildpid != -1, server.lastsave, - server.bgrewritechildpid != -1); + server.aof_child_pid != -1); if (server.aof_state != REDIS_AOF_OFF) { info = sdscatprintf(info, @@ -1513,7 +1513,7 @@ sds genRedisInfoString(char *section) { (long long) server.aof_current_size, (long long) server.aof_rewrite_base_size, server.aof_rewrite_scheduled, - sdslen(server.aofbuf), + sdslen(server.aof_buf), bioPendingJobsOfType(REDIS_BIO_AOF_FSYNC)); } diff --git a/src/redis.h b/src/redis.h index f609a1985d6300caae6bd3ff331423d703f7c952..2010f19b24ae56306a76c9c289d6aaaf2c65cbb5 100644 --- a/src/redis.h +++ b/src/redis.h @@ -560,13 +560,13 @@ struct redisServer { off_t aof_rewrite_base_size; /* AOF size on latest startup or rewrite. */ off_t aof_current_size; /* AOF current size. */ int aof_rewrite_scheduled; /* Rewrite once BGSAVE terminates. */ - pid_t bgrewritechildpid; /* PID if rewriting process */ - sds bgrewritebuf; /* buffer taken by parent during oppend only rewrite */ - sds aofbuf; /* AOF buffer, written before entering the event loop */ - int appendfd; /* File descriptor of currently selected AOF file */ - int appendseldb; /* Currently selected DB in AOF */ + pid_t aof_child_pid; /* PID if rewriting process */ + sds aof_rewrite_buf; /* buffer taken by parent during oppend only rewrite */ + sds aof_buf; /* AOF buffer, written before entering the event loop */ + int aof_fd; /* File descriptor of currently selected AOF file */ + int aof_selected_db; /* Currently selected DB in AOF */ time_t aof_flush_postponed_start; /* UNIX time of postponed AOF flush */ - time_t lastfsync; /* UNIX time of last fsync() */ + time_t aof_last_fsync; /* UNIX time of last fsync() */ /* RDB persistence */ long long dirty; /* Changes to DB from the last save */ long long dirty_before_bgsave; /* Used to restore dirty on failed BGSAVE */