diff --git a/src/kvstore.c b/src/kvstore.c index d4afb1825..9e3061ba8 100644 --- a/src/kvstore.c +++ b/src/kvstore.c @@ -615,16 +615,16 @@ uint64_t kvstoreIncrementallyRehash(kvstore *kvs, uint64_t threshold_us) { * after each dictionary completes rehashing, it removes itself from the list. */ listNode *node; monotime timer; - uint64_t elapsed_us = UINT64_MAX; + uint64_t elapsed_us = 0; elapsedStart(&timer); while ((node = listFirst(kvs->rehashing))) { + dictRehashMicroseconds(listNodeValue(node), threshold_us - elapsed_us); + elapsed_us = elapsedUs(timer); if (elapsed_us >= threshold_us) { break; /* Reached the time limit. */ } - dictRehashMicroseconds(listNodeValue(node), threshold_us - elapsed_us); } - assert(elapsed_us != UINT64_MAX); return elapsed_us; } diff --git a/src/server.c b/src/server.c index 7aa8e7aab..b24d54b7e 100644 --- a/src/server.c +++ b/src/server.c @@ -1093,10 +1093,10 @@ void databasesCron(void) { uint64_t elapsed_us = 0; for (j = 0; j < dbs_per_call; j++) { redisDb *db = &server.db[rehash_db % server.dbnum]; - elapsed_us += kvstoreIncrementallyRehash(db->keys, INCREMENTAL_REHASHING_THRESHOLD_US); + elapsed_us += kvstoreIncrementallyRehash(db->keys, INCREMENTAL_REHASHING_THRESHOLD_US - elapsed_us); if (elapsed_us >= INCREMENTAL_REHASHING_THRESHOLD_US) break; - elapsed_us += kvstoreIncrementallyRehash(db->expires, INCREMENTAL_REHASHING_THRESHOLD_US); + elapsed_us += kvstoreIncrementallyRehash(db->expires, INCREMENTAL_REHASHING_THRESHOLD_US - elapsed_us); if (elapsed_us >= INCREMENTAL_REHASHING_THRESHOLD_US) break; rehash_db++;