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");
+  }
 }

Reply via email to