diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2023-08-29 12:22:40 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahooinc.com> | 2023-08-29 13:04:35 +0000 |
commit | 8089a9a696cafede455a25c3e37432bf24845790 (patch) | |
tree | e29430a3b0c0879f7a01b8e58aca3f9e3b41a578 /metrics/src/tests/metricmanagertest.cpp | |
parent | a42035a3325890d63ac8dd1526d012f093f1fc90 (diff) |
Do not return State V1 metrics until at least one metric snapshot has been created
This avoids a 60 second time window just after process startup
where metrics may be reported from an empty initial snapshot. Depending
on the timing of State V1 sampling and metric manager snapshotting,
these values risk erroneously appearing as all zero, causing much
confusion and gnashing of teeth.
Diffstat (limited to 'metrics/src/tests/metricmanagertest.cpp')
-rw-r--r-- | metrics/src/tests/metricmanagertest.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/metrics/src/tests/metricmanagertest.cpp b/metrics/src/tests/metricmanagertest.cpp index 9e6b0f40be3..f655d6c210e 100644 --- a/metrics/src/tests/metricmanagertest.cpp +++ b/metrics/src/tests/metricmanagertest.cpp @@ -474,6 +474,7 @@ TEST_F(MetricManagerTest, test_snapshots) MetricNameVisitor visitor; { MetricLockGuard lockGuard(mm.getMetricLock()); + EXPECT_FALSE(mm.any_snapshots_taken(lockGuard)); // No snapshots yet mm.visit(lockGuard, mm.getActiveMetrics(lockGuard), visitor, "snapper"); const MetricManager::ConsumerSpec * consumerSpec = mm.getConsumerSpec(lockGuard, "snapper"); EXPECT_EQ(std::string("\n" @@ -506,6 +507,10 @@ TEST_F(MetricManagerTest, test_snapshots) ASSERT_VALUES(mm, 5 * 60s, "2,4,4,1,7,9,1,1,8,2,10"); ASSERT_VALUES(mm, 60 * 60s, ""); ASSERT_VALUES(mm, 0 * 60s, "2,4,4,1,7,9,1,1,8,2,10"); + { + auto guard = mm.getMetricLock(); + EXPECT_TRUE(mm.any_snapshots_taken(guard)); // At least one snapshot has been taken + } // Adding metrics done in second five minute period. Total should // be updated to account for both @@ -567,6 +572,14 @@ TEST_F(MetricManagerTest, test_json_output) "consumer[0].tags[1]\n" "consumer[0].tags[0] snaptest\n")); + { + // No snapshots have been taken yet, so the non-total getMetrics call should return + // the empty string (i.e. no metrics produced). + metrics::StateApiAdapter adapter(mm); + auto json_str = adapter.getMetrics("snapper"); + EXPECT_EQ(json_str, ""); + } + takeSnapshots(mm, 1000); // Adding metrics to have some values in them |