diff --git a/fdbclient/include/fdbclient/ConsistencyScanInterface.actor.h b/fdbclient/include/fdbclient/ConsistencyScanInterface.actor.h index c2848fbce29..e831ce54544 100644 --- a/fdbclient/include/fdbclient/ConsistencyScanInterface.actor.h +++ b/fdbclient/include/fdbclient/ConsistencyScanInterface.actor.h @@ -166,6 +166,7 @@ ACTOR Future getKeyServers( Promise>>> keyServersPromise, KeyRangeRef kr, bool performQuiescentChecks, + bool failureIsError, bool* success); ACTOR Future getKeyLocations(Database cx, std::vector>> shards, diff --git a/fdbserver/ConsistencyScan.actor.cpp b/fdbserver/ConsistencyScan.actor.cpp index 98e9961447a..da832b70b5b 100644 --- a/fdbserver/ConsistencyScan.actor.cpp +++ b/fdbserver/ConsistencyScan.actor.cpp @@ -97,6 +97,7 @@ ACTOR Future getKeyServers( Promise>>> keyServersPromise, KeyRangeRef kr, bool performQuiescentChecks, + bool failureIsError, bool* success) { state std::vector>> keyServers; @@ -134,7 +135,7 @@ ACTOR Future getKeyServers( TraceEvent("ConsistencyCheck_CommitProxyUnavailable") .error(shards.getError()) .detail("CommitProxyID", commitProxyInfo->getId(i)); - testFailure("Commit proxy unavailable", performQuiescentChecks, success, true); + testFailure("Commit proxy unavailable", performQuiescentChecks, success, failureIsError); return false; } @@ -979,7 +980,8 @@ ACTOR Future runDataValidationCheck(ConsistencyScanData* self) { // Get a list of key servers; verify that the TLogs and master all agree about who the key servers are state Promise>>> keyServerPromise; state std::map tssMapping; - bool keyServerResult = wait(getKeyServers(self->db, keyServerPromise, keyServersKeys, false, &self->success)); + bool keyServerResult = + wait(getKeyServers(self->db, keyServerPromise, keyServersKeys, false, false, &self->success)); if (keyServerResult) { state std::vector>> keyServers = keyServerPromise.getFuture().get(); diff --git a/fdbserver/workloads/ConsistencyCheck.actor.cpp b/fdbserver/workloads/ConsistencyCheck.actor.cpp index 34a929e6231..8cd7012288d 100644 --- a/fdbserver/workloads/ConsistencyCheck.actor.cpp +++ b/fdbserver/workloads/ConsistencyCheck.actor.cpp @@ -345,8 +345,12 @@ struct ConsistencyCheckWorkload : TestWorkload { // Get a list of key servers; verify that the TLogs and master all agree about who the key servers are state Promise>>> keyServerPromise; - bool keyServerResult = wait( - getKeyServers(cx, keyServerPromise, keyServersKeys, self->performQuiescentChecks, &self->success)); + bool keyServerResult = wait(getKeyServers(cx, + keyServerPromise, + keyServersKeys, + self->performQuiescentChecks, + self->failureIsError, + &self->success)); if (keyServerResult) { state std::vector>> keyServers = keyServerPromise.getFuture().get(); @@ -797,8 +801,8 @@ struct ConsistencyCheckWorkload : TestWorkload { bool removePrefix) { // get shards paired with corresponding storage servers state Promise>>> keyServerPromise; - bool keyServerResult = - wait(getKeyServers(cx, keyServerPromise, range, self->performQuiescentChecks, &self->success)); + bool keyServerResult = wait(getKeyServers( + cx, keyServerPromise, range, self->performQuiescentChecks, self->failureIsError, &self->success)); if (!keyServerResult) return false; state std::vector>> shards = @@ -1041,23 +1045,6 @@ struct ConsistencyCheckWorkload : TestWorkload { return true; } - // Run an empty commit through the system. - ACTOR static Future doEmptyCommit(Database cx) { - state Transaction tr(cx); - loop { - try { - tr.setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); - tr.setOption(FDBTransactionOptions::LOCK_AWARE); - wait(::success(tr.getReadVersion())); - tr.makeSelfConflicting(); - wait(tr.commit()); - return Void(); - } catch (Error& e) { - wait(tr.onError(e)); - } - } - } - ACTOR Future checkForExtraDataStores(Database cx, ConsistencyCheckWorkload* self) { state std::vector workers = wait(getWorkers(self->dbInfo)); state std::vector storageServers = wait(getStorageServers(cx)); @@ -1160,14 +1147,6 @@ struct ConsistencyCheckWorkload : TestWorkload { } if (foundExtraDataStore) { - // Let the cluster fully recover after rebooting/killing storage servers with extra stores. - // - // This requires an end-to-end comitting transaction to ensure recovery has started in case - // any stateless processes, like the commit proxy, were killed. - wait(::success(doEmptyCommit(cx))); - while (self->dbInfo->get().recoveryState != RecoveryState::FULLY_RECOVERED) { - wait(self->dbInfo->onChange()); - } self->testFailure("Extra data stores present on workers"); return false; }