From 22a0fe8de65124839d567f0d2f57f1dceced7e73 Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 23 Dec 2014 14:52:57 +0100 Subject: [PATCH] INFO loading stats: three fixes. 1. Server unxtime may remain not updated while loading AOF, so ETA is not updated correctly. 2. Number of processed byte was not initialized. 3. Possible division by zero condition (likely cause of issue #1932). --- src/rdb.c | 3 ++- src/redis.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/rdb.c b/src/rdb.c index db9e814d..25139999 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -1087,8 +1087,9 @@ void startLoading(FILE *fp) { /* Load the DB */ server.loading = 1; server.loading_start_time = time(NULL); + server.loading_loaded_bytes = 0; if (fstat(fileno(fp), &sb) == -1) { - server.loading_total_bytes = 1; /* just to avoid division by zero */ + server.loading_total_bytes = 0; } else { server.loading_total_bytes = sb.st_size; } diff --git a/src/redis.c b/src/redis.c index 7db1d72e..3a9ab219 100644 --- a/src/redis.c +++ b/src/redis.c @@ -2633,14 +2633,14 @@ sds genRedisInfoString(char *section) { server.loading_loaded_bytes; perc = ((double)server.loading_loaded_bytes / - server.loading_total_bytes) * 100; + (server.loading_total_bytes+1)) * 100; - elapsed = server.unixtime-server.loading_start_time; + elapsed = time(NULL)-server.loading_start_time; if (elapsed == 0) { eta = 1; /* A fake 1 second figure if we don't have enough info */ } else { - eta = (elapsed*remaining_bytes)/server.loading_loaded_bytes; + eta = (elapsed*remaining_bytes)/(server.loading_loaded_bytes+1); } info = sdscatprintf(info,