summaryrefslogtreecommitdiff
path: root/src/mongo/util
diff options
context:
space:
mode:
authorSpencer T Brody <spencer@mongodb.com>2020-04-08 21:24:21 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-04-09 22:20:47 +0000
commit0651f3c7b63130842e85d44fec624b82a33b67a3 (patch)
tree70346c5cfbf2b80ab422f713457983cd31f48ed4 /src/mongo/util
parentb0e3eed55a031a43ddc9674c71da7c3e5e59eb64 (diff)
downloadmongo-0651f3c7b63130842e85d44fec624b82a33b67a3.tar.gz
SERVER-43442 Remove blocking call from AsyncWorkScheduler host targetting
Also updates some places relying on implicit conversion from Status to Future to be explicit.
Diffstat (limited to 'src/mongo/util')
-rw-r--r--src/mongo/util/future.h9
-rw-r--r--src/mongo/util/future_util.h6
2 files changed, 14 insertions, 1 deletions
diff --git a/src/mongo/util/future.h b/src/mongo/util/future.h
index 29ec737e8cc..89c97fa3d42 100644
--- a/src/mongo/util/future.h
+++ b/src/mongo/util/future.h
@@ -797,6 +797,15 @@ public:
});
}
+ /**
+ * Same as setFrom(Future) above, but takes a SemiFuture instead of a Future.
+ */
+ void setFrom(SemiFuture<T>&& future) noexcept {
+ setImpl([&](boost::intrusive_ptr<future_details::SharedState<T>>&& sharedState) {
+ std::move(future).propagateResultTo(sharedState.get());
+ });
+ }
+
TEMPLATE(typename... Args)
REQUIRES(std::is_constructible_v<T, Args...> || (std::is_void_v<T> && sizeof...(Args) == 0))
void emplaceValue(Args&&... args) noexcept {
diff --git a/src/mongo/util/future_util.h b/src/mongo/util/future_util.h
index c69c376bbee..6c1d71ac134 100644
--- a/src/mongo/util/future_util.h
+++ b/src/mongo/util/future_util.h
@@ -42,7 +42,11 @@ ExecutorFuture<void> sleepUntil(std::shared_ptr<executor::TaskExecutor> executor
auto scheduledWorkHandle = executor->scheduleWorkAt(
date, [taskCompletionPromise](const executor::TaskExecutor::CallbackArgs& args) mutable {
- taskCompletionPromise->setFrom(args.status);
+ if (args.status.isOK()) {
+ taskCompletionPromise->emplaceValue();
+ } else {
+ taskCompletionPromise->setError(args.status);
+ }
});
if (!scheduledWorkHandle.isOK()) {