Further Guava Optional cleanups
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / behaviors / RaftActorBehavior.java
index ca2d916ecf619ae61b8b627c2e10181d075a187a..ed02706f3e8c4747fb05fb0c6415aaa40f135127 100644 (file)
@@ -5,48 +5,73 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.controller.cluster.raft.behaviors;
 
 import akka.actor.ActorRef;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.raft.RaftState;
 
 /**
- * A RaftActorBehavior represents the specific behavior of a RaftActor
- * <p>
- * A RaftActor can behave as one of the following,
- * <ul>
- *     <li> Follower </li>
- *     <li> Candidate </li>
- *     <li> Leader </li>
- * </ul>
- * <p>
- * In each of these behaviors the Raft Actor handles the same Raft messages
- * differently.
+ * The interface for a class that implements a specific behavior of a RaftActor. The types of behaviors are enumerated
+ * by {@link RaftState}. Each handles the same Raft messages differently.
  */
-public interface RaftActorBehavior extends AutoCloseable{
+public interface RaftActorBehavior extends AutoCloseable {
+
     /**
      * Handle a message. If the processing of the message warrants a state
-     * change then a new state should be returned otherwise this method should
-     * return the state for the current behavior.
+     * change then a new behavior should be returned otherwise this method should
+     * return the current behavior.
      *
      * @param sender The sender of the message
      * @param message A message that needs to be processed
      *
-     * @return The new state or self (this)
+     * @return The new behavior or current behavior, or null if the message was not handled.
      */
-    RaftState handleMessage(ActorRef sender, Object message);
+    @Nullable RaftActorBehavior handleMessage(ActorRef sender, Object message);
 
     /**
-     * The state associated with a given behavior
+     * Returns the state associated with this behavior.
      *
-     * @return
+     * @return the RaftState
      */
     RaftState state();
 
     /**
+     * Returns the id of the leader.
+     *
+     * @return the id of the leader or null if not known
+     */
+    @Nullable String getLeaderId();
+
+    /**
+     * Sets the index of the last log entry that has been replicated to all peers.
+     *
+     * @param replicatedToAllIndex the index
+     */
+    void setReplicatedToAllIndex(long replicatedToAllIndex);
+
+    /**
+     * Returns the index of the last log entry that has been replicated to all peers.
      *
-     * @return
+     * @return the index or -1 if not known
      */
-    String getLeaderId();
+    long getReplicatedToAllIndex();
+
+    /**
+     * Returns the leader's payload data version.
+     *
+     * @return a short representing the version
+     */
+    short getLeaderPayloadVersion();
+
+    /**
+     * Closes the current behavior and switches to the specified behavior, if possible.
+     *
+     * @param behavior the new behavior to switch to
+     * @return the new behavior
+     */
+    RaftActorBehavior switchBehavior(RaftActorBehavior behavior);
+
+    @Override
+    void close();
 }