From 66c82ff00d199f78ece49fe8336aa7c77bfb54e4 Mon Sep 17 00:00:00 2001 From: Yi Wu Date: Mon, 7 Mar 2022 22:53:52 -0800 Subject: [PATCH] Redwood: Fix clearRemapQueue after the remap cleanup window change --- fdbserver/VersionedBTree.actor.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/fdbserver/VersionedBTree.actor.cpp b/fdbserver/VersionedBTree.actor.cpp index 6f6d5fe462..bb19d8a181 100644 --- a/fdbserver/VersionedBTree.actor.cpp +++ b/fdbserver/VersionedBTree.actor.cpp @@ -3797,16 +3797,23 @@ private: ACTOR static Future clearRemapQueue_impl(DWALPager* self) { // Wait for outstanding commit. wait(self->commitFuture); + self->setOldestReadableVersion(self->getLastCommittedVersion()); + wait(self->commit(self->getLastCommittedVersion() + 1)); + + wait(self->remapCleanupFuture); + + // Set remap cleanup window to 0 to allow the remap queue to drain. + state int64_t remapCleanupWindowBytes = self->remapCleanupWindowBytes; + self->remapCleanupWindowBytes = 0; - // While the remap queue isn't empty, advance the commit version and oldest readable version - // by the remap cleanup window and commit while (self->remapQueue.numEntries > 0) { - self->setOldestReadableVersion(self->getLastCommittedVersion()); - wait(self->commit(self->getLastCommittedVersion() + self->remapCleanupWindowBytes + 1)); + self->remapCleanupFuture = remapCleanup(self); + wait(self->remapCleanupFuture); } - // One final commit because the active commit cycle may have popped from the remap queue - wait(self->commit(self->getLastCommittedVersion() + 1)); + // Restore remap cleanup window. + if (remapCleanupWindowBytes != 0) + self->remapCleanupWindowBytes = remapCleanupWindowBytes; TraceEvent e("RedwoodClearRemapQueue"); self->toTraceEvent(e);