]> git.saurik.com Git - redis.git/commitdiff
New INFO field aof_delayed_fsync introduced.
authorantirez <antirez@gmail.com>
Sun, 25 Mar 2012 09:27:35 +0000 (11:27 +0200)
committerantirez <antirez@gmail.com>
Sun, 25 Mar 2012 09:27:35 +0000 (11:27 +0200)
This new field counts all the times Redis is configured with AOF enabled and
fsync policy 'everysec', but the previous fsync performed by the
background thread was not able to complete within two seconds, forcing
Redis to perform a write against the AOF file while the fsync is still
in progress (likely a blocking operation).

src/aof.c
src/config.c
src/redis.c
src/redis.h

index 83633217f796354649929880f6ed509cad552f32..4d3ce096acea3ae0019ba970c73b5024a1c313a2 100644 (file)
--- a/src/aof.c
+++ b/src/aof.c
@@ -108,6 +108,7 @@ void flushAppendOnlyFile(int force) {
             }
             /* Otherwise fall trough, and go write since we can't wait
              * over two seconds. */
+            server.aof_delayed_fsync++;
             redisLog(REDIS_NOTICE,"Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.");
         }
     }
index 316f0a28402cbbc9d9a6f9d7bc2fa015853c2c8f..2be92426feab23391d402b711633e8d4a8df137e 100644 (file)
@@ -859,6 +859,7 @@ void configCommand(redisClient *c) {
         server.stat_numcommands = 0;
         server.stat_numconnections = 0;
         server.stat_expiredkeys = 0;
+        server.aof_delayed_fsync = 0;
         resetCommandTableStats();
         addReply(c,shared.ok);
     } else {
index 2f27b4ddbf7701483240a8db9afab3f5e1a2101d..e926fd9b63f1a49575cd5d0b1ae903a962b7ac42 100644 (file)
@@ -1007,6 +1007,7 @@ void initServerConfig() {
     server.aof_rewrite_base_size = 0;
     server.aof_rewrite_scheduled = 0;
     server.aof_last_fsync = time(NULL);
+    server.aof_delayed_fsync = 0;
     server.aof_fd = -1;
     server.aof_selected_db = -1; /* Make sure the first time will not match */
     server.aof_flush_postponed_start = 0;
@@ -1802,12 +1803,14 @@ sds genRedisInfoString(char *section) {
                 "aof_base_size:%lld\r\n"
                 "aof_pending_rewrite:%d\r\n"
                 "aof_buffer_length:%zu\r\n"
-                "aof_pending_bio_fsync:%llu\r\n",
+                "aof_pending_bio_fsync:%llu\r\n"
+                "aof_delayed_fsync:%lu\r\n",
                 (long long) server.aof_current_size,
                 (long long) server.aof_rewrite_base_size,
                 server.aof_rewrite_scheduled,
                 sdslen(server.aof_buf),
-                bioPendingJobsOfType(REDIS_BIO_AOF_FSYNC));
+                bioPendingJobsOfType(REDIS_BIO_AOF_FSYNC),
+                server.aof_delayed_fsync);
         }
 
         if (server.loading) {
index 1fc2ae3937929c14b752c4c3ea0098e43d95d4da..e4fd47d3fb73dd78d5c1066468bbdd7891b03ee6 100644 (file)
@@ -638,6 +638,7 @@ struct redisServer {
     int aof_selected_db; /* Currently selected DB in AOF */
     time_t aof_flush_postponed_start; /* UNIX time of postponed AOF flush */
     time_t aof_last_fsync;            /* UNIX time of last fsync() */
+    unsigned long aof_delayed_fsync;  /* delayed AOF fsync() counter */
     /* RDB persistence */
     long long dirty;                /* Changes to DB from the last save */
     long long dirty_before_bgsave;  /* Used to restore dirty on failed BGSAVE */