diff --git a/src/rdb.cpp b/src/rdb.cpp index e7970569a..d91093b68 100644 --- a/src/rdb.cpp +++ b/src/rdb.cpp @@ -3115,13 +3115,12 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) { std::unique_ptr spjob; // If we're tracking changes we need to reset this - bool fTracking = g_pserver->db[0]->FTrackingChanges(); - if (fTracking) { - // We don't want to track here because processChangesAsync is outside the normal scope handling - for (int idb = 0; idb < cserver.dbnum; ++idb) { + std::vector fTracking(cserver.dbnum); + // We don't want to track here because processChangesAsync is outside the normal scope handling + for (int idb = 0; idb < cserver.dbnum; ++idb) { + if ((fTracking[idb] = g_pserver->db[idb]->FTrackingChanges())) if (g_pserver->db[idb]->processChanges(false)) g_pserver->db[idb]->commitChanges(); - } } rdb->update_cksum = rdbLoadProgressCallback; @@ -3489,11 +3488,10 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) { } wqueue.endWork(); - if (fTracking) { - // Reset track changes - for (int idb = 0; idb < cserver.dbnum; ++idb) { + // Reset track changes + for (int idb = 0; idb < cserver.dbnum; ++idb) { + if (fTracking[idb]) g_pserver->db[idb]->trackChanges(false); - } } if (empty_keys_skipped) { serverLog(LL_WARNING, @@ -3511,11 +3509,10 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) { * the RDB file from a socket during initial SYNC (diskless replica mode), * we'll report the error to the caller, so that we can retry. */ eoferr: - if (fTracking) { // Reset track changes - for (int idb = 0; idb < cserver.dbnum; ++idb) { + for (int idb = 0; idb < cserver.dbnum; ++idb) { + if (fTracking[idb]) g_pserver->db[idb]->trackChanges(false); - } } wqueue.endWork();