You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fluss.apache.org by yu...@apache.org on 2026/03/17 01:02:10 UTC
(fluss) branch main updated: [server] Still do remove server tag if tablet server not exist (#2883)
This is an automated email from the ASF dual-hosted git repository.
yunhong pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fluss.git
The following commit(s) were added to refs/heads/main by this push:
new 7b9438f7a [server] Still do remove server tag if tablet server not exist (#2883)
7b9438f7a is described below
commit 7b9438f7a9fb270bd94e022c57ffb573a192cedf
Author: xiaozhou <wh...@alibaba-inc.com>
AuthorDate: Tue Mar 17 09:02:05 2026 +0800
[server] Still do remove server tag if tablet server not exist (#2883)
---
.../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 a923679dc..637d0ea81 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
@@ -71,9 +71,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;
@@ -1626,20 +1628,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 909fa503d..2bc6064c0 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);