Skip to content

Commit e08a738

Browse files
authored
Fix table-model schema series metrics (#18951)
1 parent 6ca9cd9 commit e08a738

2 files changed

Lines changed: 70 additions & 2 deletions

File tree

‎iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaRegionMemMetric.java‎

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919

2020
package org.apache.iotdb.db.schemaengine.metric;
2121

22+
import org.apache.iotdb.commons.schema.table.TsTable;
2223
import org.apache.iotdb.commons.service.metric.enums.Metric;
2324
import org.apache.iotdb.commons.service.metric.enums.Tag;
2425
import org.apache.iotdb.db.schemaengine.rescon.MemSchemaRegionStatistics;
26+
import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
2527
import org.apache.iotdb.metrics.AbstractMetricService;
2628
import org.apache.iotdb.metrics.impl.DoNothingMetricManager;
2729
import org.apache.iotdb.metrics.type.Timer;
@@ -83,7 +85,7 @@ public void bindTo(AbstractMetricService metricService) {
8385
Metric.SCHEMA_REGION.toString(),
8486
MetricLevel.IMPORTANT,
8587
regionStatistics,
86-
i -> i.getSeriesNumber(true),
88+
i -> i.getSeriesNumber(true) + getTableSeriesNumber(),
8789
Tag.NAME.toString(),
8890
SERIES_CNT,
8991
Tag.REGION.toString(),
@@ -94,7 +96,7 @@ public void bindTo(AbstractMetricService metricService) {
9496
Metric.SCHEMA_REGION.toString(),
9597
MetricLevel.IMPORTANT,
9698
regionStatistics,
97-
i -> i.getSeriesNumber(false),
99+
i -> i.getSeriesNumber(false) + getTableSeriesNumber(),
98100
Tag.NAME.toString(),
99101
NON_VIEW_SERIES_CNT,
100102
Tag.REGION.toString(),
@@ -154,6 +156,17 @@ public void bindTableMetrics(final String tableName) {
154156
tableName);
155157
}
156158

159+
private long getTableSeriesNumber() {
160+
return regionStatistics.getTable2DevicesNumMap().entrySet().stream()
161+
.mapToLong(
162+
entry -> {
163+
final TsTable table =
164+
DataNodeTableCache.getInstance().getTableInCache(database, entry.getKey());
165+
return table == null ? 0 : (long) table.getFieldNum() * entry.getValue();
166+
})
167+
.sum();
168+
}
169+
157170
@Override
158171
public void unbindFrom(AbstractMetricService metricService) {
159172
traverserTimer = DoNothingMetricManager.DO_NOTHING_TIMER;

‎iotdb-core/datanode/src/test/java/org/apache/iotdb/db/schemaengine/metric/SchemaMemMetricTableTest.java‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,14 @@
1919

2020
package org.apache.iotdb.db.schemaengine.metric;
2121

22+
import org.apache.iotdb.commons.schema.table.TsTable;
23+
import org.apache.iotdb.commons.schema.table.column.FieldColumnSchema;
2224
import org.apache.iotdb.commons.service.metric.MetricService;
25+
import org.apache.iotdb.commons.service.metric.enums.Tag;
2326
import org.apache.iotdb.db.schemaengine.rescon.MemSchemaEngineStatistics;
2427
import org.apache.iotdb.db.schemaengine.rescon.MemSchemaRegionStatistics;
28+
import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
29+
import org.apache.iotdb.db.schemaengine.table.ITableCache;
2530
import org.apache.iotdb.metrics.config.MetricConfig;
2631
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
2732
import org.apache.iotdb.metrics.metricsets.IMetricSet;
@@ -30,6 +35,9 @@
3035
import org.apache.iotdb.metrics.utils.MetricInfo;
3136
import org.apache.iotdb.metrics.utils.MetricLevel;
3237

38+
import org.apache.tsfile.enums.TSDataType;
39+
import org.apache.tsfile.file.metadata.enums.CompressionType;
40+
import org.apache.tsfile.file.metadata.enums.TSEncoding;
3341
import org.junit.After;
3442
import org.junit.Before;
3543
import org.junit.Test;
@@ -51,6 +59,8 @@
5159
public class SchemaMemMetricTableTest {
5260

5361
private static final String TABLE = "t1";
62+
private static final String DATABASE = "root.prometheus_metric_test";
63+
private static final int SCHEMA_REGION_ID = 4321;
5464

5565
private final MetricService service = MetricService.getInstance();
5666
private final MetricConfig config = MetricConfigDescriptor.getInstance().getMetricConfig();
@@ -95,6 +105,39 @@ public void testSchemaRegionTableMetrics() {
95105
checkTableMetrics(metric, metric::bindTableMetrics, table2DevicesNum);
96106
}
97107

108+
@Test
109+
public void testSchemaRegionSeriesMetricsIncludeTableMeasurements() {
110+
final ITableCache tableCache = DataNodeTableCache.getInstance();
111+
tableCache.invalid(DATABASE);
112+
final TsTable table = new TsTable(TABLE);
113+
table.addColumnSchema(
114+
new FieldColumnSchema("s1", TSDataType.INT32, TSEncoding.RLE, CompressionType.GZIP));
115+
table.addColumnSchema(
116+
new FieldColumnSchema("s2", TSDataType.INT32, TSEncoding.RLE, CompressionType.GZIP));
117+
tableCache.preUpdateTable(DATABASE, table, null);
118+
tableCache.commitUpdateTable(DATABASE, TABLE, null);
119+
120+
final MemSchemaRegionStatistics statistics =
121+
new MemSchemaRegionStatistics(SCHEMA_REGION_ID, new MemSchemaEngineStatistics());
122+
statistics.addMeasurement(2);
123+
statistics.addView(1);
124+
statistics.getTable2DevicesNumMap().put(TABLE, 3L);
125+
final SchemaRegionMemMetric metric = new SchemaRegionMemMetric(statistics, DATABASE);
126+
127+
service.addMetricSet(metric);
128+
try {
129+
assertEquals(
130+
9, getSchemaRegionGauge("schema_region_series_cnt", SCHEMA_REGION_ID).getValue(), 0);
131+
assertEquals(
132+
8,
133+
getSchemaRegionGauge("schema_region_non_view_series_cnt", SCHEMA_REGION_ID).getValue(),
134+
0);
135+
} finally {
136+
service.removeMetricSet(metric);
137+
tableCache.invalid(DATABASE);
138+
}
139+
}
140+
98141
private void checkTableMetrics(
99142
final IMetricSet metric,
100143
final Consumer<String> bindTableMetrics,
@@ -130,4 +173,16 @@ private IMetric findTableGauge() {
130173
}
131174
return null;
132175
}
176+
177+
private AutoGauge getSchemaRegionGauge(final String name, final int schemaRegionId) {
178+
for (final Map.Entry<MetricInfo, IMetric> entry : service.getAllMetrics().entrySet()) {
179+
if (name.equals(entry.getKey().getTags().get(Tag.NAME.toString()))
180+
&& ("SchemaRegion[" + schemaRegionId + "]")
181+
.equals(entry.getKey().getTags().get(Tag.REGION.toString()))) {
182+
return (AutoGauge) entry.getValue();
183+
}
184+
}
185+
throw new AssertionError(
186+
"Gauge " + name + " for SchemaRegion[" + schemaRegionId + "] is missing");
187+
}
133188
}

0 commit comments

Comments
 (0)