X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FRaftActorContext.java;h=1d59ed1f85da6b5d572d71bbe550ac608eea2ec0;hp=175654a6c3fe594a4f7fe848aa2768885f4b4b05;hb=d796a8de8b208ca24bb57aebfc689f8be8bc2c7b;hpb=81236f34ad88ffcb71c8d7cdb15b82bad2e50251 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 175654a6c3..1d59ed1f85 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 @@ -12,10 +12,20 @@ import akka.actor.ActorRef; import akka.actor.ActorSelection; import akka.actor.ActorSystem; import akka.actor.Props; +import akka.cluster.Cluster; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Supplier; -import java.util.Map; +import java.util.Collection; +import java.util.Optional; +import java.util.function.Consumer; +import java.util.function.LongSupplier; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.controller.cluster.DataPersistenceProvider; +import org.opendaylight.controller.cluster.io.FileBackedOutputStream; +import org.opendaylight.controller.cluster.raft.base.messages.ApplyState; +import org.opendaylight.controller.cluster.raft.behaviors.RaftActorBehavior; +import org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload; +import org.opendaylight.controller.cluster.raft.policy.RaftPolicy; import org.slf4j.Logger; /** @@ -25,174 +35,304 @@ import org.slf4j.Logger; */ public interface RaftActorContext { /** - * Create a new local actor - * @param props - * @return a reference to the newly created actor + * Creates a new local actor. + * + * @param props the Props used to create the actor. + * @return a reference to the newly created actor. */ ActorRef actorOf(Props props); /** - * Create a actor selection - * @param path - * @return an actor selection for the given actor path + * Creates an actor selection. + * + * @param path the path. + * @return an actor selection for the given actor path. */ ActorSelection actorSelection(String path); /** - * 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' + * Returns the identifier for the RaftActor. This identifier represents the + * name of the actor whose common state is being shared. * * @return the identifier */ String getId(); /** - * @return A reference to the RaftActor itself. This could be used to send messages - * to the RaftActor + * Returns the reference to the RaftActor. + * + * @return the reference to the RaftActor itself. This can be used to send messages to the RaftActor */ ActorRef getActor(); /** - * @return the ElectionTerm information + * The akka Cluster singleton for the actor system if one is configured. + * + * @return an Optional containing the Cluster instance is present. */ + Optional getCluster(); + + /** + * Returns the current ElectionTerm information. + * + * @return the ElectionTerm. + */ + @Nonnull ElectionTerm getTermInformation(); /** - * @return index of highest log entry known to be committed (initialized to 0, increases monotonically) + * Returns the index of highest log entry known to be committed. + * + * @return index of highest log entry known to be committed. */ long getCommitIndex(); /** + * Sets the index of highest log entry known to be committed. + * * @param commitIndex new commit index */ void setCommitIndex(long commitIndex); /** - * @return index of highest log entry applied to state machine (initialized to 0, increases monotonically) + * Returns index of highest log entry applied to state machine. + * + * @return index of highest log entry applied to state machine. */ long getLastApplied(); - /** - * @param lastApplied the index of the last log entry that was applied to the state + * Sets index of highest log entry applied to state machine. + * + * @param lastApplied the new applied index. */ void setLastApplied(long lastApplied); /** + * Sets the ReplicatedLog instance. * - * @param replicatedLog the replicated log of the current RaftActor + * @param replicatedLog the ReplicatedLog instance. */ - void setReplicatedLog(ReplicatedLog replicatedLog); + void setReplicatedLog(@Nonnull ReplicatedLog replicatedLog); /** - * @return A representation of the log + * Returns the ReplicatedLog instance. + * + * @return the ReplicatedLog instance. */ + @Nonnull ReplicatedLog getReplicatedLog(); /** - * @return The ActorSystem associated with this context + * Returns the The ActorSystem associated with this context. + * + * @return the ActorSystem. */ + @Nonnull ActorSystem getActorSystem(); /** - * @return the logger to be used for logging messages to a log file + * Returns the logger to be used for logging messages. + * + * @return the logger. */ + @Nonnull Logger getLogger(); /** - * @return a mapping of peerId's to their addresses + * Gets the address of a peer as a String. This is the same format in which a consumer would provide the address. * + * @param peerId the id of the peer. + * @return the address of the peer or null if the address has not yet been resolved. */ - Map getPeerAddresses(); + @Nullable + String getPeerAddress(String peerId); /** - * Get the address of the peer as a String. This is the same format in - * which a consumer would provide the address + * Updates the peers and information to match the given ServerConfigurationPayload. * - * @param peerId - * @return The address of the peer or null if the address has not yet been - * resolved + * @param serverCfgPayload the ServerConfigurationPayload. */ - String getPeerAddress(String peerId); + void updatePeerIds(ServerConfigurationPayload serverCfgPayload); /** - * Add to actor peers + * Returns the PeerInfo instances for each peer. * - * @param name - * @param address + * @return list of PeerInfo */ - void addToPeers(String name, String address); + @Nonnull + Collection getPeers(); /** + * Returns the id's for each peer. * - * @param name + * @return the list of peer id's. */ - void removePeer(String name); + @Nonnull + Collection getPeerIds(); /** - * Given a peerId return the corresponding actor - *

+ * Returns the PeerInfo for the given peer. * + * @param peerId the id of the peer + * @return the PeerInfo or null if not found + */ + @Nullable + PeerInfo getPeerInfo(String peerId); + + /** + * Adds a new peer. * - * @param peerId - * @return The actorSelection corresponding to the peer or null if the - * address has not yet been resolved + * @param id the id of the new peer. + * @param address the address of the new peer. + * @param votingState the VotingState of the new peer. */ - ActorSelection getPeerActorSelection(String peerId); + void addToPeers(String id, String address, VotingState votingState); + + /** + * Removes a peer. + * + * @param id the id of the peer to remove. + */ + void removePeer(String id); /** - * Set Peer Address can be called at a later time to change the address of - * a known peer. + * Returns an ActorSelection for a peer. * - *

- * Throws an IllegalStateException if the peer is unknown + * @param peerId the id of the peer. + * @return the actorSelection corresponding to the peer or null if the address has not yet been resolved. + */ + @Nullable + ActorSelection getPeerActorSelection(String peerId); + + /** + * Sets the address of a peer. * - * @param peerId - * @param peerAddress + * @param peerId the id of the peer. + * @param peerAddress the address of the peer. */ void setPeerAddress(String peerId, String peerAddress); /** - * @return ConfigParams + * Returns the ConfigParams instance. + * + * @return the ConfigParams instance. */ + @Nonnull ConfigParams getConfigParams(); /** + * Returns the SnapshotManager instance. * - * @return the SnapshotManager for this RaftActor + * @return the SnapshotManager instance. */ + @Nonnull SnapshotManager getSnapshotManager(); /** + * Returns the DataPersistenceProvider instance. * - * @return the DataPersistenceProvider for this RaftActor + * @return the DataPersistenceProvider instance. */ + @Nonnull DataPersistenceProvider getPersistenceProvider(); /** + * Determines if there are any peer followers. * - * @return true if the RaftActor has followers else false + * @return true if there are followers otherwise false. */ boolean hasFollowers(); /** + * Returns the total available memory for use in calculations. Normally this returns JVM's max memory but can be + * overridden for unit tests. * - * @return the total memory used by the ReplicatedLog + * @return the total memory. */ long getTotalMemory(); /** + * Sets the retriever of the total memory metric. * - * @param retriever a supplier of the total memory metric + * @param retriever a supplier of the total memory metric. */ @VisibleForTesting - void setTotalMemoryRetriever(Supplier retriever); + void setTotalMemoryRetriever(LongSupplier retriever); /** + * Returns the payload version to be used when replicating data. * - * @return the payload version to be used when replicating data + * @return the payload version. */ short getPayloadVersion(); + + /** + * Returns the RaftPolicy used to determine certain Raft behaviors. + * + * @return the RaftPolicy instance. + */ + @Nonnull + RaftPolicy getRaftPolicy(); + + /** + * Determines if there have been any dynamic server configuration changes applied. + * + * @return true if dynamic server configuration changes have been applied, false otherwise, meaning that static + * peer configuration is still in use. + */ + boolean isDynamicServerConfigurationInUse(); + + /** + * Sets that dynamic server configuration changes have been applied. + */ + void setDynamicServerConfigurationInUse(); + + /** + * Returns the peer information as a ServerConfigurationPayload if dynamic server configurations have been applied. + * + * @param includeSelf include this peer's info. + * @return the peer information as a ServerConfigurationPayload or null if no dynamic server configurations have + * been applied. + */ + @Nullable + ServerConfigurationPayload getPeerServerInfo(boolean includeSelf); + + /** + * Determines if this peer is a voting member of the cluster. + * + * @return true if this peer is a voting member, false otherwise. + */ + boolean isVotingMember(); + + /** + * Determines if there are any voting peers. + * + * @return true if there are any voting peers, false otherwise. + */ + boolean anyVotingPeers(); + + /** + * Returns the current behavior attached to the RaftActor. + * + * @return current behavior. + */ + RaftActorBehavior getCurrentBehavior(); + + /** + * Returns the consumer of ApplyState operations. This is invoked by a behavior when a log entry needs to be + * applied to the state. + * + * @return the Consumer + */ + Consumer getApplyStateConsumer(); + + /** + * Creates a FileBackedOutputStream with a common configuration. + * + * @return a FileBackedOutputStream instance + */ + @Nonnull + FileBackedOutputStream newFileBackedOutputStream(); }