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).
This commit is contained in:
antirez 2014-12-23 14:52:57 +01:00
parent aad0c512cc
commit 1e8f1577c5
2 changed files with 5 additions and 4 deletions

View File

@ -1087,8 +1087,9 @@ void startLoading(FILE *fp) {
/* Load the DB */ /* Load the DB */
server.loading = 1; server.loading = 1;
server.loading_start_time = time(NULL); server.loading_start_time = time(NULL);
server.loading_loaded_bytes = 0;
if (fstat(fileno(fp), &sb) == -1) { if (fstat(fileno(fp), &sb) == -1) {
server.loading_total_bytes = 1; /* just to avoid division by zero */ server.loading_total_bytes = 0;
} else { } else {
server.loading_total_bytes = sb.st_size; server.loading_total_bytes = sb.st_size;
} }

View File

@ -2790,14 +2790,14 @@ sds genRedisInfoString(char *section) {
server.loading_loaded_bytes; server.loading_loaded_bytes;
perc = ((double)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) { if (elapsed == 0) {
eta = 1; /* A fake 1 second figure if we don't have eta = 1; /* A fake 1 second figure if we don't have
enough info */ enough info */
} else { } else {
eta = (elapsed*remaining_bytes)/server.loading_loaded_bytes; eta = (elapsed*remaining_bytes)/(server.loading_loaded_bytes+1);
} }
info = sdscatprintf(info, info = sdscatprintf(info,