This is an automated email from the ASF dual-hosted git repository.
jt2594838 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new e08a738d78b Fix table-model schema series metrics (#18951)
e08a738d78b is described below
commit e08a738d78b8613b47a56ff9d306315e7604b237
Author: Caideyipi <[email protected]>
AuthorDate: Wed Oct 21 15:46:44 2026 +0800
Fix table-model schema series metrics (#18951)
---
.../schemaengine/metric/SchemaRegionMemMetric.java | 17 ++++++-
.../metric/SchemaMemMetricTableTest.java | 55 ++++++++++++++++++++++
2 files changed, 70 insertions(+), 2 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaRegionMemMetric.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaRegionMemMetric.java
index 8969feb3f74..1719d7640de 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaRegionMemMetric.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaRegionMemMetric.java
@@ -19,9 +19,11 @@
package org.apache.iotdb.db.schemaengine.metric;
+import org.apache.iotdb.commons.schema.table.TsTable;
import org.apache.iotdb.commons.service.metric.enums.Metric;
import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.db.schemaengine.rescon.MemSchemaRegionStatistics;
+import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
import org.apache.iotdb.metrics.AbstractMetricService;
import org.apache.iotdb.metrics.impl.DoNothingMetricManager;
import org.apache.iotdb.metrics.type.Timer;
@@ -83,7 +85,7 @@ public class SchemaRegionMemMetric implements
ISchemaRegionMetric {
Metric.SCHEMA_REGION.toString(),
MetricLevel.IMPORTANT,
regionStatistics,
- i -> i.getSeriesNumber(true),
+ i -> i.getSeriesNumber(true) + getTableSeriesNumber(),
Tag.NAME.toString(),
SERIES_CNT,
Tag.REGION.toString(),
@@ -94,7 +96,7 @@ public class SchemaRegionMemMetric implements
ISchemaRegionMetric {
Metric.SCHEMA_REGION.toString(),
MetricLevel.IMPORTANT,
regionStatistics,
- i -> i.getSeriesNumber(false),
+ i -> i.getSeriesNumber(false) + getTableSeriesNumber(),
Tag.NAME.toString(),
NON_VIEW_SERIES_CNT,
Tag.REGION.toString(),
@@ -154,6 +156,17 @@ public class SchemaRegionMemMetric implements
ISchemaRegionMetric {
tableName);
}
+ private long getTableSeriesNumber() {
+ return regionStatistics.getTable2DevicesNumMap().entrySet().stream()
+ .mapToLong(
+ entry -> {
+ final TsTable table =
+ DataNodeTableCache.getInstance().getTableInCache(database,
entry.getKey());
+ return table == null ? 0 : (long) table.getFieldNum() *
entry.getValue();
+ })
+ .sum();
+ }
+
@Override
public void unbindFrom(AbstractMetricService metricService) {
traverserTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/schemaengine/metric/SchemaMemMetricTableTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/schemaengine/metric/SchemaMemMetricTableTest.java
index 294f5df6301..f9e92207f34 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/schemaengine/metric/SchemaMemMetricTableTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/schemaengine/metric/SchemaMemMetricTableTest.java
@@ -19,9 +19,14 @@
package org.apache.iotdb.db.schemaengine.metric;
+import org.apache.iotdb.commons.schema.table.TsTable;
+import org.apache.iotdb.commons.schema.table.column.FieldColumnSchema;
import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.service.metric.enums.Tag;
import org.apache.iotdb.db.schemaengine.rescon.MemSchemaEngineStatistics;
import org.apache.iotdb.db.schemaengine.rescon.MemSchemaRegionStatistics;
+import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
+import org.apache.iotdb.db.schemaengine.table.ITableCache;
import org.apache.iotdb.metrics.config.MetricConfig;
import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
import org.apache.iotdb.metrics.metricsets.IMetricSet;
@@ -30,6 +35,9 @@ import org.apache.iotdb.metrics.type.IMetric;
import org.apache.iotdb.metrics.utils.MetricInfo;
import org.apache.iotdb.metrics.utils.MetricLevel;
+import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.file.metadata.enums.CompressionType;
+import org.apache.tsfile.file.metadata.enums.TSEncoding;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -51,6 +59,8 @@ import static org.mockito.Mockito.when;
public class SchemaMemMetricTableTest {
private static final String TABLE = "t1";
+ private static final String DATABASE = "root.prometheus_metric_test";
+ private static final int SCHEMA_REGION_ID = 4321;
private final MetricService service = MetricService.getInstance();
private final MetricConfig config =
MetricConfigDescriptor.getInstance().getMetricConfig();
@@ -95,6 +105,39 @@ public class SchemaMemMetricTableTest {
checkTableMetrics(metric, metric::bindTableMetrics, table2DevicesNum);
}
+ @Test
+ public void testSchemaRegionSeriesMetricsIncludeTableMeasurements() {
+ final ITableCache tableCache = DataNodeTableCache.getInstance();
+ tableCache.invalid(DATABASE);
+ final TsTable table = new TsTable(TABLE);
+ table.addColumnSchema(
+ new FieldColumnSchema("s1", TSDataType.INT32, TSEncoding.RLE,
CompressionType.GZIP));
+ table.addColumnSchema(
+ new FieldColumnSchema("s2", TSDataType.INT32, TSEncoding.RLE,
CompressionType.GZIP));
+ tableCache.preUpdateTable(DATABASE, table, null);
+ tableCache.commitUpdateTable(DATABASE, TABLE, null);
+
+ final MemSchemaRegionStatistics statistics =
+ new MemSchemaRegionStatistics(SCHEMA_REGION_ID, new
MemSchemaEngineStatistics());
+ statistics.addMeasurement(2);
+ statistics.addView(1);
+ statistics.getTable2DevicesNumMap().put(TABLE, 3L);
+ final SchemaRegionMemMetric metric = new SchemaRegionMemMetric(statistics,
DATABASE);
+
+ service.addMetricSet(metric);
+ try {
+ assertEquals(
+ 9, getSchemaRegionGauge("schema_region_series_cnt",
SCHEMA_REGION_ID).getValue(), 0);
+ assertEquals(
+ 8,
+ getSchemaRegionGauge("schema_region_non_view_series_cnt",
SCHEMA_REGION_ID).getValue(),
+ 0);
+ } finally {
+ service.removeMetricSet(metric);
+ tableCache.invalid(DATABASE);
+ }
+ }
+
private void checkTableMetrics(
final IMetricSet metric,
final Consumer<String> bindTableMetrics,
@@ -130,4 +173,16 @@ public class SchemaMemMetricTableTest {
}
return null;
}
+
+ private AutoGauge getSchemaRegionGauge(final String name, final int
schemaRegionId) {
+ for (final Map.Entry<MetricInfo, IMetric> entry :
service.getAllMetrics().entrySet()) {
+ if (name.equals(entry.getKey().getTags().get(Tag.NAME.toString()))
+ && ("SchemaRegion[" + schemaRegionId + "]")
+ .equals(entry.getKey().getTags().get(Tag.REGION.toString()))) {
+ return (AutoGauge) entry.getValue();
+ }
+ }
+ throw new AssertionError(
+ "Gauge " + name + " for SchemaRegion[" + schemaRegionId + "] is
missing");
+ }
}