This is an automated email from the ASF dual-hosted git repository.

szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new be68f84  RATIS-597. Add notifyLeader API in state machine.  
Contributed by Ankit Singhal
be68f84 is described below

commit be68f8490cc063827c9f1a55d16caf269a44bbbc
Author: Tsz Wo Nicholas Sze <[email protected]>
AuthorDate: Thu Jun 20 13:09:28 2019 -0700

    RATIS-597. Add notifyLeader API in state machine.  Contributed by Ankit 
Singhal
---
 .../java/org/apache/ratis/server/impl/LeaderState.java    |  2 +-
 .../java/org/apache/ratis/statemachine/StateMachine.java  |  7 +++++++
 .../apache/ratis/statemachine/RaftSnapshotBaseTest.java   |  4 +++-
 .../ratis/statemachine/SimpleStateMachine4Testing.java    | 15 +++++++++++++++
 4 files changed, 26 insertions(+), 2 deletions(-)

diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java
index 21fbd10..13b7c8e 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java
@@ -225,7 +225,7 @@ public class LeaderState {
     CodeInjectionForTesting.execute(APPEND_PLACEHOLDER,
         server.getId().toString(), null);
     raftLog.append(placeHolder);
-
+    server.getStateMachine().notifyLeader(raftLog.getLastCommittedIndex());
     processor.start();
     senders.forEach(LogAppender::startAppender);
     return placeHolder;
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/statemachine/StateMachine.java 
b/ratis-server/src/main/java/org/apache/ratis/statemachine/StateMachine.java
index 6d2ff5e..19bd9e6 100644
--- a/ratis-server/src/main/java/org/apache/ratis/statemachine/StateMachine.java
+++ b/ratis-server/src/main/java/org/apache/ratis/statemachine/StateMachine.java
@@ -266,4 +266,11 @@ public interface StateMachine extends Closeable {
       RoleInfoProto roleInfoProto, TermIndex firstTermIndexInLog) {
     return CompletableFuture.completedFuture(null);
   }
+
+  /**
+   * Notify the state machine that the raft peer is a leader now.
+   */
+  default void notifyLeader(long lastCommittedIndex){
+  }
+
 }
diff --git 
a/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
 
b/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
index 4f30a50..c54191f 100644
--- 
a/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
+++ 
b/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java
@@ -78,7 +78,9 @@ public abstract class RaftSnapshotBaseTest extends BaseTest {
     Assert.assertTrue(e.hasMetadataEntry());
     Assert.assertEquals(leaderLog.getLastCommittedIndex() - 1, 
e.getMetadataEntry().getCommitIndex());
 
-    final LogEntryProto[] entries = 
SimpleStateMachine4Testing.get(leader).getContent();
+    SimpleStateMachine4Testing simpleStateMachine = 
SimpleStateMachine4Testing.get(leader);
+    Assert.assertTrue("Is not notified as a leader", 
simpleStateMachine.isNotifiedAsLeader());
+    final LogEntryProto[] entries = simpleStateMachine.getContent();
     long message = 0;
     for (int i = 0; i < entries.length; i++) {
       LOG.info("{}) {} {}", i, message, entries[i]);
diff --git 
a/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java
 
b/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java
index 3594429..fdc3c7d 100644
--- 
a/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java
+++ 
b/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java
@@ -50,6 +50,7 @@ import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.EnumMap;
 import java.util.Objects;
@@ -73,6 +74,7 @@ public class SimpleStateMachine4Testing extends 
BaseStateMachine {
   private static final String RAFT_TEST_SIMPLE_STATE_MACHINE_TAKE_SNAPSHOT_KEY
       = "raft.test.simple.state.machine.take.snapshot";
   private static final boolean 
RAFT_TEST_SIMPLE_STATE_MACHINE_TAKE_SNAPSHOT_DEFAULT = false;
+  private boolean notifiedAsLeader;
 
   public static SimpleStateMachine4Testing get(RaftServerImpl s) {
     return (SimpleStateMachine4Testing)s.getStateMachine();
@@ -416,6 +418,19 @@ public class SimpleStateMachine4Testing extends 
BaseStateMachine {
     leaderElectionTimeoutInfo = roleInfoProto;
   }
 
+  @Override public void notifyNotLeader(Collection<TransactionContext> 
pendingEntries)
+      throws IOException {
+
+  }
+
+  @Override public void notifyLeader(long lastCommittedIndex) {
+    notifiedAsLeader = true;
+  }
+
+  public boolean isNotifiedAsLeader() {
+    return notifiedAsLeader;
+  }
+
   protected File getSMdir() {
     return storage.getSmDir();
   }

Reply via email to