import java.util.Map;
import java.util.Optional;
import java.util.Set;
+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.FileBackedOutputStreamFactory;
+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.persisted.ServerInfo;
private Optional<Cluster> cluster;
+ private final Consumer<ApplyState> applyStateConsumer;
+
+ private final FileBackedOutputStreamFactory fileBackedOutputStreamFactory;
+
+ private RaftActorLeadershipTransferCohort leadershipTransferCohort;
+
public RaftActorContextImpl(ActorRef actor, ActorContext context, String id,
- ElectionTerm termInformation, long commitIndex, long lastApplied, Map<String, String> peerAddresses,
- ConfigParams configParams, DataPersistenceProvider persistenceProvider, Logger logger) {
+ @Nonnull ElectionTerm termInformation, long commitIndex, long lastApplied,
+ @Nonnull Map<String, String> peerAddresses,
+ @Nonnull ConfigParams configParams, @Nonnull DataPersistenceProvider persistenceProvider,
+ @Nonnull Consumer<ApplyState> applyStateConsumer, @Nonnull Logger logger) {
this.actor = actor;
this.context = context;
this.id = id;
- this.termInformation = termInformation;
+ this.termInformation = Preconditions.checkNotNull(termInformation);
this.commitIndex = commitIndex;
this.lastApplied = lastApplied;
- this.configParams = configParams;
- this.persistenceProvider = persistenceProvider;
- this.log = logger;
+ this.configParams = Preconditions.checkNotNull(configParams);
+ this.persistenceProvider = Preconditions.checkNotNull(persistenceProvider);
+ this.log = Preconditions.checkNotNull(logger);
+ this.applyStateConsumer = Preconditions.checkNotNull(applyStateConsumer);
+
+ fileBackedOutputStreamFactory = new FileBackedOutputStreamFactory(
+ configParams.getFileBackedStreamingThreshold(), configParams.getTempFileDirectory());
- for (Map.Entry<String, String> e: peerAddresses.entrySet()) {
+ for (Map.Entry<String, String> e: Preconditions.checkNotNull(peerAddresses).entrySet()) {
peerInfoMap.put(e.getKey(), new PeerInfo(e.getKey(), e.getValue(), VotingState.VOTING));
}
}
@Override
public void setLastApplied(long lastApplied) {
+ log.debug("{}: Moving last applied index from {} to {}", id, this.lastApplied, lastApplied);
this.lastApplied = lastApplied;
}
this.currentBehavior = Preconditions.checkNotNull(behavior);
}
+ @Override
+ public Consumer<ApplyState> getApplyStateConsumer() {
+ return applyStateConsumer;
+ }
+
+ @Override
+ public FileBackedOutputStreamFactory getFileBackedOutputStreamFactory() {
+ return fileBackedOutputStreamFactory;
+ }
+
@SuppressWarnings("checkstyle:IllegalCatch")
void close() {
if (currentBehavior != null) {
}
}
}
+
+ @Override
+ @Nullable
+ public RaftActorLeadershipTransferCohort getRaftActorLeadershipTransferCohort() {
+ return leadershipTransferCohort;
+ }
+
+ @Override
+ public void setRaftActorLeadershipTransferCohort(
+ @Nullable RaftActorLeadershipTransferCohort leadershipTransferCohort) {
+ this.leadershipTransferCohort = leadershipTransferCohort;
+ }
}