Merge pull request #87 from Snapchat/fix_ftracking_bug

Check tracking on every db in rdbLoadRio
This commit is contained in:
Malavan Sotheeswaran 2022-08-17 15:33:09 -04:00 committed by GitHub Enterprise
commit 23f92fa94c

View File

@ -3115,13 +3115,12 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
std::unique_ptr<rdbInsertJob> spjob; std::unique_ptr<rdbInsertJob> spjob;
// If we're tracking changes we need to reset this // If we're tracking changes we need to reset this
bool fTracking = g_pserver->db[0]->FTrackingChanges(); std::vector<bool> fTracking(cserver.dbnum);
if (fTracking) { // We don't want to track here because processChangesAsync is outside the normal scope handling
// We don't want to track here because processChangesAsync is outside the normal scope handling for (int idb = 0; idb < cserver.dbnum; ++idb) {
for (int idb = 0; idb < cserver.dbnum; ++idb) { if ((fTracking[idb] = g_pserver->db[idb]->FTrackingChanges()))
if (g_pserver->db[idb]->processChanges(false)) if (g_pserver->db[idb]->processChanges(false))
g_pserver->db[idb]->commitChanges(); g_pserver->db[idb]->commitChanges();
}
} }
rdb->update_cksum = rdbLoadProgressCallback; rdb->update_cksum = rdbLoadProgressCallback;
@ -3489,11 +3488,10 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
} }
wqueue.endWork(); wqueue.endWork();
if (fTracking) { // Reset track changes
// 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); g_pserver->db[idb]->trackChanges(false);
}
} }
if (empty_keys_skipped) { if (empty_keys_skipped) {
serverLog(LL_WARNING, 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), * 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. */ * we'll report the error to the caller, so that we can retry. */
eoferr: eoferr:
if (fTracking) {
// Reset track changes // 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); g_pserver->db[idb]->trackChanges(false);
}
} }
wqueue.endWork(); wqueue.endWork();