From a8f6132862a5216d641ecedc373b6040098b1f24 Mon Sep 17 00:00:00 2001 From: Malavan Sotheeswaran Date: Wed, 17 Aug 2022 09:50:16 -0700 Subject: [PATCH 1/2] check tracking per db --- src/rdb.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/rdb.cpp b/src/rdb.cpp index e7970569a..6c01f4ab8 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) { + bool 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(); From c5cd0d89f82fc7531ad3919465e8cff7e67e705f Mon Sep 17 00:00:00 2001 From: Malavan Sotheeswaran Date: Wed, 17 Aug 2022 10:31:30 -0700 Subject: [PATCH 2/2] fix warnings --- src/rdb.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rdb.cpp b/src/rdb.cpp index 6c01f4ab8..d91093b68 100644 --- a/src/rdb.cpp +++ b/src/rdb.cpp @@ -3115,10 +3115,10 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) { std::unique_ptr spjob; // If we're tracking changes we need to reset this - bool fTracking[cserver.dbnum]; + 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 ((fTracking[idb] = g_pserver->db[idb]->FTrackingChanges())) if (g_pserver->db[idb]->processChanges(false)) g_pserver->db[idb]->commitChanges(); }