From 1fc6afc1047993cdf54a2a098a85835c40179a93 Mon Sep 17 00:00:00 2001 From: Jon Fu Date: Mon, 16 Sep 2019 11:15:18 -0700 Subject: [PATCH] make keyServer set ignore last in range to better match krm* functions --- fdbserver/MoveKeys.actor.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/fdbserver/MoveKeys.actor.cpp b/fdbserver/MoveKeys.actor.cpp index 817a300f69..b815f21c32 100644 --- a/fdbserver/MoveKeys.actor.cpp +++ b/fdbserver/MoveKeys.actor.cpp @@ -943,7 +943,8 @@ ACTOR Future removeKeysFromFailedServer(Database cx, UID serverID, MoveKey wait(krmGetRanges(&tr, keyServersPrefix, KeyRangeRef(begin, allKeys.end), SERVER_KNOBS->MOVE_KEYS_KRM_LIMIT, SERVER_KNOBS->MOVE_KEYS_KRM_LIMIT_BYTES)); state KeyRange currentKeys = KeyRangeRef(begin, keyServers.end()[-1].key); - for (auto it : keyServers) { + for (int i = 0; i < keyServers.size() - 1; ++i) { + auto it = keyServers[i]; vector src; vector dest; decodeKeyServersValue(it.value, src, dest); @@ -958,17 +959,28 @@ ACTOR Future removeKeysFromFailedServer(Database cx, UID serverID, MoveKey // Dest is usually empty, but keep this in case there is parallel data movement src.erase(std::remove(src.begin(), src.end(), serverID), src.end()); dest.erase(std::remove(dest.begin(), dest.end(), serverID), dest.end()); + TraceEvent(SevDebug, "FailedServerSetKey", serverID) + .detail("Key", it.key) + .detail("ValueSrc", describe(src)) + .detail("ValueDest", describe(dest)); tr.set(keyServersKey(it.key), keyServersValue(src, dest)); } // Set entire range for our serverID in serverKeys keyspace to false to signal erasure + TraceEvent(SevDebug, "FailedServerSetRange", serverID) + .detail("Begin", currentKeys.begin) + .detail("End", currentKeys.end); wait(krmSetRangeCoalescing(&tr, serverKeysPrefixFor(serverID), currentKeys, allKeys, serverKeysFalse)); wait(tr.commit()); + TraceEvent(SevDebug, "FailedServerCommitSuccess", serverID) + .detail("Begin", currentKeys.begin) + .detail("End", currentKeys.end) + .detail("CommitVersion", tr.getCommittedVersion()); // Update beginning of next iteration's range begin = currentKeys.end; break; } catch (Error& e) { - TraceEvent("FailedServerError").error(e); + TraceEvent("FailedServerError", serverID).error(e); wait(tr.onError(e)); } }