summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/sharding_data_transform_cumulative_metrics.cpp
diff options
context:
space:
mode:
authorBrett Nawrocki <brett.nawrocki@mongodb.com>2022-08-30 15:07:00 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-09-01 16:33:40 +0000
commit54dfa66ba84af002a0b43d2b7f49e0a8119f6c55 (patch)
treee997374e3ee6236746ee20655b88d3bcd4899c20 /src/mongo/db/s/sharding_data_transform_cumulative_metrics.cpp
parent3b8505623b8eba4880d28fb69e5bf1385af58a2b (diff)
downloadmongo-54dfa66ba84af002a0b43d2b7f49e0a8119f6c55.tar.gz
SERVER-68783 Disambiguate 0 time estimate from no estimate in resharding
Diffstat (limited to 'src/mongo/db/s/sharding_data_transform_cumulative_metrics.cpp')
-rw-r--r--src/mongo/db/s/sharding_data_transform_cumulative_metrics.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/mongo/db/s/sharding_data_transform_cumulative_metrics.cpp b/src/mongo/db/s/sharding_data_transform_cumulative_metrics.cpp
index e13cd3857a1..0b0665a6b02 100644
--- a/src/mongo/db/s/sharding_data_transform_cumulative_metrics.cpp
+++ b/src/mongo/db/s/sharding_data_transform_cumulative_metrics.cpp
@@ -42,6 +42,7 @@ constexpr auto kActive = "active";
constexpr auto kOldestActive = "oldestActive";
constexpr auto kLatencies = "latencies";
constexpr auto kCurrentInSteps = "currentInSteps";
+constexpr auto kEstimateNotAvailable = -1;
struct Metrics {
ReshardingCumulativeMetrics _resharding;
@@ -53,7 +54,6 @@ const auto getMetrics = ServiceContext::declareDecoration<MetricsPtr>();
const auto metricsRegisterer = ServiceContext::ConstructorActionRegisterer{
"ShardingDataTransformMetrics",
[](ServiceContext* ctx) { getMetrics(ctx) = std::make_unique<Metrics>(); }};
-
} // namespace
ShardingDataTransformCumulativeMetrics* ShardingDataTransformCumulativeMetrics::getForResharding(
@@ -86,18 +86,35 @@ ShardingDataTransformCumulativeMetrics::registerInstanceMetrics(const InstanceOb
int64_t ShardingDataTransformCumulativeMetrics::getOldestOperationHighEstimateRemainingTimeMillis(
Role role) const {
-
- stdx::unique_lock guard(_mutex);
- auto op = getOldestOperation(guard, role);
- return op ? op->getHighEstimateRemainingTimeMillis() : 0;
+ return getOldestOperationEstimateRemainingTimeMillis(role, EstimateType::kHigh);
}
int64_t ShardingDataTransformCumulativeMetrics::getOldestOperationLowEstimateRemainingTimeMillis(
Role role) const {
+ return getOldestOperationEstimateRemainingTimeMillis(role, EstimateType::kLow);
+}
+
+int64_t ShardingDataTransformCumulativeMetrics::getOldestOperationEstimateRemainingTimeMillis(
+ Role role, EstimateType type) const {
stdx::unique_lock guard(_mutex);
auto op = getOldestOperation(guard, role);
- return op ? op->getLowEstimateRemainingTimeMillis() : 0;
+ if (!op) {
+ return kEstimateNotAvailable;
+ }
+ auto estimate = getEstimate(op, type);
+ return estimate ? estimate->count() : kEstimateNotAvailable;
+}
+
+boost::optional<Milliseconds> ShardingDataTransformCumulativeMetrics::getEstimate(
+ const InstanceObserver* op, EstimateType type) const {
+ switch (type) {
+ case kHigh:
+ return op->getHighEstimateRemainingTimeMillis();
+ case kLow:
+ return op->getLowEstimateRemainingTimeMillis();
+ }
+ MONGO_UNREACHABLE;
}
size_t ShardingDataTransformCumulativeMetrics::getObservedMetricsCount() const {