summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorTommaso Tocci <tommaso.tocci@mongodb.com>2022-02-04 09:04:29 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-02-04 09:36:48 +0000
commita22f3c599e1e588cdb5916785f27af7cd5493d18 (patch)
tree474dc548070e77fbcde983ff0e7ee389a6b0793a /src/mongo
parente221ce7f62fc9fa22c11544525f49759eb003c43 (diff)
downloadmongo-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.cpp20
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)