Merge "Updating use_sample_size to be include_sample_size"
diff --git a/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp b/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp
index 0255cdb..47888f4 100644
--- a/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp
+++ b/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp
@@ -450,6 +450,18 @@
}
}
+ // Check that all metric state links are a subset of dimensions_in_what fields.
+ std::vector<Matcher> dimensionsInWhat;
+ translateFieldMatcher(metric.dimensions_in_what(), &dimensionsInWhat);
+ for (const auto& stateLink : metric.state_link()) {
+ invalidConfigReason = handleMetricWithStateLink(metric.id(), stateLink.fields_in_what(),
+ dimensionsInWhat);
+ if (invalidConfigReason.has_value()) {
+ ALOGW("CountMetric's MetricStateLinks must be a subset of dimensions in what");
+ return nullopt;
+ }
+ }
+
unordered_map<int, shared_ptr<Activation>> eventActivationMap;
unordered_map<int, vector<shared_ptr<Activation>>> eventDeactivationMap;
invalidConfigReason = handleMetricActivation(
diff --git a/statsd/tests/e2e/CountMetric_e2e_test.cpp b/statsd/tests/e2e/CountMetric_e2e_test.cpp
index ef183b7..2589f00 100644
--- a/statsd/tests/e2e/CountMetric_e2e_test.cpp
+++ b/statsd/tests/e2e/CountMetric_e2e_test.cpp
@@ -469,6 +469,8 @@
countMetric->set_what(appCrashMatcher.id());
countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
countMetric->add_slice_by_state(state.id());
+ *countMetric->mutable_dimensions_in_what() =
+ CreateDimensions(util::APP_CRASH_OCCURRED, {1 /*uid*/});
MetricStateLink* stateLink = countMetric->add_state_link();
stateLink->set_state_atom_id(UID_PROCESS_STATE_ATOM_ID);
auto fieldsInWhat = stateLink->mutable_fields_in_what();
@@ -592,7 +594,7 @@
EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
- ASSERT_EQ(5, countMetrics.data_size());
+ ASSERT_EQ(6, countMetrics.data_size());
// For each CountMetricData, check StateValue info is correct and buckets
// have correct counts.
@@ -601,6 +603,7 @@
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, data.slice_by_state(0).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 1);
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
@@ -609,14 +612,16 @@
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(0).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 1);
ASSERT_EQ(1, data.bucket_info_size());
- EXPECT_EQ(2, data.bucket_info(0).count());
+ EXPECT_EQ(1, data.bucket_info(0).count());
data = countMetrics.data(2);
ASSERT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(0).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 1);
ASSERT_EQ(2, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
EXPECT_EQ(2, data.bucket_info(1).count());
@@ -626,6 +631,7 @@
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(0).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 1);
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(2, data.bucket_info(0).count());
@@ -633,7 +639,17 @@
ASSERT_EQ(1, data.slice_by_state_size());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_value());
+ EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(0).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 2);
+ ASSERT_EQ(1, data.bucket_info_size());
+ EXPECT_EQ(1, data.bucket_info(0).count());
+
+ data = countMetrics.data(5);
+ ASSERT_EQ(1, data.slice_by_state_size());
+ EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+ EXPECT_TRUE(data.slice_by_state(0).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(0).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 2);
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
}
@@ -663,6 +679,8 @@
countMetric->set_bucket(TimeUnit::FIVE_MINUTES);
countMetric->add_slice_by_state(state1.id());
countMetric->add_slice_by_state(state2.id());
+ *countMetric->mutable_dimensions_in_what() =
+ CreateDimensions(util::APP_CRASH_OCCURRED, {1 /*uid*/});
MetricStateLink* stateLink = countMetric->add_state_link();
stateLink->set_state_atom_id(UID_PROCESS_STATE_ATOM_ID);
auto fieldsInWhat = stateLink->mutable_fields_in_what();
@@ -821,7 +839,7 @@
EXPECT_TRUE(reports.reports(0).metrics(0).has_count_metrics());
StatsLogReport::CountMetricDataWrapper countMetrics;
sortMetricDataByDimensionsValue(reports.reports(0).metrics(0).count_metrics(), &countMetrics);
- ASSERT_EQ(6, countMetrics.data_size());
+ ASSERT_EQ(7, countMetrics.data_size());
// For each CountMetricData, check StateValue info is correct and buckets
// have correct counts.
@@ -833,6 +851,7 @@
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 1);
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
@@ -844,6 +863,7 @@
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 1);
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
@@ -851,10 +871,11 @@
ASSERT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id());
- EXPECT_EQ(screenOnId, data.slice_by_state(0).group_id());
+ EXPECT_EQ(screenOffId, data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
- EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(1).value());
+ EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(1).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 1);
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
@@ -865,9 +886,10 @@
EXPECT_EQ(screenOffId, data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
- EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(1).value());
+ EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(1).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 1);
ASSERT_EQ(1, data.bucket_info_size());
- EXPECT_EQ(2, data.bucket_info(0).count());
+ EXPECT_EQ(1, data.bucket_info(0).count());
data = countMetrics.data(4);
ASSERT_EQ(2, data.slice_by_state_size());
@@ -876,21 +898,35 @@
EXPECT_EQ(screenOffId, data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
- EXPECT_EQ(android::app::PROCESS_STATE_FOREGROUND_SERVICE, data.slice_by_state(1).value());
+ EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 1);
+ ASSERT_EQ(2, data.bucket_info_size());
+ EXPECT_EQ(2, data.bucket_info(0).count());
+ EXPECT_EQ(1, data.bucket_info(1).count());
+
+ data = countMetrics.data(5);
+ ASSERT_EQ(2, data.slice_by_state_size());
+ EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
+ EXPECT_TRUE(data.slice_by_state(0).has_group_id());
+ EXPECT_EQ(screenOnId, data.slice_by_state(0).group_id());
+ EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
+ EXPECT_TRUE(data.slice_by_state(1).has_value());
+ EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, data.slice_by_state(1).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 2);
ASSERT_EQ(1, data.bucket_info_size());
EXPECT_EQ(1, data.bucket_info(0).count());
- data = countMetrics.data(5);
+ data = countMetrics.data(6);
ASSERT_EQ(2, data.slice_by_state_size());
EXPECT_EQ(SCREEN_STATE_ATOM_ID, data.slice_by_state(0).atom_id());
EXPECT_TRUE(data.slice_by_state(0).has_group_id());
EXPECT_EQ(screenOffId, data.slice_by_state(0).group_id());
EXPECT_EQ(UID_PROCESS_STATE_ATOM_ID, data.slice_by_state(1).atom_id());
EXPECT_TRUE(data.slice_by_state(1).has_value());
- EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
- ASSERT_EQ(2, data.bucket_info_size());
- EXPECT_EQ(2, data.bucket_info(0).count());
- EXPECT_EQ(1, data.bucket_info(1).count());
+ EXPECT_EQ(android::app::PROCESS_STATE_TOP, data.slice_by_state(1).value());
+ ValidateUidDimension(data.dimensions_in_what(), util::APP_CRASH_OCCURRED, 2);
+ ASSERT_EQ(1, data.bucket_info_size());
+ EXPECT_EQ(1, data.bucket_info(0).count());
}
TEST(CountMetricE2eTest, TestUploadThreshold) {
diff --git a/statsd/tests/e2e/KllMetric_e2e_test.cpp b/statsd/tests/e2e/KllMetric_e2e_test.cpp
index 6f2530f..89ef229 100644
--- a/statsd/tests/e2e/KllMetric_e2e_test.cpp
+++ b/statsd/tests/e2e/KllMetric_e2e_test.cpp
@@ -25,6 +25,21 @@
using namespace std;
+namespace {
+
+unique_ptr<LogEvent> CreateTestAtomReportedEvent(const uint64_t timestampNs, const long longField,
+ const string& stringField) {
+ return CreateTestAtomReportedEvent(
+ timestampNs, /* attributionUids */ {1001},
+ /* attributionTags */ {"app1"}, /* intField */ 0, longField, /* floatField */ 0.0f,
+ stringField, /* boolField */ false, TestAtomReported::OFF, /* bytesField */ {},
+ /* repeatedIntField */ {}, /* repeatedLongField */ {}, /* repeatedFloatField */ {},
+ /* repeatedStringField */ {}, /* repeatedBoolField */ {},
+ /* repeatedBoolFieldLength */ 0, /* repeatedEnumField */ {});
+}
+
+} // anonymous namespace.
+
class KllMetricE2eTest : public ::testing::Test {
protected:
void SetUp() override {
@@ -90,6 +105,75 @@
EXPECT_EQ(metricReport.kll_metrics().skipped_size(), 0);
}
+TEST_F(KllMetricE2eTest, TestMetricWithDimensions) {
+ whatMatcher = CreateSimpleAtomMatcher("TestAtomReported", util::TEST_ATOM_REPORTED);
+ metric = createKllMetric("TestAtomMetric", whatMatcher, /* kllField */ 3,
+ /* condition */ nullopt);
+
+ *metric.mutable_dimensions_in_what() =
+ CreateDimensions(util::TEST_ATOM_REPORTED, {5 /* string_field */});
+
+ config.clear_atom_matcher();
+ *config.add_atom_matcher() = whatMatcher;
+
+ config.clear_kll_metric();
+ *config.add_kll_metric() = metric;
+
+ events.clear();
+ events.push_back(CreateTestAtomReportedEvent(bucketStartTimeNs + 5 * NS_PER_SEC, 5l, "dim_1"));
+ events.push_back(CreateTestAtomReportedEvent(bucketStartTimeNs + 15 * NS_PER_SEC, 6l, "dim_2"));
+ events.push_back(CreateTestAtomReportedEvent(bucketStartTimeNs + 25 * NS_PER_SEC, 7l, "dim_1"));
+
+ const sp<StatsLogProcessor> processor =
+ CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, key);
+
+ for (auto& event : events) {
+ processor->OnLogEvent(event.get());
+ }
+
+ uint64_t dumpTimeNs = bucketStartTimeNs + bucketSizeNs;
+ ConfigMetricsReportList reports;
+ vector<uint8_t> buffer;
+ processor->onDumpReport(key, dumpTimeNs, /*include_current_bucket*/ false, true, ADB_DUMP, FAST,
+ &buffer);
+ EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+ backfillDimensionPath(&reports);
+ backfillStringInReport(&reports);
+ backfillStartEndTimestamp(&reports);
+ ASSERT_EQ(reports.reports_size(), 1);
+
+ ConfigMetricsReport report = reports.reports(0);
+ ASSERT_EQ(report.metrics_size(), 1);
+ StatsLogReport metricReport = report.metrics(0);
+ EXPECT_EQ(metricReport.metric_id(), metric.id());
+ EXPECT_TRUE(metricReport.has_kll_metrics());
+ ASSERT_EQ(metricReport.kll_metrics().data_size(), 2);
+
+ KllMetricData data = metricReport.kll_metrics().data(0);
+ ASSERT_EQ(data.bucket_info_size(), 1);
+ KllBucketInfo bucket = data.bucket_info(0);
+ EXPECT_EQ(bucket.start_bucket_elapsed_nanos(), bucketStartTimeNs);
+ EXPECT_EQ(bucket.end_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
+ EXPECT_EQ(bucket.sketches_size(), 1);
+ EXPECT_EQ(metricReport.kll_metrics().skipped_size(), 0);
+ EXPECT_EQ(data.dimensions_in_what().field(), util::TEST_ATOM_REPORTED);
+ ASSERT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1);
+ EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).field(), 5);
+ EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str(), "dim_1");
+
+ data = metricReport.kll_metrics().data(1);
+ ASSERT_EQ(data.bucket_info_size(), 1);
+ bucket = data.bucket_info(0);
+ EXPECT_EQ(bucket.start_bucket_elapsed_nanos(), bucketStartTimeNs);
+ EXPECT_EQ(bucket.end_bucket_elapsed_nanos(), bucketStartTimeNs + bucketSizeNs);
+ EXPECT_EQ(bucket.sketches_size(), 1);
+ EXPECT_EQ(metricReport.kll_metrics().skipped_size(), 0);
+ EXPECT_EQ(data.dimensions_in_what().field(), util::TEST_ATOM_REPORTED);
+ ASSERT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1);
+ EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).field(), 5);
+ EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str(), "dim_2");
+}
+
TEST_F(KllMetricE2eTest, TestInitWithKllFieldPositionALL) {
// Create config.
StatsdConfig config;
diff --git a/statsd/tests/statsd_test_util.cpp b/statsd/tests/statsd_test_util.cpp
index 08ce49d..c584c81 100644
--- a/statsd/tests/statsd_test_util.cpp
+++ b/statsd/tests/statsd_test_util.cpp
@@ -255,10 +255,8 @@
AtomMatcher CreateTestAtomRepeatedStateAtomMatcher(const string& name,
TestAtomReported::State state,
Position position) {
- AtomMatcher atom_matcher;
- atom_matcher.set_id(StringToId(name));
+ AtomMatcher atom_matcher = CreateSimpleAtomMatcher(name, util::TEST_ATOM_REPORTED);
auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
- simple_atom_matcher->set_atom_id(util::TEST_ATOM_REPORTED);
auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
field_value_matcher->set_field(14); // Repeated enum field.
field_value_matcher->set_eq_int(state);
@@ -592,14 +590,14 @@
return metric;
}
-KllMetric createKllMetric(const string& name, const AtomMatcher& what, const int valueField,
+KllMetric createKllMetric(const string& name, const AtomMatcher& what, const int kllField,
const optional<int64_t>& condition) {
KllMetric metric;
metric.set_id(StringToId(name));
metric.set_what(what.id());
metric.set_bucket(TEN_MINUTES);
metric.mutable_kll_field()->set_field(what.simple_atom_matcher().atom_id());
- metric.mutable_kll_field()->add_child()->set_field(valueField);
+ metric.mutable_kll_field()->add_child()->set_field(kllField);
if (condition) {
metric.set_condition(condition.value());
}
@@ -1692,6 +1690,8 @@
backfillStringInDimension(str_map, metric_report->mutable_gauge_metrics());
} else if (metric_report->has_value_metrics()) {
backfillStringInDimension(str_map, metric_report->mutable_value_metrics());
+ } else if (metric_report->has_kll_metrics()) {
+ backfillStringInDimension(str_map, metric_report->mutable_kll_metrics());
}
}
// Backfill the package names.
@@ -1764,20 +1764,20 @@
}
void backfillDimensionPath(StatsLogReport* report) {
- if (report->has_dimensions_path_in_what() || report->has_dimensions_path_in_condition()) {
+ if (report->has_dimensions_path_in_what()) {
auto whatPath = report->dimensions_path_in_what();
- auto conditionPath = report->dimensions_path_in_condition();
if (report->has_count_metrics()) {
- backfillDimensionPath(whatPath, conditionPath, report->mutable_count_metrics());
+ backfillDimensionPath(whatPath, report->mutable_count_metrics());
} else if (report->has_duration_metrics()) {
- backfillDimensionPath(whatPath, conditionPath, report->mutable_duration_metrics());
+ backfillDimensionPath(whatPath, report->mutable_duration_metrics());
} else if (report->has_gauge_metrics()) {
- backfillDimensionPath(whatPath, conditionPath, report->mutable_gauge_metrics());
+ backfillDimensionPath(whatPath, report->mutable_gauge_metrics());
} else if (report->has_value_metrics()) {
- backfillDimensionPath(whatPath, conditionPath, report->mutable_value_metrics());
+ backfillDimensionPath(whatPath, report->mutable_value_metrics());
+ } else if (report->has_kll_metrics()) {
+ backfillDimensionPath(whatPath, report->mutable_kll_metrics());
}
report->clear_dimensions_path_in_what();
- report->clear_dimensions_path_in_condition();
}
}
diff --git a/statsd/tests/statsd_test_util.h b/statsd/tests/statsd_test_util.h
index c4fa1fe..4513731 100644
--- a/statsd/tests/statsd_test_util.h
+++ b/statsd/tests/statsd_test_util.h
@@ -272,7 +272,7 @@
ValueMetric createValueMetric(const string& name, const AtomMatcher& what, const int valueField,
const optional<int64_t>& condition, const vector<int64_t>& states);
-KllMetric createKllMetric(const string& name, const AtomMatcher& what, const int valueField,
+KllMetric createKllMetric(const string& name, const AtomMatcher& what, const int kllField,
const optional<int64_t>& condition);
Alert createAlert(const string& name, const int64_t metricId, const int buckets,
@@ -535,9 +535,6 @@
if (data->has_dimensions_in_what()) {
backfillStringInDimension(str_map, data->mutable_dimensions_in_what());
}
- if (data->has_dimensions_in_condition()) {
- backfillStringInDimension(str_map, data->mutable_dimensions_in_condition());
- }
}
}
@@ -560,9 +557,7 @@
};
template <typename T>
-void backfillDimensionPath(const DimensionsValue& whatPath,
- const DimensionsValue& conditionPath,
- T* metricData) {
+void backfillDimensionPath(const DimensionsValue& whatPath, T* metricData) {
for (int i = 0; i < metricData->data_size(); ++i) {
auto data = metricData->mutable_data(i);
if (data->dimension_leaf_values_in_what_size() > 0) {
@@ -570,11 +565,6 @@
data->mutable_dimensions_in_what());
data->clear_dimension_leaf_values_in_what();
}
- if (data->dimension_leaf_values_in_condition_size() > 0) {
- backfillDimensionPath(conditionPath, data->dimension_leaf_values_in_condition(),
- data->mutable_dimensions_in_condition());
- data->clear_dimension_leaf_values_in_condition();
- }
}
}