X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FRaftActorContext.java;h=267a4d2b7e995894d8feb7a36261f24653d59e74;hb=24ace09aacc620fd9768e0a7004e802f9385bcfc;hp=a78b8909503a5ca2b17713635fe9a58ee0dedd46;hpb=cf5be659d906cc80d52647cb516bbab435156742;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorContext.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorContext.java index a78b890950..267a4d2b7e 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorContext.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorContext.java @@ -10,9 +10,16 @@ package org.opendaylight.controller.cluster.raft; import akka.actor.ActorRef; import akka.actor.ActorSelection; +import akka.actor.ActorSystem; import akka.actor.Props; - -import java.util.concurrent.atomic.AtomicLong; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Supplier; +import java.util.Collection; +import javax.annotation.Nullable; +import org.opendaylight.controller.cluster.DataPersistenceProvider; +import org.opendaylight.controller.cluster.raft.behaviors.RaftActorBehavior; +import org.opendaylight.controller.cluster.raft.policy.RaftPolicy; +import org.slf4j.Logger; /** * The RaftActorContext contains that portion of the RaftActors state that @@ -22,15 +29,15 @@ import java.util.concurrent.atomic.AtomicLong; public interface RaftActorContext { /** * Create a new local actor - * @param props - * @return + * @param props + * @return a reference to the newly created actor */ ActorRef actorOf(Props props); /** * Create a actor selection * @param path - * @return + * @return an actor selection for the given actor path */ ActorSelection actorSelection(String path); @@ -38,41 +45,206 @@ public interface RaftActorContext { * Get the identifier for the RaftActor. This identifier represents the * name of the actor whose common state is being shared. For example the * id could be 'inventory' + * * @return the identifier */ String getId(); /** - * A reference to the RaftActor itself. This could be used to send messages + * @return A reference to the RaftActor itself. This could be used to send messages * to the RaftActor - * @return */ ActorRef getActor(); /** - * Get the ElectionTerm information - * @return + * @return the ElectionTerm information */ ElectionTerm getTermInformation(); /** - * index of highest log entry known to be - * committed (initialized to 0, increases - * monotonically) - * @return + * @return index of highest log entry known to be committed (initialized to 0, increases monotonically) */ - AtomicLong getCommitIndex(); + long getCommitIndex(); + /** - * index of highest log entry applied to state - * machine (initialized to 0, increases - * monotonically) - * @return + * @param commitIndex new commit index */ - AtomicLong getLastApplied(); + void setCommitIndex(long commitIndex); + + /** + * @return index of highest log entry applied to state machine (initialized to 0, increases monotonically) + */ + long getLastApplied(); + + + /** + * @param lastApplied the index of the last log entry that was applied to the state + */ + void setLastApplied(long lastApplied); /** * + * @param replicatedLog the replicated log of the current RaftActor + */ + void setReplicatedLog(ReplicatedLog replicatedLog); + + /** + * @return A representation of the log */ ReplicatedLog getReplicatedLog(); + + /** + * @return The ActorSystem associated with this context + */ + ActorSystem getActorSystem(); + + /** + * @return the logger to be used for logging messages to a log file + */ + Logger getLogger(); + + /** + * Get the address of the peer as a String. This is the same format in + * which a consumer would provide the address + * + * @param peerId + * @return The address of the peer or null if the address has not yet been + * resolved + */ + String getPeerAddress(String peerId); + + /** + * @param serverCfgPayload + */ + void updatePeerIds(ServerConfigurationPayload serverCfgPayload); + + /** + * @return list of PeerInfo + */ + Collection getPeers(); + + /** + * @return the list of peer IDs. + */ + Collection getPeerIds(); + + /** + * Get the PeerInfo for the given peer. + * + * @param peerId + * @return the PeerInfo + */ + PeerInfo getPeerInfo(String peerId); + + /** + * Add to actor peers + * + * @param name + * @param address + */ + void addToPeers(String name, String address, VotingState votingState); + + /** + * + * @param name + */ + void removePeer(String name); + + /** + * Given a peerId return the corresponding actor + *

+ * + * + * @param peerId + * @return The actorSelection corresponding to the peer or null if the + * address has not yet been resolved + */ + ActorSelection getPeerActorSelection(String peerId); + + /** + * Set Peer Address can be called at a later time to change the address of + * a known peer. + * + *

+ * Throws an IllegalStateException if the peer is unknown + * + * @param peerId + * @param peerAddress + */ + void setPeerAddress(String peerId, String peerAddress); + + /** + * @return ConfigParams + */ + ConfigParams getConfigParams(); + + /** + * + * @return the SnapshotManager for this RaftActor + */ + SnapshotManager getSnapshotManager(); + + /** + * + * @return the DataPersistenceProvider for this RaftActor + */ + DataPersistenceProvider getPersistenceProvider(); + + /** + * + * @return true if the RaftActor has followers else false + */ + boolean hasFollowers(); + + /** + * + * @return the total memory used by the ReplicatedLog + */ + long getTotalMemory(); + + /** + * + * @param retriever a supplier of the total memory metric + */ + @VisibleForTesting + void setTotalMemoryRetriever(Supplier retriever); + + /** + * + * @return the payload version to be used when replicating data + */ + short getPayloadVersion(); + + /** + * @return an implementation of the RaftPolicy so that the Raft code can be adapted + */ + RaftPolicy getRaftPolicy(); + + /** + * @return true if there are any dynamic server configuration changes available, + * false if static peer configurations are still in use + */ + boolean isDynamicServerConfigurationInUse(); + + /** + * Configures the dynamic server configurations are avaialble for the RaftActor + */ + void setDynamicServerConfigurationInUse(); + + /** + * @return the RaftActor's peer information as a ServerConfigurationPayload if the + * dynamic server configurations are available, otherwise returns null + */ + @Nullable ServerConfigurationPayload getPeerServerInfo(boolean includeSelf); + + /** + * @return true if this RaftActor is a voting member of the cluster, false otherwise. + */ + boolean isVotingMember(); + + /** + * @return current behavior attached to the raft actor. + */ + RaftActorBehavior getCurrentBehavior(); }