aboutsummaryrefslogtreecommitdiffstats
path: root/metrics/src/tests/metricmanagertest.cpp
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahooinc.com>2023-08-29 12:22:40 +0000
committerTor Brede Vekterli <vekterli@yahooinc.com>2023-08-29 13:04:35 +0000
commit8089a9a696cafede455a25c3e37432bf24845790 (patch)
treee29430a3b0c0879f7a01b8e58aca3f9e3b41a578 /metrics/src/tests/metricmanagertest.cpp
parenta42035a3325890d63ac8dd1526d012f093f1fc90 (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.cpp13
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