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

yunhong pushed a commit to branch release-0.9
in repository https://gitbox.apache.org/repos/asf/fluss.git


The following commit(s) were added to refs/heads/release-0.9 by this push:
     new 5af42c96c [server] Still do remove server tag if tablet server not 
exist (#2884)
5af42c96c is described below

commit 5af42c96c308e39522cb4c156ead49ffda928219
Author: xiaozhou <[email protected]>
AuthorDate: Tue Mar 17 11:04:56 2026 +0800

    [server] Still do remove server tag if tablet server not exist (#2884)
---
 .../fluss/client/admin/FlussAdminITCase.java       | 25 ++++++++++++++--------
 .../coordinator/CoordinatorEventProcessor.java     | 10 ++++-----
 2 files changed, 20 insertions(+), 15 deletions(-)

diff --git 
a/fluss-client/src/test/java/org/apache/fluss/client/admin/FlussAdminITCase.java
 
b/fluss-client/src/test/java/org/apache/fluss/client/admin/FlussAdminITCase.java
index 2ae715fe0..2d1416409 100644
--- 
a/fluss-client/src/test/java/org/apache/fluss/client/admin/FlussAdminITCase.java
+++ 
b/fluss-client/src/test/java/org/apache/fluss/client/admin/FlussAdminITCase.java
@@ -70,9 +70,11 @@ import org.apache.fluss.metadata.TableChange;
 import org.apache.fluss.metadata.TableDescriptor;
 import org.apache.fluss.metadata.TableInfo;
 import org.apache.fluss.metadata.TablePath;
+import org.apache.fluss.server.coordinator.CoordinatorContext;
 import org.apache.fluss.server.kv.snapshot.CompletedSnapshot;
 import org.apache.fluss.server.kv.snapshot.KvSnapshotHandle;
 import org.apache.fluss.server.log.LogTablet;
+import org.apache.fluss.server.metadata.ServerInfo;
 import org.apache.fluss.server.replica.Replica;
 import org.apache.fluss.server.zk.ZooKeeperClient;
 import org.apache.fluss.server.zk.data.ServerTags;
@@ -1611,20 +1613,25 @@ class FlussAdminITCase extends ClientToServerITCaseBase 
{
                 .containsEntry(1, ServerTag.PERMANENT_OFFLINE);
 
         // 4.remove server tag for server 100
-        assertThatThrownBy(
-                        () ->
-                                admin.removeServerTag(
-                                                Collections.singletonList(100),
-                                                ServerTag.PERMANENT_OFFLINE)
-                                        .get())
-                .cause()
-                .isInstanceOf(ServerNotExistException.class)
-                .hasMessageContaining("Server 100 not exists when trying to 
removing server tag.");
+        admin.removeServerTag(Collections.singletonList(100), 
ServerTag.PERMANENT_OFFLINE).get();
 
         // 5.remove server tag for server 0,1.
+
+        // should remove server tag successfully even we remove live tablet 
server from context
+        CoordinatorContext coordinatorContext =
+                FLUSS_CLUSTER_EXTENSION
+                        .getCoordinatorServer()
+                        .getCoordinatorEventProcessor()
+                        .getCoordinatorContext();
+        ServerInfo tmpServerInfo = 
coordinatorContext.getLiveTabletServers().get(0);
+        coordinatorContext.removeLiveTabletServer(0);
+
         admin.removeServerTag(Arrays.asList(0, 1), 
ServerTag.PERMANENT_OFFLINE).get();
         assertThat(zkClient.getServerTags()).isNotPresent();
 
+        // restore after test, or else will influence other tests
+        coordinatorContext.addLiveTabletServer(tmpServerInfo);
+
         // 6.remove server tag for server 2. error will be thrown and tag for 
2 will not be removed
         // as the removed server tag is not equals with the exists one.
         admin.addServerTag(Collections.singletonList(2), 
ServerTag.TEMPORARY_OFFLINE).get();
diff --git 
a/fluss-server/src/main/java/org/apache/fluss/server/coordinator/CoordinatorEventProcessor.java
 
b/fluss-server/src/main/java/org/apache/fluss/server/coordinator/CoordinatorEventProcessor.java
index 511132e29..a0bbc275f 100644
--- 
a/fluss-server/src/main/java/org/apache/fluss/server/coordinator/CoordinatorEventProcessor.java
+++ 
b/fluss-server/src/main/java/org/apache/fluss/server/coordinator/CoordinatorEventProcessor.java
@@ -1177,16 +1177,14 @@ public class CoordinatorEventProcessor implements 
EventProcessor {
         List<Integer> serverIds = event.getServerIds();
         ServerTag serverTag = event.getServerTag();
 
-        // Verify that dose serverTag not exist for input serverIds. If the 
server tag does not
+        // Verify that does serverTag not exist for input serverIds. If the 
server tag does not
         // exist for any one of the tabletServers, throw an error and none of 
them will be removed
-        // form coordinatorContext and zk.
+        // from coordinatorContext and zk.
         Map<Integer, ServerInfo> liveTabletServers = 
coordinatorContext.getLiveTabletServers();
         for (Integer serverId : serverIds) {
             if (!liveTabletServers.containsKey(serverId)) {
-                throw new ServerNotExistException(
-                        String.format(
-                                "Server %s not exists when trying to removing 
server tag.",
-                                serverId));
+                // maybe tablet server not exists, still do remove server tag
+                LOG.info("Server {} not exists when trying to removing server 
tag.", serverId);
             }
 
             Optional<ServerTag> existServerTagOpt = 
coordinatorContext.getServerTag(serverId);

Reply via email to