From 0378dc0a502b3f8e26d512c738d2f918f4fd9542 Mon Sep 17 00:00:00 2001 From: RenxuanW Date: Wed, 14 Apr 2021 22:19:39 -0700 Subject: [PATCH] Report the current version in the restore status. --- fdbclient/FileBackupAgent.actor.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/fdbclient/FileBackupAgent.actor.cpp b/fdbclient/FileBackupAgent.actor.cpp index e7da8fbf58..4044df66cc 100644 --- a/fdbclient/FileBackupAgent.actor.cpp +++ b/fdbclient/FileBackupAgent.actor.cpp @@ -244,6 +244,20 @@ public: Key applyMutationsMapPrefix() { return uidPrefixKey(applyMutationsKeyVersionMapRange.begin, uid); } + ACTOR static Future getCurrentVersion_impl(Reference tr, UID uid) { + state Future> beginVal = tr->get(uidPrefixKey(applyMutationsBeginRange.begin, uid), true); + wait(success(beginVal)); + if (!beginVal.get().present()) { + return -1; + } + Version currentVersion = BinaryReader::fromStringRef(beginVal.get().get(), Unversioned()); + return currentVersion; + } + + Future getCurrentVersion(Reference tr) { + return getCurrentVersion_impl(tr, uid); + } + ACTOR static Future getApplyVersionLag_impl(Reference tr, UID uid) { // Both of these are snapshot reads state Future> beginVal = tr->get(uidPrefixKey(applyMutationsBeginRange.begin, uid), true); @@ -334,6 +348,7 @@ ACTOR Future RestoreConfig::getProgress_impl(RestoreConfig restore, state Future fileBlocksFinished = restore.fileBlocksFinished().getD(tr); state Future bytesWritten = restore.bytesWritten().getD(tr); state Future status = restore.stateText(tr); + state Future currentVersion = restore.getCurrentVersion(tr); state Future lag = restore.getApplyVersionLag(tr); state Future tag = restore.tag().getD(tr); state Future> lastError = restore.lastError().getD(tr); @@ -341,8 +356,8 @@ ACTOR Future RestoreConfig::getProgress_impl(RestoreConfig restore, // restore might no longer be valid after the first wait so make sure it is not needed anymore. state UID uid = restore.getUid(); wait(success(fileCount) && success(fileBlockCount) && success(fileBlocksDispatched) && - success(fileBlocksFinished) && success(bytesWritten) && success(status) && success(lag) && success(tag) && - success(lastError)); + success(fileBlocksFinished) && success(bytesWritten) && success(status) && success(currentVersion) && + success(lag) && success(tag) && success(lastError)); std::string errstr = "None"; if (lastError.get().second != 0) @@ -359,11 +374,12 @@ ACTOR Future RestoreConfig::getProgress_impl(RestoreConfig restore, .detail("FileBlocksTotal", fileBlockCount.get()) .detail("FileBlocksInProgress", fileBlocksDispatched.get() - fileBlocksFinished.get()) .detail("BytesWritten", bytesWritten.get()) + .detail("CurrentVersion", currentVersion.get()) .detail("ApplyLag", lag.get()) .detail("TaskInstance", THIS_ADDR); return format("Tag: %s UID: %s State: %s Blocks: %lld/%lld BlocksInProgress: %lld Files: %lld BytesWritten: " - "%lld ApplyVersionLag: %lld LastError: %s", + "%lld CurrentVersion: %lld ApplyVersionLag: %lld LastError: %s", tag.get().c_str(), uid.toString().c_str(), status.get().toString().c_str(), @@ -372,6 +388,7 @@ ACTOR Future RestoreConfig::getProgress_impl(RestoreConfig restore, fileBlocksDispatched.get() - fileBlocksFinished.get(), fileCount.get(), bytesWritten.get(), + currentVersion.get(), lag.get(), errstr.c_str()); }