From 64b68fb3a2e5cc01f5a168e3864f18ad34fa91df Mon Sep 17 00:00:00 2001 From: qianlei Date: Wed, 29 Mar 2023 16:32:38 +0800 Subject: [PATCH] fix: Change listener to follower or change follower to listener is not supported. --- .../apache/ratis/server/impl/RaftServerImpl.java | 16 ++++++++++++++++ .../ratis/server/impl/LeaderElectionTests.java | 3 +++ 2 files changed, 19 insertions(+) diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java index 9204faf68c..33f6b4b3dc 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java @@ -1245,6 +1245,22 @@ public CompletableFuture setConfigurationAsync(SetConfiguration return pending.getFuture(); } + // change listener to follower or change follower to listener is not supported yet + for (RaftPeer server : serversInNewConf) { + for (RaftPeer currentListener : current.getAllPeers(RaftPeerRole.LISTENER)) { + if (Objects.equals(currentListener.getId(), server.getId())) { + throw new SetConfigurationException("change listener to follower is not supported yet"); + } + } + } + for (RaftPeer listener : listenersInNewConf) { + for (RaftPeer currentServer : current.getAllPeers(RaftPeerRole.FOLLOWER)) { + if (Objects.equals(currentServer.getId(), listener.getId())) { + throw new SetConfigurationException("change follower to listener is not supported yet"); + } + } + } + getRaftServer().addRaftPeers(serversInNewConf); getRaftServer().addRaftPeers(listenersInNewConf); // add staging state into the leaderState diff --git a/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java b/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java index dc22e27436..fcfbcd5ec1 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/impl/LeaderElectionTests.java @@ -44,6 +44,7 @@ import org.apache.ratis.util.TimeDuration; import org.apache.ratis.util.Timestamp; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; @@ -430,6 +431,7 @@ public void testRemoveListener() throws Exception { } @Test + @Ignore("not supported") public void testChangeFollowerToListener() throws Exception { try(final MiniRaftCluster cluster = newCluster(3)) { cluster.start(); @@ -453,6 +455,7 @@ public void testChangeFollowerToListener() throws Exception { } @Test + @Ignore("not supported") public void testChangeListenerToFollower() throws Exception { try(final MiniRaftCluster cluster = newCluster(2, 1)) { cluster.start();