From 113f86d00370d52b1e6c2c0ad5f6282b47da49ff Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Thu, 18 Jun 2020 20:59:03 -0700 Subject: [PATCH] FastRestore:Fix:Transform restored keys with prefix back to original keys --- ...kupAndParallelRestoreCorrectness.actor.cpp | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/fdbserver/workloads/BackupAndParallelRestoreCorrectness.actor.cpp b/fdbserver/workloads/BackupAndParallelRestoreCorrectness.actor.cpp index 0715803b87..1192fef9f7 100644 --- a/fdbserver/workloads/BackupAndParallelRestoreCorrectness.actor.cpp +++ b/fdbserver/workloads/BackupAndParallelRestoreCorrectness.actor.cpp @@ -317,19 +317,15 @@ struct BackupAndParallelRestoreCorrectnessWorkload : TestWorkload { // write [begin, end) in kvs to DB ACTOR static Future writeKVs(Database cx, Standalone> kvs, int begin, int end) { - while (begin < end) { - wait(runRYWTransaction(cx, [=](Reference tr) -> Future { - tr->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); - tr->setOption(FDBTransactionOptions::LOCK_AWARE); - int i = 0; - while (i < 100) { - tr->set(kvs[begin].key, kvs[begin].value); - ++begin; - ++i; - } - return Void(); - })); - } + wait(runRYWTransaction(cx, [=](Reference tr) -> Future { + tr->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); + tr->setOption(FDBTransactionOptions::LOCK_AWARE); + while (begin < end) { + tr->set(kvs[begin].key, kvs[begin].value); + ++begin; + } + return Void(); + })); return Void(); } @@ -345,13 +341,23 @@ struct BackupAndParallelRestoreCorrectnessWorkload : TestWorkload { ASSERT(!kvs.more); int i = 0; - Standalone> newKVs; + state Standalone> newKVs; for (i = 0; i < kvs.size(); ++i) { - KeyRef keyRef = kvs[i].key.removePrefix(removePrefix).withPrefix(addPrefix); - newKVs.push_back_deep(newKVs.arena(), KeyValueRef(keyRef, kvs[i].value)); + Key newKey = kvs[i].key.removePrefix(removePrefix).withPrefix(addPrefix); + newKVs.push_back_deep(newKVs.arena(), KeyValueRef(newKey.contents(), kvs[i].value)); + TraceEvent("TransformDatabaseContents") + .detail("Index", i) + .detail("GetKey", kvs[i].key) + .detail("NewKey", newKVs[i].key); } - wait(writeKVs(cx, newKVs, 0, newKVs.size())); + state int begin = 0; + state int len; + while (begin < newKVs.size()) { + len = std::min(100, newKVs.size() - begin); + wait(writeKVs(cx, newKVs, begin, begin + len)); + begin = begin + len; + } TraceEvent("FastRestoreWorkloadTransformDatabaseContentsFinish") .detail("AddPrefix", addPrefix)