diff options
author | Tommaso Tocci <tommaso.tocci@mongodb.com> | 2022-02-04 09:04:29 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-02-04 09:36:48 +0000 |
commit | a22f3c599e1e588cdb5916785f27af7cd5493d18 (patch) | |
tree | 474dc548070e77fbcde983ff0e7ee389a6b0793a /src/mongo | |
parent | e221ce7f62fc9fa22c11544525f49759eb003c43 (diff) | |
download | mongo-a22f3c599e1e588cdb5916785f27af7cd5493d18.tar.gz |
SERVER-63207 Speedup very slow move_primary_with_writes.js test
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/s/sharding_ddl_coordinator.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/mongo/db/s/sharding_ddl_coordinator.cpp b/src/mongo/db/s/sharding_ddl_coordinator.cpp index 15e875918ac..e6da6be570a 100644 --- a/src/mongo/db/s/sharding_ddl_coordinator.cpp +++ b/src/mongo/db/s/sharding_ddl_coordinator.cpp @@ -50,6 +50,7 @@ namespace mongo { MONGO_FAIL_POINT_DEFINE(hangBeforeRunningCoordinatorInstance); +MONGO_FAIL_POINT_DEFINE(overrideDDLLockTimeout); namespace { @@ -143,12 +144,23 @@ ExecutorFuture<void> ShardingDDLCoordinator::_acquireLockAsync( const auto coorName = DDLCoordinatorType_serializer(_coordId.getOperationType()); - auto distLock = distLockManager->lockDirectLocally( - opCtx, resource, DistLockManager::kDefaultLockTimeout); + const auto lockTimeOut = [&]() -> Milliseconds { + if (auto sfp = overrideDDLLockTimeout.scoped(); MONGO_unlikely(sfp.isActive())) { + if (auto timeoutElem = sfp.getData()["timeoutMillisecs"]; timeoutElem.ok()) { + const auto timeoutMillisecs = Milliseconds(timeoutElem.safeNumberLong()); + LOGV2(6320700, + "Overriding DDL lock timeout", + "timeout"_attr = timeoutMillisecs); + return timeoutMillisecs; + } + } + return DistLockManager::kDefaultLockTimeout; + }(); + + auto distLock = distLockManager->lockDirectLocally(opCtx, resource, lockTimeOut); _scopedLocks.emplace(std::move(distLock)); - uassertStatusOK(distLockManager->lockDirect( - opCtx, resource, coorName, DistLockManager::kDefaultLockTimeout)); + uassertStatusOK(distLockManager->lockDirect(opCtx, resource, coorName, lockTimeOut)); }) .until([this](Status status) { return (!_recoveredFromDisk) || status.isOK(); }) .withBackoffBetweenIterations(kExponentialBackoff) |