summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortsaichristine <tsaichristine@google.com>2023-01-26 19:19:55 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-01-26 19:19:55 +0000
commitba2086a8d842a4947dbf3420fa3f80e813c8626a (patch)
tree38f5723f2ee31c370e9894c488421a06ab66273c
parent14bc779daade176ecdebc60124d1167ee3bd5f9c (diff)
parent93f3747eca174f1c6954f8ac8d48def4ef6abc48 (diff)
downloadStatsD-ba2086a8d842a4947dbf3420fa3f80e813c8626a.tar.gz
Add check on sampled_what_field that it's a subset of dimensions_in_what am: 93f3747eca
Original change: https://android-review.googlesource.com/c/platform/packages/modules/StatsD/+/2400159 Change-Id: I09025769c558640568c2917db6085ea77a6918ee Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--statsd/src/guardrail/invalid_config_reason_enum.proto1
-rw-r--r--statsd/src/metrics/parsing_utils/metrics_manager_util.cpp18
-rw-r--r--statsd/tests/metrics/parsing_utils/metrics_manager_util_test.cpp21
3 files changed, 34 insertions, 6 deletions
diff --git a/statsd/src/guardrail/invalid_config_reason_enum.proto b/statsd/src/guardrail/invalid_config_reason_enum.proto
index 74e32c2a..c56e39c1 100644
--- a/statsd/src/guardrail/invalid_config_reason_enum.proto
+++ b/statsd/src/guardrail/invalid_config_reason_enum.proto
@@ -105,4 +105,5 @@ enum InvalidConfigReasonEnum {
INVALID_CONFIG_REASON_METRIC_DIMENSIONAL_SAMPLING_INFO_INCORRECT_SHARD_COUNT = 80;
INVALID_CONFIG_REASON_METRIC_DIMENSIONAL_SAMPLING_INFO_MISSING_SAMPLED_FIELD = 81;
INVALID_CONFIG_REASON_METRIC_SAMPLED_FIELD_INCORRECT_SIZE = 82;
+ INVALID_CONFIG_REASON_METRIC_SAMPLED_FIELDS_NOT_SUBSET_DIM_IN_WHAT = 83;
};
diff --git a/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp b/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp
index 250b93e2..c44c8186 100644
--- a/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp
+++ b/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp
@@ -251,7 +251,7 @@ optional<InvalidConfigReason> handleMetricWithStateLink(const int64_t metricId,
optional<InvalidConfigReason> handleMetricWithSampling(
const int64_t metricId, const DimensionalSamplingInfo& dimSamplingInfo,
- SamplingInfo& samplingInfo) {
+ const vector<Matcher>& dimensionsInWhat, SamplingInfo& samplingInfo) {
if (!dimSamplingInfo.has_sampled_what_field()) {
ALOGE("metric DimensionalSamplingInfo missing sampledWhatField");
return InvalidConfigReason(
@@ -280,6 +280,10 @@ optional<InvalidConfigReason> handleMetricWithSampling(
return InvalidConfigReason(INVALID_CONFIG_REASON_METRIC_SAMPLED_FIELD_INCORRECT_SIZE,
metricId);
}
+ if (!subsetDimensions(samplingInfo.sampledWhatFields, dimensionsInWhat)) {
+ return InvalidConfigReason(
+ INVALID_CONFIG_REASON_METRIC_SAMPLED_FIELDS_NOT_SUBSET_DIM_IN_WHAT, metricId);
+ }
return nullopt;
}
@@ -530,7 +534,7 @@ optional<sp<MetricProducer>> createCountMetricProducerAndUpdateMetadata(
SamplingInfo samplingInfo;
if (metric.has_dimensional_sampling_info()) {
invalidConfigReason = handleMetricWithSampling(
- metric.id(), metric.dimensional_sampling_info(), samplingInfo);
+ metric.id(), metric.dimensional_sampling_info(), dimensionsInWhat, samplingInfo);
if (invalidConfigReason.has_value()) {
return nullopt;
}
@@ -715,7 +719,7 @@ optional<sp<MetricProducer>> createDurationMetricProducerAndUpdateMetadata(
SamplingInfo samplingInfo;
if (metric.has_dimensional_sampling_info()) {
invalidConfigReason = handleMetricWithSampling(
- metric.id(), metric.dimensional_sampling_info(), samplingInfo);
+ metric.id(), metric.dimensional_sampling_info(), dimensionsInWhat, samplingInfo);
if (invalidConfigReason.has_value()) {
return nullopt;
}
@@ -939,7 +943,7 @@ optional<sp<MetricProducer>> createNumericValueMetricProducerAndUpdateMetadata(
SamplingInfo samplingInfo;
if (metric.has_dimensional_sampling_info()) {
invalidConfigReason = handleMetricWithSampling(
- metric.id(), metric.dimensional_sampling_info(), samplingInfo);
+ metric.id(), metric.dimensional_sampling_info(), dimensionsInWhat, samplingInfo);
if (invalidConfigReason.has_value()) {
return nullopt;
}
@@ -1090,7 +1094,7 @@ optional<sp<MetricProducer>> createKllMetricProducerAndUpdateMetadata(
SamplingInfo samplingInfo;
if (metric.has_dimensional_sampling_info()) {
invalidConfigReason = handleMetricWithSampling(
- metric.id(), metric.dimensional_sampling_info(), samplingInfo);
+ metric.id(), metric.dimensional_sampling_info(), dimensionsInWhat, samplingInfo);
if (invalidConfigReason.has_value()) {
return nullopt;
}
@@ -1232,9 +1236,11 @@ optional<sp<MetricProducer>> createGaugeMetricProducerAndUpdateMetadata(
dimensionHardLimit);
SamplingInfo samplingInfo;
+ std::vector<Matcher> dimensionsInWhat;
+ translateFieldMatcher(metric.dimensions_in_what(), &dimensionsInWhat);
if (metric.has_dimensional_sampling_info()) {
invalidConfigReason = handleMetricWithSampling(
- metric.id(), metric.dimensional_sampling_info(), samplingInfo);
+ metric.id(), metric.dimensional_sampling_info(), dimensionsInWhat, samplingInfo);
if (invalidConfigReason.has_value()) {
return nullopt;
}
diff --git a/statsd/tests/metrics/parsing_utils/metrics_manager_util_test.cpp b/statsd/tests/metrics/parsing_utils/metrics_manager_util_test.cpp
index 25679363..a5732b30 100644
--- a/statsd/tests/metrics/parsing_utils/metrics_manager_util_test.cpp
+++ b/statsd/tests/metrics/parsing_utils/metrics_manager_util_test.cpp
@@ -1761,6 +1761,27 @@ TEST_F(MetricsManagerUtilTest, TestMetricHasRepeatedSampledField_PositionANY) {
metric.id()));
}
+TEST_F(MetricsManagerUtilTest, TestMetricSampledFieldNotSubsetDimension) {
+ AtomMatcher appCrashMatcher =
+ CreateSimpleAtomMatcher("APP_CRASH_OCCURRED", util::APP_CRASH_OCCURRED);
+
+ StatsdConfig config;
+ config.add_allowed_log_source("AID_ROOT");
+ *config.add_atom_matcher() = appCrashMatcher;
+
+ CountMetric metric =
+ createCountMetric("CountSampledAppCrashesPerUid", appCrashMatcher.id(), nullopt, {});
+ *metric.mutable_dimensional_sampling_info()->mutable_sampled_what_field() =
+ CreateDimensions(util::APP_CRASH_OCCURRED, {1 /*uid*/});
+ metric.mutable_dimensional_sampling_info()->set_shard_count(2);
+ *config.add_count_metric() = metric;
+
+ EXPECT_EQ(
+ initConfig(config),
+ InvalidConfigReason(INVALID_CONFIG_REASON_METRIC_SAMPLED_FIELDS_NOT_SUBSET_DIM_IN_WHAT,
+ metric.id()));
+}
+
} // namespace statsd
} // namespace os
} // namespace android