mirror of
https://github.com/fluencelabs/redis
synced 2025-03-30 22:31:03 +00:00
Merge pull request #1606 from mattsta/fix-disk-full-dataloss
Fix data loss when save AOF/RDB with no free space
This commit is contained in:
commit
7f1c3607ec
@ -969,9 +969,9 @@ int rewriteAppendOnlyFile(char *filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure data will not remain on the OS's output buffers */
|
/* Make sure data will not remain on the OS's output buffers */
|
||||||
fflush(fp);
|
if (fflush(fp) == EOF) goto werr;
|
||||||
aof_fsync(fileno(fp));
|
if (aof_fsync(fileno(fp)) == -1) goto werr;
|
||||||
fclose(fp);
|
if (fclose(fp) == EOF) goto werr;
|
||||||
|
|
||||||
/* Use RENAME to make sure the DB file is changed atomically only
|
/* Use RENAME to make sure the DB file is changed atomically only
|
||||||
* if the generate DB file is ok. */
|
* if the generate DB file is ok. */
|
||||||
|
@ -690,9 +690,9 @@ int rdbSave(char *filename) {
|
|||||||
rioWrite(&rdb,&cksum,8);
|
rioWrite(&rdb,&cksum,8);
|
||||||
|
|
||||||
/* Make sure data will not remain on the OS's output buffers */
|
/* Make sure data will not remain on the OS's output buffers */
|
||||||
fflush(fp);
|
if (fflush(fp) == EOF) goto werr;
|
||||||
fsync(fileno(fp));
|
if (fsync(fileno(fp)) == -1) goto werr;
|
||||||
fclose(fp);
|
if (fclose(fp) == EOF) goto werr;
|
||||||
|
|
||||||
/* Use RENAME to make sure the DB file is changed atomically only
|
/* Use RENAME to make sure the DB file is changed atomically only
|
||||||
* if the generate DB file is ok. */
|
* if the generate DB file is ok. */
|
||||||
|
@ -1562,19 +1562,22 @@ void rewriteConfigSentinelOption(struct rewriteConfigState *state) {
|
|||||||
void sentinelFlushConfig(void) {
|
void sentinelFlushConfig(void) {
|
||||||
int fd;
|
int fd;
|
||||||
int saved_hz = server.hz;
|
int saved_hz = server.hz;
|
||||||
|
int rewrite_status;
|
||||||
|
|
||||||
server.hz = REDIS_DEFAULT_HZ;
|
server.hz = REDIS_DEFAULT_HZ;
|
||||||
if (rewriteConfig(server.configfile) != -1) {
|
rewrite_status = rewriteConfig(server.configfile);
|
||||||
/* Rewrite succeded, fsync it. */
|
|
||||||
if ((fd = open(server.configfile,O_RDONLY)) != -1) {
|
|
||||||
fsync(fd);
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
redisLog(REDIS_WARNING,"WARNING: Sentinel was not able to save the new configuration on disk!!!: %s", strerror(errno));
|
|
||||||
}
|
|
||||||
server.hz = saved_hz;
|
server.hz = saved_hz;
|
||||||
|
|
||||||
|
if (rewrite_status == -1) goto werr;
|
||||||
|
if ((fd = open(server.configfile,O_RDONLY)) == -1) goto werr;
|
||||||
|
if (fsync(fd) == -1) goto werr;
|
||||||
|
if (close(fd) == EOF) goto werr;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
werr:
|
||||||
|
if (fd != -1) close(fd);
|
||||||
|
redisLog(REDIS_WARNING,"WARNING: Sentinel was not able to save the new configuration on disk!!!: %s", strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ====================== hiredis connection handling ======================= */
|
/* ====================== hiredis connection handling ======================= */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user