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 026ae6b5d [AMORO-3754]failed to failover when only one node is alive 
in ha mode #3754 (#3768)
026ae6b5d is described below

commit 026ae6b5d399e886760b28eb25b2c2d894f9572f
Author: Wang Tao <[email protected]>
AuthorDate: Thu Sep 18 16:46:14 2025 +0800

    [AMORO-3754]failed to failover when only one node is alive in ha mode #3754 
(#3768)
    
    * [AMORO-3754]failed to failover when only one node is alive in ha mode 
#3754 #3768
    
    * [AMORO-3754]failed to failover when only one node is alive in ha mode 
#3754 #3768
    
    * stop sync optimize group before dispose
---
 .../main/java/org/apache/amoro/server/AmoroServiceContainer.java | 9 +++++----
 .../java/org/apache/amoro/server/DefaultOptimizingService.java   | 7 +++++--
 .../java/org/apache/amoro/server/table/DefaultTableRuntime.java  | 7 ++++++-
 .../java/org/apache/amoro/server/table/DefaultTableService.java  | 1 +
 amoro-common/src/main/java/org/apache/amoro/TableRuntime.java    | 2 ++
 5 files changed, 19 insertions(+), 7 deletions(-)

diff --git 
a/amoro-ams/src/main/java/org/apache/amoro/server/AmoroServiceContainer.java 
b/amoro-ams/src/main/java/org/apache/amoro/server/AmoroServiceContainer.java
index ddad83834..1f91119fc 100644
--- a/amoro-ams/src/main/java/org/apache/amoro/server/AmoroServiceContainer.java
+++ b/amoro-ams/src/main/java/org/apache/amoro/server/AmoroServiceContainer.java
@@ -205,12 +205,13 @@ public class AmoroServiceContainer {
   }
 
   public void disposeOptimizingService() {
-    if (tableManagementServer != null && tableManagementServer.isServing()) {
-      LOG.info("Stopping table management server...");
+    if (tableManagementServer != null) {
+      LOG.info(
+          "Stopping table management server[serving:{}] ...", 
tableManagementServer.isServing());
       tableManagementServer.stop();
     }
-    if (optimizingServiceServer != null && 
optimizingServiceServer.isServing()) {
-      LOG.info("Stopping optimizing server...");
+    if (optimizingServiceServer != null) {
+      LOG.info("Stopping optimizing server[serving:{}] ...", 
optimizingServiceServer.isServing());
       optimizingServiceServer.stop();
     }
     if (tableService != null) {
diff --git 
a/amoro-ams/src/main/java/org/apache/amoro/server/DefaultOptimizingService.java 
b/amoro-ams/src/main/java/org/apache/amoro/server/DefaultOptimizingService.java
index 56ec18259..9bca292f5 100644
--- 
a/amoro-ams/src/main/java/org/apache/amoro/server/DefaultOptimizingService.java
+++ 
b/amoro-ams/src/main/java/org/apache/amoro/server/DefaultOptimizingService.java
@@ -360,13 +360,16 @@ public class DefaultOptimizingService extends 
StatedPersistentBase
   }
 
   public void dispose() {
+    planExecutor.shutdown();
+    // shutdown sync group first, stop syncing group
+    optimizingConfigWatcher.dispose();
+    // dispose all queues
+    optimizingQueueByGroup.values().forEach(OptimizingQueue::dispose);
     optimizerKeeper.dispose();
     tableHandlerChain.dispose();
     optimizingQueueByGroup.clear();
     optimizingQueueByToken.clear();
     authOptimizers.clear();
-    planExecutor.shutdown();
-    optimizingConfigWatcher.dispose();
   }
 
   @Override
diff --git 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultTableRuntime.java
 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultTableRuntime.java
index ef619aeea..b6d4f8f50 100644
--- 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultTableRuntime.java
+++ 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultTableRuntime.java
@@ -417,10 +417,15 @@ public class DefaultTableRuntime extends 
AbstractTableRuntime
   }
 
   @Override
-  public void dispose() {
+  public void unregisterMetric() {
     tableSummaryMetrics.unregister();
     orphanFilesCleaningMetrics.unregister();
     optimizingMetrics.unregister();
+  }
+
+  @Override
+  public void dispose() {
+    unregisterMetric();
     store()
         .synchronizedInvoke(
             () -> {
diff --git 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultTableService.java
 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultTableService.java
index a427ccfb9..25337e999 100644
--- 
a/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultTableService.java
+++ 
b/amoro-ams/src/main/java/org/apache/amoro/server/table/DefaultTableService.java
@@ -254,6 +254,7 @@ public class DefaultTableService extends PersistentBase 
implements TableService
     if (headHandler != null) {
       headHandler.dispose();
     }
+    tableRuntimeMap.values().forEach(TableRuntime::unregisterMetric);
   }
 
   @VisibleForTesting
diff --git a/amoro-common/src/main/java/org/apache/amoro/TableRuntime.java 
b/amoro-common/src/main/java/org/apache/amoro/TableRuntime.java
index 097d900f6..bf083ab89 100644
--- a/amoro-common/src/main/java/org/apache/amoro/TableRuntime.java
+++ b/amoro-common/src/main/java/org/apache/amoro/TableRuntime.java
@@ -72,6 +72,8 @@ public interface TableRuntime {
    */
   void registerMetric(MetricRegistry metricRegistry);
 
+  void unregisterMetric();
+
   /** Get table format */
   default TableFormat getFormat() {
     return getTableIdentifier().getFormat();

Reply via email to