From 8418cb28397b05972058c736f6f351fd1e2fab14 Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Wed, 26 Jan 2022 16:04:40 -0800 Subject: [PATCH 1/2] Mark various externally exposed system transactions as read/access system keys. Also adjust a few lock aware declarations to read lock aware. --- fdbclient/GlobalConfig.actor.cpp | 1 + fdbclient/ManagementAPI.actor.cpp | 16 ++++++++--- fdbclient/NativeAPI.actor.cpp | 2 ++ fdbclient/SpecialKeySpace.actor.cpp | 41 ++++++++++++++++++++++++++--- 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/fdbclient/GlobalConfig.actor.cpp b/fdbclient/GlobalConfig.actor.cpp index a0f813f17e..039123e69c 100644 --- a/fdbclient/GlobalConfig.actor.cpp +++ b/fdbclient/GlobalConfig.actor.cpp @@ -183,6 +183,7 @@ ACTOR Future GlobalConfig::refresh(GlobalConfig* self) { self->erase(KeyRangeRef(""_sr, "\xff"_sr)); Transaction tr(self->cx); + tr.setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); RangeResult result = wait(tr.getRange(globalConfigDataKeys, CLIENT_KNOBS->TOO_MANY)); for (const auto& kv : result) { KeyRef systemKey = kv.key.removePrefix(globalConfigKeysPrefix); diff --git a/fdbclient/ManagementAPI.actor.cpp b/fdbclient/ManagementAPI.actor.cpp index bad6975ae3..4e26c9a16b 100644 --- a/fdbclient/ManagementAPI.actor.cpp +++ b/fdbclient/ManagementAPI.actor.cpp @@ -425,7 +425,8 @@ ACTOR Future getDatabaseConfiguration(Database cx) { state Transaction tr(cx); loop { try { - tr.setOption(FDBTransactionOptions::LOCK_AWARE); + tr.setOption(FDBTransactionOptions::READ_LOCK_AWARE); + tr.setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); RangeResult res = wait(tr.getRange(configKeys, CLIENT_KNOBS->TOO_MANY)); ASSERT(res.size() < CLIENT_KNOBS->TOO_MANY); DatabaseConfiguration config; @@ -756,7 +757,8 @@ ACTOR Future> getCoordinators(Database cx) { state Transaction tr(cx); loop { try { - tr.setOption(FDBTransactionOptions::LOCK_AWARE); + tr.setOption(FDBTransactionOptions::READ_LOCK_AWARE); + tr.setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); Optional currentKey = wait(tr.get(coordinatorsKey)); if (!currentKey.present()) return std::vector(); @@ -772,6 +774,7 @@ ACTOR Future> changeQuorumChecker(Transaction* tr, Reference change, std::vector* desiredCoordinators) { tr->setOption(FDBTransactionOptions::LOCK_AWARE); + tr->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); tr->setOption(FDBTransactionOptions::USE_PROVISIONAL_PROXIES); tr->setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); Optional currentKey = wait(tr->get(coordinatorsKey)); @@ -861,6 +864,7 @@ ACTOR Future changeQuorum(Database cx, Reference currentKey = wait(tr.get(coordinatorsKey)); @@ -1680,7 +1684,8 @@ ACTOR Future printHealthyZone(Database cx) { state Transaction tr(cx); loop { try { - tr.setOption(FDBTransactionOptions::LOCK_AWARE); + tr.setOption(FDBTransactionOptions::READ_LOCK_AWARE); + tr.setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); Optional val = wait(tr.get(healthyZoneKey)); if (val.present() && decodeHealthyZoneValue(val.get()).first == ignoreSSFailuresZoneString) { printf("Data distribution has been disabled for all storage server failures in this cluster and thus " @@ -1706,6 +1711,7 @@ ACTOR Future clearHealthyZone(Database cx, bool printWarning, bool clearSS loop { try { tr.setOption(FDBTransactionOptions::LOCK_AWARE); + tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); tr.setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); Optional val = wait(tr.get(healthyZoneKey)); if (!clearSSFailureZoneString && val.present() && @@ -1732,6 +1738,7 @@ ACTOR Future setHealthyZone(Database cx, StringRef zoneId, double seconds, loop { try { tr.setOption(FDBTransactionOptions::LOCK_AWARE); + tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); tr.setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); Optional val = wait(tr.get(healthyZoneKey)); if (val.present() && decodeHealthyZoneValue(val.get()).first == ignoreSSFailuresZoneString) { @@ -1757,6 +1764,7 @@ ACTOR Future setDDIgnoreRebalanceSwitch(Database cx, bool ignoreRebalance) loop { try { tr.setOption(FDBTransactionOptions::LOCK_AWARE); + tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); if (ignoreRebalance) { tr.set(rebalanceDDIgnoreKey, LiteralStringRef("on")); } else { @@ -1778,6 +1786,8 @@ ACTOR Future setDDMode(Database cx, int mode) { loop { try { + tr.setOption(FDBTransactionOptions::LOCK_AWARE); + tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); Optional old = wait(tr.get(dataDistributionModeKey)); if (oldMode < 0) { oldMode = 1; diff --git a/fdbclient/NativeAPI.actor.cpp b/fdbclient/NativeAPI.actor.cpp index 989acd2070..aec76d6097 100644 --- a/fdbclient/NativeAPI.actor.cpp +++ b/fdbclient/NativeAPI.actor.cpp @@ -7268,6 +7268,7 @@ ACTOR Future getChangeFeedRange(Reference db, Databas loop { try { + tr.setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); Version readVer = wait(tr.getReadVersion()); if (readVer < begin) { wait(delay(FLOW_KNOBS->PREVENT_FAST_SPIN_DELAY)); @@ -7539,6 +7540,7 @@ ACTOR static Future popChangeFeedBackup(Database cx, Key rangeID, Version state Transaction tr(cx); loop { try { + tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); state Key rangeIDKey = rangeID.withPrefix(changeFeedPrefix); Optional val = wait(tr.get(rangeIDKey)); if (val.present()) { diff --git a/fdbclient/SpecialKeySpace.actor.cpp b/fdbclient/SpecialKeySpace.actor.cpp index d6cd61f5b8..24dec330a4 100644 --- a/fdbclient/SpecialKeySpace.actor.cpp +++ b/fdbclient/SpecialKeySpace.actor.cpp @@ -823,6 +823,7 @@ ACTOR Future rwModuleWithMappingGetRangeActor(ReadYourWritesTransac ExcludeServersRangeImpl::ExcludeServersRangeImpl(KeyRangeRef kr) : SpecialKeyRangeRWImpl(kr) {} Future ExcludeServersRangeImpl::getRange(ReadYourWritesTransaction* ryw, KeyRangeRef kr) const { + ryw->setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); return rwModuleWithMappingGetRangeActor(ryw, this, kr); } @@ -1001,6 +1002,7 @@ void includeServers(ReadYourWritesTransaction* ryw) { ryw->setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); ryw->setOption(FDBTransactionOptions::LOCK_AWARE); ryw->setOption(FDBTransactionOptions::USE_PROVISIONAL_PROXIES); + ryw->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); // includeServers might be used in an emergency transaction, so make sure it is retry-self-conflicting and // CAUSAL_WRITE_RISKY ryw->setOption(FDBTransactionOptions::CAUSAL_WRITE_RISKY); @@ -1062,6 +1064,7 @@ Future> ExcludeServersRangeImpl::commit(ReadYourWritesTran FailedServersRangeImpl::FailedServersRangeImpl(KeyRangeRef kr) : SpecialKeyRangeRWImpl(kr) {} Future FailedServersRangeImpl::getRange(ReadYourWritesTransaction* ryw, KeyRangeRef kr) const { + ryw->setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); return rwModuleWithMappingGetRangeActor(ryw, this, kr); } @@ -1146,6 +1149,7 @@ Future ExclusionInProgressRangeImpl::getRange(ReadYourWritesTransac } ACTOR Future getProcessClassActor(ReadYourWritesTransaction* ryw, KeyRef prefix, KeyRangeRef kr) { + ryw->setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); std::vector _workers = wait(getWorkers(&ryw->getTransaction())); auto workers = _workers; // strip const // Note : the sort by string is anti intuition, ex. 1.1.1.1:11 < 1.1.1.1:5 @@ -1169,6 +1173,7 @@ ACTOR Future> processClassCommitActor(ReadYourWritesTransa ryw->setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); ryw->setOption(FDBTransactionOptions::LOCK_AWARE); ryw->setOption(FDBTransactionOptions::USE_PROVISIONAL_PROXIES); + ryw->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); std::vector workers = wait( getWorkers(&ryw->getTransaction())); // make sure we use the Transaction object to avoid used_during_commit() @@ -1287,7 +1292,8 @@ Future ProcessClassSourceRangeImpl::getRange(ReadYourWritesTransact } ACTOR Future getLockedKeyActor(ReadYourWritesTransaction* ryw, KeyRangeRef kr) { - ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::READ_LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); Optional val = wait(ryw->getTransaction().get(databaseLockedKey)); RangeResult result; if (val.present()) { @@ -1318,6 +1324,7 @@ Future LockDatabaseImpl::getRange(ReadYourWritesTransaction* ryw, K ACTOR Future> lockDatabaseCommitActor(ReadYourWritesTransaction* ryw, UID uid) { state Optional msg; ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); Optional val = wait(ryw->getTransaction().get(databaseLockedKey)); if (val.present() && BinaryReader::fromStringRef(val.get().substr(10), Unversioned()) != uid) { @@ -1339,6 +1346,7 @@ ACTOR Future> lockDatabaseCommitActor(ReadYourWritesTransa ACTOR Future> unlockDatabaseCommitActor(ReadYourWritesTransaction* ryw) { ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); Optional val = wait(ryw->getTransaction().get(databaseLockedKey)); if (val.present()) { ryw->getTransaction().clear(singleKeyRange(databaseLockedKey)); @@ -1364,7 +1372,8 @@ Future> LockDatabaseImpl::commit(ReadYourWritesTransaction } ACTOR Future getConsistencyCheckKeyActor(ReadYourWritesTransaction* ryw, KeyRangeRef kr) { - ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::READ_LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); ryw->getTransaction().setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); Optional val = wait(ryw->getTransaction().get(fdbShouldConsistencyCheckBeSuspended)); bool ccSuspendSetting = val.present() ? BinaryReader::fromStringRef(val.get(), Unversioned()) : false; @@ -1398,6 +1407,7 @@ Future> ConsistencyCheckImpl::commit(ReadYourWritesTransac ryw->getSpecialKeySpaceWriteMap()[SpecialKeySpace::getManagementApiCommandPrefix("consistencycheck")].second; ryw->getTransaction().setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); ryw->getTransaction().set(fdbShouldConsistencyCheckBeSuspended, BinaryWriter::toValue(entry.present(), Unversioned())); return Optional(); @@ -1454,6 +1464,7 @@ void GlobalConfigImpl::set(ReadYourWritesTransaction* ryw, const KeyRef& key, co ACTOR Future> globalConfigCommitActor(GlobalConfigImpl* globalConfig, ReadYourWritesTransaction* ryw) { state Transaction& tr = ryw->getTransaction(); + ryw->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); // History should only contain three most recent updates. If it currently // has three items, remove the oldest to make room for a new item. @@ -1724,6 +1735,7 @@ ACTOR static Future CoordinatorsAutoImplActor(ReadYourWritesTransac state Transaction& tr = ryw->getTransaction(); tr.setOption(FDBTransactionOptions::LOCK_AWARE); + tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); tr.setOption(FDBTransactionOptions::USE_PROVISIONAL_PROXIES); tr.setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); Optional currentKey = wait(tr.get(coordinatorsKey)); @@ -1767,7 +1779,8 @@ Future CoordinatorsAutoImpl::getRange(ReadYourWritesTransaction* ry } ACTOR static Future getMinCommitVersionActor(ReadYourWritesTransaction* ryw, KeyRangeRef kr) { - ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::READ_LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); Optional val = wait(ryw->getTransaction().get(minRequiredCommitVersionKey)); RangeResult result; if (val.present()) { @@ -1798,6 +1811,7 @@ Future AdvanceVersionImpl::getRange(ReadYourWritesTransaction* ryw, ACTOR static Future> advanceVersionCommitActor(ReadYourWritesTransaction* ryw, Version v) { ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); TraceEvent(SevDebug, "AdvanceVersion").detail("MaxAllowedVersion", maxAllowedVerion); if (v > maxAllowedVerion) { return ManagementAPIError::toJsonString( @@ -1816,6 +1830,7 @@ ACTOR static Future> advanceVersionCommitActor(ReadYourWri } Future> AdvanceVersionImpl::commit(ReadYourWritesTransaction* ryw) { + ryw->getTransaction().setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); auto minCommitVersion = ryw->getSpecialKeySpaceWriteMap()[SpecialKeySpace::getManagementApiCommandPrefix("advanceversion")].second; if (minCommitVersion.present()) { @@ -1841,6 +1856,9 @@ ACTOR static Future ClientProfilingGetRangeActor(ReadYourWritesTran state RangeResult result; // client_txn_sample_rate state Key sampleRateKey = LiteralStringRef("client_txn_sample_rate").withPrefix(prefix); + + ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); + if (kr.contains(sampleRateKey)) { auto entry = ryw->getSpecialKeySpaceWriteMap()[sampleRateKey]; if (!ryw->readYourWritesDisabled() && entry.first) { @@ -1886,6 +1904,8 @@ Future ClientProfilingImpl::getRange(ReadYourWritesTransaction* ryw } Future> ClientProfilingImpl::commit(ReadYourWritesTransaction* ryw) { + ryw->getTransaction().setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); + // client_txn_sample_rate Key sampleRateKey = LiteralStringRef("client_txn_sample_rate").withPrefix(getKeyRange().begin); auto rateEntry = ryw->getSpecialKeySpaceWriteMap()[sampleRateKey]; @@ -2247,7 +2267,8 @@ ACTOR static Future MaintenanceGetRangeActor(ReadYourWritesTransact KeyRangeRef kr) { state RangeResult result; // zoneId - ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::READ_LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); Optional val = wait(ryw->getTransaction().get(healthyZoneKey)); if (val.present()) { auto healthyZone = decodeHealthyZoneValue(val.get()); @@ -2279,6 +2300,7 @@ Future MaintenanceImpl::getRange(ReadYourWritesTransaction* ryw, Ke ACTOR static Future> maintenanceCommitActor(ReadYourWritesTransaction* ryw, KeyRangeRef kr) { // read ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); ryw->getTransaction().setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); Optional val = wait(ryw->getTransaction().get(healthyZoneKey)); Optional> healthyZone = @@ -2342,6 +2364,9 @@ ACTOR static Future DataDistributionGetRangeActor(ReadYourWritesTra state RangeResult result; // dataDistributionModeKey state Key modeKey = LiteralStringRef("mode").withPrefix(prefix); + + ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); + if (kr.contains(modeKey)) { auto entry = ryw->getSpecialKeySpaceWriteMap()[modeKey]; if (ryw->readYourWritesDisabled() || !entry.first) { @@ -2375,6 +2400,8 @@ Future> DataDistributionImpl::commit(ReadYourWritesTransac // there are two valid keys in the range // /mode -> dataDistributionModeKey, the value is only allowed to be set as "0"(disable) or "1"(enable) // /rebalance_ignored -> rebalanceDDIgnoreKey, value is unused thus empty + ryw->getTransaction().setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); + Optional msg; KeyRangeRef kr = getKeyRange(); Key modeKey = LiteralStringRef("mode").withPrefix(kr.begin); @@ -2442,6 +2469,7 @@ Future> DataDistributionImpl::commit(ReadYourWritesTransac void includeLocalities(ReadYourWritesTransaction* ryw) { ryw->setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); ryw->setOption(FDBTransactionOptions::LOCK_AWARE); + ryw->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); ryw->setOption(FDBTransactionOptions::USE_PROVISIONAL_PROXIES); // includeLocalities might be used in an emergency transaction, so make sure it is retry-self-conflicting and // CAUSAL_WRITE_RISKY @@ -2522,6 +2550,9 @@ ACTOR Future> excludeLocalityCommitActor(ReadYourWritesTra state std::unordered_set localities; state std::vector addresses; state std::set exclusions; + + ryw->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); + state std::vector workers = wait(getWorkers(&ryw->getTransaction())); if (!parseLocalitiesFromKeys(ryw, failed, localities, addresses, exclusions, workers, result)) return result; @@ -2544,6 +2575,7 @@ ACTOR Future> excludeLocalityCommitActor(ReadYourWritesTra ExcludedLocalitiesRangeImpl::ExcludedLocalitiesRangeImpl(KeyRangeRef kr) : SpecialKeyRangeRWImpl(kr) {} Future ExcludedLocalitiesRangeImpl::getRange(ReadYourWritesTransaction* ryw, KeyRangeRef kr) const { + ryw->setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); return rwModuleWithMappingGetRangeActor(ryw, this, kr); } @@ -2570,6 +2602,7 @@ Future> ExcludedLocalitiesRangeImpl::commit(ReadYourWrites FailedLocalitiesRangeImpl::FailedLocalitiesRangeImpl(KeyRangeRef kr) : SpecialKeyRangeRWImpl(kr) {} Future FailedLocalitiesRangeImpl::getRange(ReadYourWritesTransaction* ryw, KeyRangeRef kr) const { + ryw->setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); return rwModuleWithMappingGetRangeActor(ryw, this, kr); } From 2eda48416cd5619db470d050b78b61059768e2bc Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Fri, 28 Jan 2022 10:55:02 -0800 Subject: [PATCH 2/2] Undo some changes from LOCK_AWARE to READ_LOCK_AWARE. Apparently we have some dependencies in composed functions where a read-only function is setting lock awareness to the benefit of another function that does writes. --- fdbclient/SpecialKeySpace.actor.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fdbclient/SpecialKeySpace.actor.cpp b/fdbclient/SpecialKeySpace.actor.cpp index 24dec330a4..6c1db7639f 100644 --- a/fdbclient/SpecialKeySpace.actor.cpp +++ b/fdbclient/SpecialKeySpace.actor.cpp @@ -1292,7 +1292,7 @@ Future ProcessClassSourceRangeImpl::getRange(ReadYourWritesTransact } ACTOR Future getLockedKeyActor(ReadYourWritesTransaction* ryw, KeyRangeRef kr) { - ryw->getTransaction().setOption(FDBTransactionOptions::READ_LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); Optional val = wait(ryw->getTransaction().get(databaseLockedKey)); RangeResult result; @@ -1372,7 +1372,7 @@ Future> LockDatabaseImpl::commit(ReadYourWritesTransaction } ACTOR Future getConsistencyCheckKeyActor(ReadYourWritesTransaction* ryw, KeyRangeRef kr) { - ryw->getTransaction().setOption(FDBTransactionOptions::READ_LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); ryw->getTransaction().setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); Optional val = wait(ryw->getTransaction().get(fdbShouldConsistencyCheckBeSuspended)); @@ -1779,7 +1779,7 @@ Future CoordinatorsAutoImpl::getRange(ReadYourWritesTransaction* ry } ACTOR static Future getMinCommitVersionActor(ReadYourWritesTransaction* ryw, KeyRangeRef kr) { - ryw->getTransaction().setOption(FDBTransactionOptions::READ_LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); Optional val = wait(ryw->getTransaction().get(minRequiredCommitVersionKey)); RangeResult result; @@ -2267,7 +2267,7 @@ ACTOR static Future MaintenanceGetRangeActor(ReadYourWritesTransact KeyRangeRef kr) { state RangeResult result; // zoneId - ryw->getTransaction().setOption(FDBTransactionOptions::READ_LOCK_AWARE); + ryw->getTransaction().setOption(FDBTransactionOptions::LOCK_AWARE); ryw->getTransaction().setOption(FDBTransactionOptions::READ_SYSTEM_KEYS); Optional val = wait(ryw->getTransaction().get(healthyZoneKey)); if (val.present()) {