Make the transferLeader api available for MultiLeaderConsensus (#7449)
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderConsensus.java b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderConsensus.java
index 2a9da3a..2a8792d 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderConsensus.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/multileader/MultiLeaderConsensus.java
@@ -309,12 +309,26 @@
@Override
public ConsensusGenericResponse transferLeader(ConsensusGroupId groupId, Peer newLeader) {
- return ConsensusGenericResponse.newBuilder().setSuccess(false).build();
+ return ConsensusGenericResponse.newBuilder().setSuccess(true).build();
}
@Override
public ConsensusGenericResponse triggerSnapshot(ConsensusGroupId groupId) {
- return ConsensusGenericResponse.newBuilder().setSuccess(false).build();
+ MultiLeaderServerImpl impl = stateMachineMap.get(groupId);
+ if (impl == null) {
+ return ConsensusGenericResponse.newBuilder()
+ .setException(new ConsensusGroupNotExistException(groupId))
+ .build();
+ }
+ try {
+ impl.takeSnapshot();
+ } catch (ConsensusGroupAddPeerException e) {
+ return ConsensusGenericResponse.newBuilder()
+ .setSuccess(false)
+ .setException(new ConsensusException(e.getMessage()))
+ .build();
+ }
+ return ConsensusGenericResponse.newBuilder().setSuccess(true).build();
}
@Override