From: Tom Pantelis Date: Sat, 4 Apr 2015 03:27:51 +0000 (-0400) Subject: Bug 2948: Store DataPersistenceProvider in RaftActorContext X-Git-Tag: release/lithium~271^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=1fcab79755eb00756ad947f2369d82efb0b5a55c Bug 2948: Store DataPersistenceProvider in RaftActorContext This will make the DataPersistenceProvider accessible to callers that don't have access to the RaftActor. In particular, the SnapshotManager will need access from the capture method (subsequent patch). The DataPersistenceProvider can't be passed to capture b/c it is also called from AbstractLeader which doesn't have access to the DataPersistenceProvider. With thus change we no longer have to pass the DataPersistenceProvider to the persist and commit methods either. Change-Id: I187901476f2728e4b7f72238e72006c95c188b55 Signed-off-by: Tom Pantelis --- diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java index 2185ffdef3..157a53ed2d 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java @@ -124,7 +124,8 @@ public abstract class RaftActor extends AbstractUntypedPersistentActor { context = new RaftActorContextImpl(this.getSelf(), this.getContext(), id, new ElectionTermImpl(delegatingPersistenceProvider, id, LOG), -1, -1, peerAddresses, - (configParams.isPresent() ? configParams.get(): new DefaultConfigParamsImpl()), LOG); + (configParams.isPresent() ? configParams.get(): new DefaultConfigParamsImpl()), + delegatingPersistenceProvider, LOG); context.setReplicatedLog(ReplicatedLogImpl.newInstance(context, delegatingPersistenceProvider, currentBehavior)); } 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 9f4b7cb482..7198876ca6 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 @@ -15,6 +15,7 @@ import akka.actor.Props; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Supplier; import java.util.Map; +import org.opendaylight.controller.cluster.DataPersistenceProvider; import org.slf4j.Logger; /** @@ -170,6 +171,8 @@ public interface RaftActorContext { SnapshotManager getSnapshotManager(); + DataPersistenceProvider getPersistenceProvider(); + boolean hasFollowers(); long getTotalMemory(); diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorContextImpl.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorContextImpl.java index 684845c270..049b91c416 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorContextImpl.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorContextImpl.java @@ -17,6 +17,7 @@ import akka.actor.UntypedActorContext; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Supplier; import java.util.Map; +import org.opendaylight.controller.cluster.DataPersistenceProvider; import org.slf4j.Logger; public class RaftActorContextImpl implements RaftActorContext { @@ -48,9 +49,11 @@ public class RaftActorContextImpl implements RaftActorContext { // be passed to it in the constructor private SnapshotManager snapshotManager; + private final DataPersistenceProvider persistenceProvider; + public RaftActorContextImpl(ActorRef actor, UntypedActorContext context, String id, ElectionTerm termInformation, long commitIndex, long lastApplied, Map peerAddresses, - ConfigParams configParams, Logger logger) { + ConfigParams configParams, DataPersistenceProvider persistenceProvider, Logger logger) { this.actor = actor; this.context = context; this.id = id; @@ -59,6 +62,7 @@ public class RaftActorContextImpl implements RaftActorContext { this.lastApplied = lastApplied; this.peerAddresses = peerAddresses; this.configParams = configParams; + this.persistenceProvider = persistenceProvider; this.LOG = logger; } @@ -182,4 +186,9 @@ public class RaftActorContextImpl implements RaftActorContext { public boolean hasFollowers() { return getPeerAddresses().keySet().size() > 0; } + + @Override + public DataPersistenceProvider getPersistenceProvider() { + return persistenceProvider; + } } diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MockRaftActorContext.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MockRaftActorContext.java index bab4a33600..adf7778fe7 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MockRaftActorContext.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MockRaftActorContext.java @@ -19,6 +19,8 @@ import com.google.protobuf.GeneratedMessage; import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import org.opendaylight.controller.cluster.DataPersistenceProvider; +import org.opendaylight.controller.cluster.NonPersistentDataProvider; import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload; import org.opendaylight.controller.protobuff.messages.cluster.raft.AppendEntriesMessages; import org.opendaylight.controller.protobuff.messages.cluster.raft.test.MockPayloadMessages; @@ -38,6 +40,7 @@ public class MockRaftActorContext implements RaftActorContext { private ConfigParams configParams; private boolean snapshotCaptureInitiated; private SnapshotManager snapshotManager; + private DataPersistenceProvider persistenceProvider = new NonPersistentDataProvider(); public MockRaftActorContext(){ electionTerm = new ElectionTerm() { @@ -219,6 +222,15 @@ public class MockRaftActorContext implements RaftActorContext { return getPeerAddresses().keySet().size() > 0; } + @Override + public DataPersistenceProvider getPersistenceProvider() { + return persistenceProvider; + } + + public void setPersistenceProvider(DataPersistenceProvider persistenceProvider) { + this.persistenceProvider = persistenceProvider; + } + public static class SimpleReplicatedLog extends AbstractReplicatedLogImpl { @Override public void appendAndPersist( ReplicatedLogEntry replicatedLogEntry) { diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorRecoverySupportTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorRecoverySupportTest.java index 7420fc4e6c..c4e0ef8f5f 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorRecoverySupportTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorRecoverySupportTest.java @@ -60,7 +60,7 @@ public class RaftActorRecoverySupportTest { MockitoAnnotations.initMocks(this); context = new RaftActorContextImpl(null, null, "test", new ElectionTermImpl(mockPersistence, "test", LOG), - -1, -1, Collections.emptyMap(), configParams, LOG); + -1, -1, Collections.emptyMap(), configParams, mockPersistence, LOG); support = new RaftActorRecoverySupport(mockPersistence, context , mockBehavior, mockCohort); diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorSnapshotMessageSupportTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorSnapshotMessageSupportTest.java index 86b90d844d..2ced72c531 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorSnapshotMessageSupportTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorSnapshotMessageSupportTest.java @@ -69,7 +69,7 @@ public class RaftActorSnapshotMessageSupportTest { context = new RaftActorContextImpl(mockRaftActorRef, null, "test", new ElectionTermImpl(mockPersistence, "test", LOG), - -1, -1, Collections.emptyMap(), configParams, LOG) { + -1, -1, Collections.emptyMap(), configParams, mockPersistence, LOG) { @Override public SnapshotManager getSnapshotManager() { return mockSnapshotManager; diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/ReplicatedLogImplTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/ReplicatedLogImplTest.java index 72ccae7626..92e384e19a 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/ReplicatedLogImplTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/ReplicatedLogImplTest.java @@ -31,7 +31,7 @@ import org.mockito.internal.matchers.Same; import org.opendaylight.controller.cluster.DataPersistenceProvider; import org.opendaylight.controller.cluster.raft.MockRaftActorContext.MockPayload; import org.opendaylight.controller.cluster.raft.MockRaftActorContext.MockReplicatedLogEntry; -import org.opendaylight.controller.cluster.raft.RaftActor.DeleteEntries; +import org.opendaylight.controller.cluster.raft.base.messages.DeleteEntries; import org.opendaylight.controller.cluster.raft.behaviors.RaftActorBehavior; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,7 +62,7 @@ public class ReplicatedLogImplTest { context = new RaftActorContextImpl(null, null, "test", new ElectionTermImpl(mockPersistence, "test", LOG), - -1, -1, Collections.emptyMap(), configParams, LOG) { + -1, -1, Collections.emptyMap(), configParams, mockPersistence, LOG) { @Override public SnapshotManager getSnapshotManager() { return mockSnapshotManager;