This is an automated email from the ASF dual-hosted git repository.

jinsongzhou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/amoro.git


The following commit(s) were added to refs/heads/master by this push:
     new 7ef5325e8 [AMORO-3559] Extract abstract class for table metrics (#3560)
7ef5325e8 is described below

commit 7ef5325e84adc1efa858488589df4afdb4fe55c3
Author: Jzjsnow <[email protected]>
AuthorDate: Wed May 14 19:21:34 2025 +0800

    [AMORO-3559] Extract abstract class for table metrics (#3560)
    
    * [AMORO-3559] Extract abstract class for table metrics
    
    * fixup! [AMORO-3559] Extract abstract class for table metrics
    
    ---------
    
    Co-authored-by: jzjsnow <[email protected]>
---
 .../amoro/server/table/AbstractTableMetrics.java   | 71 ++++++++++++++++++++++
 .../amoro/server/table/TableOptimizingMetrics.java | 40 ++----------
 .../table/TableOrphanFilesCleaningMetrics.java     | 42 ++-----------
 .../amoro/server/table/TableSummaryMetrics.java    | 38 ++----------
 4 files changed, 83 insertions(+), 108 deletions(-)

diff --git 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/AbstractTableMetrics.java
 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/AbstractTableMetrics.java
new file mode 100644
index 000000000..864c77c01
--- /dev/null
+++ 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/AbstractTableMetrics.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.amoro.server.table;
+
+import org.apache.amoro.ServerTableIdentifier;
+import org.apache.amoro.metrics.Metric;
+import org.apache.amoro.metrics.MetricDefine;
+import org.apache.amoro.metrics.MetricKey;
+import org.apache.amoro.server.metrics.MetricRegistry;
+import org.apache.amoro.shade.guava32.com.google.common.collect.ImmutableMap;
+import org.apache.amoro.shade.guava32.com.google.common.collect.Lists;
+
+import java.util.List;
+
+public abstract class AbstractTableMetrics {
+  protected final ServerTableIdentifier identifier;
+  protected final List<MetricKey> registeredMetricKeys = Lists.newArrayList();
+  protected MetricRegistry globalRegistry;
+
+  protected AbstractTableMetrics(ServerTableIdentifier identifier) {
+    this.identifier = identifier;
+  }
+
+  protected void registerMetric(MetricRegistry registry, MetricDefine define, 
Metric metric) {
+    MetricKey key =
+        registry.register(
+            define,
+            ImmutableMap.of(
+                "catalog",
+                identifier.getCatalog(),
+                "database",
+                identifier.getDatabase(),
+                "table",
+                identifier.getTableName()),
+            metric);
+    registeredMetricKeys.add(key);
+  }
+
+  public void register(MetricRegistry registry) {
+    if (globalRegistry == null) {
+      registerMetrics(registry);
+      globalRegistry = registry;
+    }
+  }
+
+  public void unregister() {
+    if (globalRegistry != null) {
+      registeredMetricKeys.forEach(globalRegistry::unregister);
+      registeredMetricKeys.clear();
+      globalRegistry = null;
+    }
+  }
+
+  protected abstract void registerMetrics(MetricRegistry registry);
+}
diff --git 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOptimizingMetrics.java
 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOptimizingMetrics.java
index 373dcc418..4e4452eba 100644
--- 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOptimizingMetrics.java
+++ 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOptimizingMetrics.java
@@ -24,24 +24,18 @@ import static 
org.apache.amoro.metrics.MetricDefine.defineGauge;
 import org.apache.amoro.ServerTableIdentifier;
 import org.apache.amoro.metrics.Counter;
 import org.apache.amoro.metrics.Gauge;
-import org.apache.amoro.metrics.Metric;
 import org.apache.amoro.metrics.MetricDefine;
-import org.apache.amoro.metrics.MetricKey;
 import org.apache.amoro.optimizing.OptimizingType;
 import org.apache.amoro.server.AmoroServiceConstants;
 import org.apache.amoro.server.metrics.MetricRegistry;
 import org.apache.amoro.server.optimizing.OptimizingStatus;
 import org.apache.amoro.server.optimizing.maintainer.IcebergTableMaintainer;
-import org.apache.amoro.shade.guava32.com.google.common.collect.ImmutableMap;
-import org.apache.amoro.shade.guava32.com.google.common.collect.Lists;
 import org.apache.amoro.shade.guava32.com.google.common.primitives.Longs;
 import org.apache.iceberg.Snapshot;
 import org.apache.iceberg.SnapshotSummary;
 
-import java.util.List;
-
 /** Table self optimizing metrics */
-public class TableOptimizingMetrics {
+public class TableOptimizingMetrics extends AbstractTableMetrics {
   /** Table is no need optimizing. */
   public static final String STATUS_IDLE = "idle";
 
@@ -208,36 +202,18 @@ public class TableOptimizingMetrics {
   private final Counter fullTotalCount = new Counter();
   private final Counter fullFailedCount = new Counter();
 
-  private final ServerTableIdentifier identifier;
-
   private OptimizingStatus optimizingStatus = OptimizingStatus.IDLE;
   private long statusSetTimestamp = System.currentTimeMillis();
   private long lastMinorTime, lastMajorTime, lastFullTime;
   private long lastNonMaintainedTime = AmoroServiceConstants.INVALID_TIME;
   private long lastOptimizingTime = AmoroServiceConstants.INVALID_TIME;
-  private final List<MetricKey> registeredMetricKeys = Lists.newArrayList();
-  private MetricRegistry globalRegistry;
 
   public TableOptimizingMetrics(ServerTableIdentifier identifier) {
-    this.identifier = identifier;
-  }
-
-  private void registerMetric(MetricRegistry registry, MetricDefine define, 
Metric metric) {
-    MetricKey key =
-        registry.register(
-            define,
-            ImmutableMap.of(
-                "catalog",
-                identifier.getCatalog(),
-                "database",
-                identifier.getDatabase(),
-                "table",
-                identifier.getTableName()),
-            metric);
-    registeredMetricKeys.add(key);
+    super(identifier);
   }
 
-  public void register(MetricRegistry registry) {
+  @Override
+  public void registerMetrics(MetricRegistry registry) {
     if (globalRegistry == null) {
       // register status duration metrics
       registerMetric(
@@ -301,14 +277,6 @@ public class TableOptimizingMetrics {
     }
   }
 
-  public void unregister() {
-    if (globalRegistry != null) {
-      registeredMetricKeys.forEach(globalRegistry::unregister);
-      registeredMetricKeys.clear();
-      globalRegistry = null;
-    }
-  }
-
   /**
    * Handle table self optimizing status change event.
    *
diff --git 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOrphanFilesCleaningMetrics.java
 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOrphanFilesCleaningMetrics.java
index e2e056a5f..cc6b0894b 100644
--- 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOrphanFilesCleaningMetrics.java
+++ 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableOrphanFilesCleaningMetrics.java
@@ -22,28 +22,19 @@ import static 
org.apache.amoro.metrics.MetricDefine.defineCounter;
 
 import org.apache.amoro.ServerTableIdentifier;
 import org.apache.amoro.metrics.Counter;
-import org.apache.amoro.metrics.Metric;
 import org.apache.amoro.metrics.MetricDefine;
-import org.apache.amoro.metrics.MetricKey;
 import org.apache.amoro.server.metrics.MetricRegistry;
-import org.apache.amoro.shade.guava32.com.google.common.collect.ImmutableMap;
-import org.apache.amoro.shade.guava32.com.google.common.collect.Lists;
-
-import java.util.List;
 
 /** Table Orphan Files Cleaning metrics. */
-public class TableOrphanFilesCleaningMetrics {
-
+public class TableOrphanFilesCleaningMetrics extends AbstractTableMetrics {
   private final Counter orphanDataFilesCount = new Counter();
   private final Counter expectedOrphanDataFilesCount = new Counter();
 
   private final Counter orphanMetadataFilesCount = new Counter();
   private final Counter expectedOrphanMetadataFilesCount = new Counter();
 
-  private final ServerTableIdentifier identifier;
-
   public TableOrphanFilesCleaningMetrics(ServerTableIdentifier identifier) {
-    this.identifier = identifier;
+    super(identifier);
   }
 
   public static final MetricDefine TABLE_ORPHAN_CONTENT_FILE_CLEANING_COUNT =
@@ -72,25 +63,8 @@ public class TableOrphanFilesCleaningMetrics {
           .withTags("catalog", "database", "table")
           .build();
 
-  private final List<MetricKey> registeredMetricKeys = Lists.newArrayList();
-  private MetricRegistry globalRegistry;
-
-  private void registerMetric(MetricRegistry registry, MetricDefine define, 
Metric metric) {
-    MetricKey key =
-        registry.register(
-            define,
-            ImmutableMap.of(
-                "catalog",
-                identifier.getCatalog(),
-                "database",
-                identifier.getDatabase(),
-                "table",
-                identifier.getTableName()),
-            metric);
-    registeredMetricKeys.add(key);
-  }
-
-  public void register(MetricRegistry registry) {
+  @Override
+  public void registerMetrics(MetricRegistry registry) {
     if (globalRegistry == null) {
       registerMetric(registry, TABLE_ORPHAN_CONTENT_FILE_CLEANING_COUNT, 
orphanDataFilesCount);
       registerMetric(registry, TABLE_ORPHAN_METADATA_FILE_CLEANING_COUNT, 
orphanMetadataFilesCount);
@@ -115,12 +89,4 @@ public class TableOrphanFilesCleaningMetrics {
     expectedOrphanMetadataFilesCount.inc(expected);
     orphanMetadataFilesCount.inc(cleaned);
   }
-
-  public void unregister() {
-    if (globalRegistry != null) {
-      registeredMetricKeys.forEach(globalRegistry::unregister);
-      registeredMetricKeys.clear();
-      globalRegistry = null;
-    }
-  }
 }
diff --git 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableSummaryMetrics.java
 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableSummaryMetrics.java
index 646610508..07b09a40a 100644
--- 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/TableSummaryMetrics.java
+++ 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/TableSummaryMetrics.java
@@ -22,20 +22,15 @@ import static 
org.apache.amoro.metrics.MetricDefine.defineGauge;
 
 import org.apache.amoro.ServerTableIdentifier;
 import org.apache.amoro.metrics.Gauge;
-import org.apache.amoro.metrics.Metric;
 import org.apache.amoro.metrics.MetricDefine;
-import org.apache.amoro.metrics.MetricKey;
 import org.apache.amoro.optimizing.plan.AbstractOptimizingEvaluator;
 import org.apache.amoro.server.metrics.MetricRegistry;
-import org.apache.amoro.shade.guava32.com.google.common.collect.ImmutableMap;
 import org.apache.amoro.shade.guava32.com.google.common.collect.Lists;
 import org.apache.amoro.table.MixedTable;
 import org.apache.amoro.table.UnkeyedTable;
 
-import java.util.List;
-
 /** Table Summary metrics. */
-public class TableSummaryMetrics {
+public class TableSummaryMetrics extends AbstractTableMetrics {
 
   // table summary files number metrics
   public static final MetricDefine TABLE_SUMMARY_TOTAL_FILES =
@@ -132,34 +127,17 @@ public class TableSummaryMetrics {
           .withTags("catalog", "database", "table")
           .build();
 
-  private final ServerTableIdentifier identifier;
-  private final List<MetricKey> registeredMetricKeys = Lists.newArrayList();
   private AbstractOptimizingEvaluator.PendingInput tableSummary =
       new AbstractOptimizingEvaluator.PendingInput();
-  private MetricRegistry globalRegistry;
 
   private long snapshots = 0L;
 
   public TableSummaryMetrics(ServerTableIdentifier identifier) {
-    this.identifier = identifier;
-  }
-
-  private void registerMetric(MetricRegistry registry, MetricDefine define, 
Metric metric) {
-    MetricKey key =
-        registry.register(
-            define,
-            ImmutableMap.of(
-                "catalog",
-                identifier.getCatalog(),
-                "database",
-                identifier.getDatabase(),
-                "table",
-                identifier.getTableName()),
-            metric);
-    registeredMetricKeys.add(key);
+    super(identifier);
   }
 
-  public void register(MetricRegistry registry) {
+  @Override
+  public void registerMetrics(MetricRegistry registry) {
     if (globalRegistry == null) {
       // register files number metrics
       registerMetric(
@@ -232,14 +210,6 @@ public class TableSummaryMetrics {
     }
   }
 
-  public void unregister() {
-    if (globalRegistry != null) {
-      registeredMetricKeys.forEach(globalRegistry::unregister);
-      registeredMetricKeys.clear();
-      globalRegistry = null;
-    }
-  }
-
   public void refresh(AbstractOptimizingEvaluator.PendingInput tableSummary) {
     if (tableSummary == null) {
       return;

Reply via email to