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 <[email protected]>
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);