diff options
author | Amirsaman Memaripour <amirsaman.memaripour@mongodb.com> | 2020-12-08 18:19:44 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-12-09 04:14:49 +0000 |
commit | d13b8b8906ea017d5f015b3df8e644895dcdbff2 (patch) | |
tree | 73529e6611878451ee7a313974101602c0332e0d /src/mongo/db | |
parent | e9284c8ef915be2b1a5adc27458ba5e1a2eff5dc (diff) | |
download | mongo-d13b8b8906ea017d5f015b3df8e644895dcdbff2.tar.gz |
SERVER-51247 Remove blocking call from AsyncWorkScheduler::_targetHostAsync()
Diffstat (limited to 'src/mongo/db')
-rw-r--r-- | src/mongo/db/s/transaction_coordinator_futures_util.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/mongo/db/s/transaction_coordinator_futures_util.cpp b/src/mongo/db/s/transaction_coordinator_futures_util.cpp index 5c8fef4494e..f2d9aa2a490 100644 --- a/src/mongo/db/s/transaction_coordinator_futures_util.cpp +++ b/src/mongo/db/s/transaction_coordinator_futures_util.cpp @@ -226,7 +226,7 @@ Future<AsyncWorkScheduler::HostAndShard> AsyncWorkScheduler::_targetHostAsync( const ShardId& shardId, const ReadPreferenceSetting& readPref, OperationContextFn operationContextFn) { - return scheduleWork([shardId, readPref, operationContextFn](OperationContext* opCtx) { + return scheduleWork([this, shardId, readPref, operationContextFn](OperationContext* opCtx) { operationContextFn(opCtx); const auto shardRegistry = Grid::get(opCtx)->shardRegistry(); const auto shard = uassertStatusOK(shardRegistry->getShard(opCtx, shardId)); @@ -236,10 +236,13 @@ Future<AsyncWorkScheduler::HostAndShard> AsyncWorkScheduler::_targetHostAsync( hangWhileTargetingRemoteHost.pauseWhileSet(opCtx); } - // TODO (SERVER-51247): Return a SemiFuture<HostAndShard> rather than using a blocking call - return HostAndShard{ - shard->getTargeter()->findHostWithMaxWait(readPref, Seconds(20)).get(opCtx), - std::move(shard)}; + return shard->getTargeter() + ->findHostWithMaxWait(readPref, Seconds(20)) + .thenRunOn(_executor) + .unsafeToInlineFuture() + .then([shard = std::move(shard)](HostAndPort host) -> HostAndShard { + return {std::move(host), std::move(shard)}; + }); }); } |