From 19eacac3ce867615fa31a9b152104ba80e219b00 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Tue, 1 Oct 2019 09:44:57 -0700 Subject: [PATCH] Add a unit test for BackupProgress --- fdbserver/BackupProgress.actor.cpp | 55 +++++++++++++++--------------- fdbserver/masterserver.actor.cpp | 1 - 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/fdbserver/BackupProgress.actor.cpp b/fdbserver/BackupProgress.actor.cpp index 34028b7e2c..2d2894de6d 100644 --- a/fdbserver/BackupProgress.actor.cpp +++ b/fdbserver/BackupProgress.actor.cpp @@ -2,6 +2,7 @@ #include "fdbclient/NativeAPI.actor.h" #include "fdbclient/SystemData.h" +#include "flow/UnitTest.h" #include "flow/actorcompiler.h" // This must be the last #include. void BackupProgress::addBackupStatus(const WorkerBackupStatus& status) { @@ -106,33 +107,31 @@ ACTOR Future getBackupProgress(Database cx, UID dbgid, Reference setInitialBackupProgress(Reference self, Database cx, std::vector> -idsTags) { state Transaction tr(cx); +TEST_CASE("/BackupProgress/Unfinished") { + std::map> epochTagsEndVersions; - loop { - try { - tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); - tr.setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); - tr.setOption(FDBTransactionOptions::LOCK_AWARE); + const int epoch1 = 2, end1 = 100; + const Tag tag1(tagLocalityLogRouter, 0); + epochTagsEndVersions.insert({ epoch1, { 1, end1 } }); + BackupProgress progress(UID(0, 0), epochTagsEndVersions); - const Version startVersion = self->logSystem->getStartVersion() - 1; - const LogEpoch epoch = self->cstate.myDBState.recoveryCount; - for (int i = 0; i < idsTags.size(); i++) { - Key key = backupProgressKeyFor(idsTags[i].first); - WorkerBackupStatus status(epoch, startVersion, idsTags[i].second); - tr.set(key, backupProgressValue(status)); - tr.addReadConflictRange(singleKeyRange(key)); - } - wait(tr.commit()); - return Void(); - } catch (Error& e) { - wait(tr.onError(e)); - } - } -} -*/ \ No newline at end of file + std::map, std::map> unfinished = progress.getUnfinishedBackup(); + + ASSERT(unfinished.size() == 1); + for (const auto [epochVersion, tagVersion] : unfinished) { + ASSERT(epochVersion.first == epoch1 && epochVersion.second == end1); + ASSERT(tagVersion.size() == 1 && tagVersion.begin()->first == tag1 && tagVersion.begin()->second == 1); + } + + const int saved1 = 50; + WorkerBackupStatus status1(epoch1, 50, tag1); + progress.addBackupStatus(status1); + unfinished = progress.getUnfinishedBackup(); + ASSERT(unfinished.size() == 1); + for (const auto [epochVersion, tagVersion] : unfinished) { + ASSERT(epochVersion.first == epoch1 && epochVersion.second == end1); + ASSERT(tagVersion.size() == 1 && tagVersion.begin()->first == tag1 && tagVersion.begin()->second == saved1); + } + + return Void(); +} \ No newline at end of file diff --git a/fdbserver/masterserver.actor.cpp b/fdbserver/masterserver.actor.cpp index 348dc1c9d2..b6930da857 100644 --- a/fdbserver/masterserver.actor.cpp +++ b/fdbserver/masterserver.actor.cpp @@ -1250,7 +1250,6 @@ ACTOR static Future recruitBackupWorkers(Reference self) { for (int i = 0; i < logRouterTags; i++) { idsTags.emplace_back(deterministicRandom()->randomUniqueID(), Tag(tagLocalityLogRouter, i)); } - // wait(setInitialBackupProgress(self, cx, idsTags)); const Version startVersion = self->logSystem->getStartVersion(); state int i = 0;