diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java index 7cbaeeeaec380..87878fb5b13e5 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java @@ -19,7 +19,6 @@ package org.apache.iotdb.confignode.manager; -import java.util.Collections; import org.apache.iotdb.common.rpc.thrift.TDataNodeConfiguration; import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.commons.path.PartialPath; @@ -39,6 +38,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Collections; import java.util.List; /** Manager permission read and operation. */ diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/TriggerManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/TriggerManager.java index 372abdce43000..e1e1905fb6203 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/TriggerManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/TriggerManager.java @@ -19,7 +19,6 @@ package org.apache.iotdb.confignode.manager; -import java.io.IOException; import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation; import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.commons.path.PartialPath; @@ -60,6 +59,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/iot/StabilityTest.java b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/iot/StabilityTest.java index ec6a70189424a..647b659db9e67 100644 --- a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/iot/StabilityTest.java +++ b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/iot/StabilityTest.java @@ -27,8 +27,7 @@ import org.apache.iotdb.consensus.IConsensus; import org.apache.iotdb.consensus.common.Peer; import org.apache.iotdb.consensus.config.ConsensusConfig; -import org.apache.iotdb.consensus.exception.ConsensusException; -import org.apache.iotdb.consensus.exception.ConsensusGroupModifyPeerException; +import org.apache.iotdb.consensus.exception.*; import org.apache.iotdb.consensus.iot.util.TestStateMachine; import org.apache.ratis.util.FileUtils; @@ -41,6 +40,8 @@ import java.io.IOException; import java.util.Collections; +import static org.junit.Assert.assertTrue; + public class StabilityTest { private final ConsensusGroupId dataRegionId = new DataRegionId(1); @@ -49,7 +50,7 @@ public class StabilityTest { private IConsensus consensusImpl; - private final int basePort = 9000; + private final int basePort = 6667; public void constructConsensus() throws IOException { consensusImpl = @@ -84,11 +85,64 @@ public void tearDown() throws IOException { @Test public void allTest() throws Exception { + addConsensusGroup(); + removeConsensusGroup(); peerTest(); + transferLeader(); snapshotTest(); snapshotUpgradeTest(); } + public void addConsensusGroup() { + try { + consensusImpl.createLocalPeer( + dataRegionId, + Collections.singletonList(new Peer(dataRegionId, 1, new TEndPoint("0.0.0.0", 6667)))); + } catch (ConsensusException e) { + Assert.fail(); + } + + try { + consensusImpl.createLocalPeer( + dataRegionId, + Collections.singletonList(new Peer(dataRegionId, 1, new TEndPoint("0.0.0.0", 6667)))); + } catch (ConsensusException e) { + assertTrue(e instanceof ConsensusGroupAlreadyExistException); + } + + try { + consensusImpl.createLocalPeer(dataRegionId, Collections.emptyList()); + } catch (ConsensusException e) { + assertTrue(e instanceof IllegalPeerNumException); + } + + try { + consensusImpl.createLocalPeer( + dataRegionId, + Collections.singletonList(new Peer(dataRegionId, 1, new TEndPoint("0.0.0.1", 6667)))); + } catch (ConsensusException e) { + assertTrue(e instanceof IllegalPeerEndpointException); + } + } + + public void removeConsensusGroup() throws ConsensusException { + try { + consensusImpl.deleteLocalPeer(dataRegionId); + } catch (ConsensusException e) { + assertTrue(e instanceof ConsensusGroupNotExistException); + } + + try { + consensusImpl.createLocalPeer( + dataRegionId, + Collections.singletonList(new Peer(dataRegionId, 1, new TEndPoint("0.0.0.0", 6667)))); + } catch (ConsensusException e) { + Assert.fail(); + } + + consensusImpl.deleteLocalPeer(dataRegionId); + } + public void peerTest() throws Exception { consensusImpl.createLocalPeer( dataRegionId, @@ -106,6 +160,16 @@ public void peerTest() throws Exception { consensusImpl.deleteLocalPeer(dataRegionId); } + public void transferLeader() { + try { + consensusImpl.transferLeader( + dataRegionId, new Peer(dataRegionId, 1, new TEndPoint("0.0.0.0", 6667))); + Assert.fail("Can't transfer leader in SimpleConsensus."); + } catch (ConsensusException e) { + assert true; + } + } + public void snapshotTest() throws IOException, ConsensusException { consensusImpl.createLocalPeer( dataRegionId, diff --git a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/ratis/RatisConsensusTest.java b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/ratis/RatisConsensusTest.java index 850e26f5135ef..07fb82fc53776 100644 --- a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/ratis/RatisConsensusTest.java +++ b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/ratis/RatisConsensusTest.java @@ -27,8 +27,7 @@ import org.apache.iotdb.consensus.common.Peer; import org.apache.iotdb.consensus.common.request.ByteBufferConsensusRequest; import org.apache.iotdb.consensus.config.RatisConfig; -import org.apache.iotdb.consensus.exception.ConsensusException; -import org.apache.iotdb.consensus.exception.ConsensusGroupAlreadyExistException; +import org.apache.iotdb.consensus.exception.*; import org.apache.iotdb.rpc.TSStatusCode; import org.apache.ratis.util.TimeDuration; @@ -135,6 +134,11 @@ public void addMemberToGroup() throws Exception { @Test public void removeMemberFromGroup() throws Exception { + try { + servers.get(0).deleteLocalPeer(group.getGroupId()); + } catch (ConsensusException e) { + Assert.assertTrue(e instanceof ConsensusGroupNotExistException); + } servers.get(0).createLocalPeer(group.getGroupId(), group.getPeers()); servers.get(1).createLocalPeer(group.getGroupId(), group.getPeers()); servers.get(2).createLocalPeer(group.getGroupId(), group.getPeers()); @@ -152,15 +156,35 @@ public void removeMemberFromGroup() throws Exception { @Test public void oneMemberGroupChange() throws Exception { + try { + servers.get(0).addRemotePeer(group.getGroupId(), peers.get(0)); + } catch (ConsensusException e) { + Assert.assertTrue(e instanceof ConsensusGroupNotExistException); + } servers.get(0).createLocalPeer(group.getGroupId(), peers.subList(0, 1)); doConsensus(servers.get(0), group.getGroupId(), 10, 10); servers.get(1).createLocalPeer(group.getGroupId(), Collections.emptyList()); servers.get(0).addRemotePeer(group.getGroupId(), peers.get(1)); + try { + servers.get(0).addRemotePeer(group.getGroupId(), peers.get(1)); + } catch (ConsensusException e) { + Assert.assertTrue(e instanceof PeerAlreadyInConsensusGroupException); + } servers.get(1).transferLeader(group.getGroupId(), peers.get(1)); servers.get(0).removeRemotePeer(group.getGroupId(), peers.get(0)); + try { + servers.get(0).removeRemotePeer(group.getGroupId(), peers.get(0)); + } catch (ConsensusException e) { + Assert.assertTrue(e instanceof PeerNotInConsensusGroupException); + } Assert.assertEquals(servers.get(1).getLeader(gid).getNodeId(), peers.get(1).getNodeId()); servers.get(0).deleteLocalPeer(group.getGroupId()); + try { + servers.get(0).removeRemotePeer(group.getGroupId(), peers.get(0)); + } catch (ConsensusException e) { + Assert.assertTrue(e instanceof ConsensusGroupNotExistException); + } } @Test diff --git a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/simple/SimpleConsensusTest.java b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/simple/SimpleConsensusTest.java index 8dcf3aa61815c..61857d5685961 100644 --- a/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/simple/SimpleConsensusTest.java +++ b/iotdb-core/consensus/src/test/java/org/apache/iotdb/consensus/simple/SimpleConsensusTest.java @@ -169,7 +169,7 @@ public void addConsensusGroup() { dataRegionId, Collections.singletonList(new Peer(dataRegionId, 1, new TEndPoint("0.0.0.0", 6667)))); } catch (ConsensusException e) { - throw new RuntimeException(e); + Assert.fail(); } try { @@ -203,7 +203,7 @@ public void addConsensusGroup() { schemaRegionId, Collections.singletonList(new Peer(schemaRegionId, 1, new TEndPoint("0.0.0.0", 6667)))); } catch (ConsensusException e) { - throw new RuntimeException(e); + Assert.fail(); } } @@ -220,7 +220,7 @@ public void removeConsensusGroup() throws ConsensusException { dataRegionId, Collections.singletonList(new Peer(dataRegionId, 1, new TEndPoint("0.0.0.0", 6667)))); } catch (ConsensusException e) { - throw new RuntimeException(e); + Assert.fail(); } consensusImpl.deleteLocalPeer(dataRegionId); @@ -283,12 +283,12 @@ public void write() throws ConsensusException { consensusImpl.createLocalPeer( configId, Collections.singletonList(new Peer(configId, 1, new TEndPoint("0.0.0.0", 6667)))); - // test new TestStateMachine(true), should return 1; + // test new TestStateMachine(false), should return -1; TSStatus response4 = consensusImpl.write(dataRegionId, entry1); assertNotNull(response4); assertEquals(-1, response4.getCode()); - // test new TestStateMachine(false), should return -1; + // test new TestStateMachine(true), should return 1; TSStatus response5 = consensusImpl.write(schemaRegionId, entry1); assertNotNull(response5); assertEquals(1, response5.getCode());