diff --git a/fdbserver/datadistributor/DDShardTracker.actor.cpp b/fdbserver/datadistributor/DDShardTracker.actor.cpp index 7315255a234..824ac397cc3 100644 --- a/fdbserver/datadistributor/DDShardTracker.actor.cpp +++ b/fdbserver/datadistributor/DDShardTracker.actor.cpp @@ -1139,17 +1139,14 @@ Future fetchTopKShardMetrics_impl(DataDistributionTracker* self, GetTopKMe } } -ACTOR Future fetchTopKShardMetrics(DataDistributionTracker* self, GetTopKMetricsRequest req) { - choose { - // simulate time_out - when(wait(g_network->isSimulated() && BUGGIFY_WITH_PROB(0.01) ? Never() - : fetchTopKShardMetrics_impl(self, req))) {} - when(wait(delay(SERVER_KNOBS->DD_SHARD_METRICS_TIMEOUT))) { - CODE_PROBE(true, "TopK DD_SHARD_METRICS_TIMEOUT"); - req.reply.send(GetTopKMetricsReply()); - } +Future fetchTopKShardMetrics(DataDistributionTracker* self, GetTopKMetricsRequest req) { + // simulate time_out + Future f = + g_network->isSimulated() && BUGGIFY_WITH_PROB(0.01) ? Never() : fetchTopKShardMetrics_impl(self, req); + if (auto const res = co_await timeout(f, SERVER_KNOBS->DD_SHARD_METRICS_TIMEOUT); !res.present()) { + CODE_PROBE(true, "TopK DD_SHARD_METRICS_TIMEOUT"); + req.reply.send(GetTopKMetricsReply()); } - return Void(); } Future fetchShardMetrics_impl(DataDistributionTracker* self, GetMetricsRequest req) { @@ -1180,17 +1177,15 @@ Future fetchShardMetrics_impl(DataDistributionTracker* self, GetMetricsReq } } -ACTOR Future fetchShardMetrics(DataDistributionTracker* self, GetMetricsRequest req) { - choose { - when(wait(fetchShardMetrics_impl(self, req))) {} - when(wait(delay(SERVER_KNOBS->DD_SHARD_METRICS_TIMEOUT, TaskPriority::DataDistribution))) { - CODE_PROBE(true, "DD_SHARD_METRICS_TIMEOUT"); - StorageMetrics largeMetrics; - largeMetrics.bytes = getMaxShardSize(self->dbSizeEstimate->get()); - req.reply.send(largeMetrics); - } +Future fetchShardMetrics(DataDistributionTracker* self, GetMetricsRequest req) { + if (auto const res = co_await timeout( + fetchShardMetrics_impl(self, req), SERVER_KNOBS->DD_SHARD_METRICS_TIMEOUT, TaskPriority::DataDistribution); + !res.present()) { + CODE_PROBE(true, "DD_SHARD_METRICS_TIMEOUT"); + StorageMetrics largeMetrics; + largeMetrics.bytes = getMaxShardSize(self->dbSizeEstimate->get()); + req.reply.send(largeMetrics); } - return Void(); } Future fetchShardMetricsList_impl(DataDistributionTracker* self, GetMetricsListRequest req) { @@ -1233,14 +1228,12 @@ Future fetchShardMetricsList_impl(DataDistributionTracker* self, GetMetric } } -ACTOR Future fetchShardMetricsList(DataDistributionTracker* self, GetMetricsListRequest req) { - choose { - when(wait(fetchShardMetricsList_impl(self, req))) {} - when(wait(delay(SERVER_KNOBS->DD_SHARD_METRICS_TIMEOUT))) { - req.reply.sendError(timed_out()); - } +Future fetchShardMetricsList(DataDistributionTracker* self, GetMetricsListRequest req) { + if (auto const res = + co_await timeout(fetchShardMetricsList_impl(self, req), SERVER_KNOBS->DD_SHARD_METRICS_TIMEOUT); + !res.present()) { + req.reply.sendError(timed_out()); } - return Void(); } void triggerStorageQueueRebalance(DataDistributionTracker* self, RebalanceStorageQueueRequest req) { diff --git a/flow/include/flow/genericactors.actor.h b/flow/include/flow/genericactors.actor.h index c2824a33511..45be93b47b9 100644 --- a/flow/include/flow/genericactors.actor.h +++ b/flow/include/flow/genericactors.actor.h @@ -221,8 +221,8 @@ Future timeout(Future what, double time, T timedoutValue, TaskPriority tas } ACTOR template -Future> timeout(Future what, double time) { - Future end = delay(time); +Future> timeout(Future what, double time, TaskPriority taskID = TaskPriority::DefaultDelay) { + Future end = delay(time, taskID); choose { when(T t = wait(what)) { return t;