Skip to content
Browse files

On Linux now fdatasync() is used insetad of fsync() in order to flush…

… the AOF file kernel buffers
  • Loading branch information...
1 parent 7aaaad5 commit 10ce12761a9971512e0702c73434bcef0f212e7d antirez committed May 2, 2010
Showing with 12 additions and 5 deletions.
  1. +7 −0 config.h
  2. +1 −1 fmacros.h
  3. +4 −4 redis.c
View
7 config.h
@@ -35,4 +35,11 @@
#define HAVE_KQUEUE 1
#endif
+/* define aof_fsync to fdatasync() in Linux and fsync() for all the rest */
+#ifdef __linux__
+#define aof_fsync fdatasync
+#else
+#define aof_fsync fsync
+#endif
+
#endif
View
2 fmacros.h
@@ -2,7 +2,7 @@
#define _REDIS_FMACRO_H
#define _BSD_SOURCE
-#define _XOPEN_SOURCE
+#define _XOPEN_SOURCE 700
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
View
8 redis.c
@@ -37,8 +37,6 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
-#define __USE_POSIX199309
-#define __USE_UNIX98
#include <signal.h>
#ifdef HAVE_BACKTRACE
@@ -4049,7 +4047,7 @@ static void echoCommand(redisClient *c) {
static void setGenericCommand(redisClient *c, int nx, robj *key, robj *val, robj *expire) {
int retval;
- long seconds;
+ long seconds = 0; /* initialized to avoid an harmness warning */
if (expire) {
if (getLongFromObjectOrReply(c, expire, &seconds, NULL) != REDIS_OK)
@@ -8090,7 +8088,9 @@ static void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv
(server.appendfsync == APPENDFSYNC_EVERYSEC &&
now-server.lastfsync > 1))
{
- fsync(server.appendfd); /* Let's try to get this data on the disk */
+ /* 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 = now;
}
}

0 comments on commit 10ce127

Please sign in to comment.
Something went wrong with that request. Please try again.