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();
}