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);