From 93e6f3bfc003d4ce2d968761dff963615a0b799d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 6 Jun 2016 15:22:32 +0200 Subject: [PATCH 1/1] Remove use of {String,UUID}Identifier These classes do not provide an exact identity, derive proper identities from Abstract{String,UIID}Identifier instead. Change-Id: I9f607fdf468206211137a6dee196725f65274578 Signed-off-by: Robert Varga --- .../controller/cluster/example/ExampleActor.java | 11 +++++++++-- .../raft/RaftActorServerConfigurationSupport.java | 12 ++++++++++-- .../controller/cluster/raft/AbstractActorTest.java | 10 +++++++++- .../raft/AbstractRaftActorIntegrationTest.java | 14 +++++++++++--- .../controller/cluster/raft/RaftActorTest.java | 5 ++--- .../cluster/raft/behaviors/LeaderTest.java | 11 +++++------ 6 files changed, 46 insertions(+), 17 deletions(-) diff --git a/opendaylight/md-sal/sal-akka-raft-example/src/main/java/org/opendaylight/controller/cluster/example/ExampleActor.java b/opendaylight/md-sal/sal-akka-raft-example/src/main/java/org/opendaylight/controller/cluster/example/ExampleActor.java index ff57bfd1d5..2523a640b2 100644 --- a/opendaylight/md-sal/sal-akka-raft-example/src/main/java/org/opendaylight/controller/cluster/example/ExampleActor.java +++ b/opendaylight/md-sal/sal-akka-raft-example/src/main/java/org/opendaylight/controller/cluster/example/ExampleActor.java @@ -34,12 +34,19 @@ import org.opendaylight.controller.cluster.raft.base.messages.CaptureSnapshotRep import org.opendaylight.controller.cluster.raft.behaviors.Leader; import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload; import org.opendaylight.yangtools.concepts.Identifier; -import org.opendaylight.yangtools.util.StringIdentifier; +import org.opendaylight.yangtools.util.AbstractStringIdentifier; /** * A sample actor showing how the RaftActor is to be extended */ public class ExampleActor extends RaftActor implements RaftActorRecoveryCohort, RaftActorSnapshotCohort { + private static final class PayloadIdentifier extends AbstractStringIdentifier { + private static final long serialVersionUID = 1L; + + PayloadIdentifier(final long identifier) { + super(String.valueOf(identifier)); + } + } private final Map state = new HashMap<>(); @@ -63,7 +70,7 @@ public class ExampleActor extends RaftActor implements RaftActorRecoveryCohort, protected void handleNonRaftCommand(Object message) { if(message instanceof KeyValue){ if(isLeader()) { - persistData(getSender(), new StringIdentifier(String.valueOf(persistIdentifier++)), (Payload) message); + persistData(getSender(), new PayloadIdentifier(persistIdentifier++), (Payload) message); } else { if(getLeader() != null) { getLeader().forward(message, getContext()); diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java index f76c7d70d5..bbc692e885 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java @@ -36,7 +36,7 @@ import org.opendaylight.controller.cluster.raft.messages.ServerRemoved; import org.opendaylight.controller.cluster.raft.messages.UnInitializedFollowerSnapshotReply; import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload; import org.opendaylight.yangtools.concepts.Identifier; -import org.opendaylight.yangtools.util.UUIDIdentifier; +import org.opendaylight.yangtools.util.AbstractUUIDIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.duration.FiniteDuration; @@ -524,6 +524,14 @@ class RaftActorServerConfigurationSupport { } } + private static final class ServerOperationContextIdentifier extends AbstractUUIDIdentifier { + private static final long serialVersionUID = 1L; + + ServerOperationContextIdentifier() { + super(UUID.randomUUID()); + } + } + /** * Stores context information for a server operation. * @@ -537,7 +545,7 @@ class RaftActorServerConfigurationSupport { ServerOperationContext(T operation, ActorRef clientRequestor){ this.operation = operation; this.clientRequestor = clientRequestor; - contextId = new UUIDIdentifier(UUID.randomUUID()); + contextId = new ServerOperationContextIdentifier(); } Identifier getContextId() { diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractActorTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractActorTest.java index ec53815469..62e2ebd20b 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractActorTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractActorTest.java @@ -13,11 +13,19 @@ import akka.testkit.JavaTestKit; import org.apache.commons.io.FileUtils; import org.junit.AfterClass; import org.junit.BeforeClass; - +import org.opendaylight.yangtools.util.AbstractStringIdentifier; import java.io.File; import java.io.IOException; public abstract class AbstractActorTest { + protected static final class MockIdentifier extends AbstractStringIdentifier { + private static final long serialVersionUID = 1L; + + public MockIdentifier(final String string) { + super(string); + } + } + private static ActorSystem system; @BeforeClass diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractRaftActorIntegrationTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractRaftActorIntegrationTest.java index ab44654b6f..0b072e67f5 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractRaftActorIntegrationTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractRaftActorIntegrationTest.java @@ -36,7 +36,7 @@ import org.opendaylight.controller.cluster.raft.utils.InMemoryJournal; import org.opendaylight.controller.cluster.raft.utils.InMemorySnapshotStore; import org.opendaylight.controller.cluster.raft.utils.MessageCollectorActor; import org.opendaylight.yangtools.concepts.Identifier; -import org.opendaylight.yangtools.util.StringIdentifier; +import org.opendaylight.yangtools.util.AbstractStringIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.duration.FiniteDuration; @@ -48,6 +48,14 @@ import scala.concurrent.duration.FiniteDuration; */ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest { + private static final class MockIdentifier extends AbstractStringIdentifier { + private static final long serialVersionUID = 1L; + + protected MockIdentifier(String string) { + super(string); + } + } + public static class SetPeerAddress { private final String peerId; private final String peerAddress; @@ -92,7 +100,7 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest public void handleCommand(Object message) { if(message instanceof MockPayload) { MockPayload payload = (MockPayload)message; - super.persistData(collectorActor, new StringIdentifier(payload.toString()), payload); + super.persistData(collectorActor, new MockIdentifier(payload.toString()), payload); return; } @@ -297,7 +305,7 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest String expId, long expTerm, long expIndex, MockPayload payload) { assertEquals("ApplyState getClientActor", expClientActor, applyState.getClientActor()); - final Identifier id = expId == null ? null : new StringIdentifier(expId); + final Identifier id = expId == null ? null : new MockIdentifier(expId); assertEquals("ApplyState getIdentifier", id, applyState.getIdentifier()); ReplicatedLogEntry replicatedLogEntry = applyState.getReplicatedLogEntry(); verifyReplicatedLogEntry(replicatedLogEntry, expTerm, expIndex, payload); diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorTest.java index 7457e71c66..48b555faff 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorTest.java @@ -86,7 +86,6 @@ import org.opendaylight.controller.cluster.raft.utils.InMemoryJournal; import org.opendaylight.controller.cluster.raft.utils.InMemorySnapshotStore; import org.opendaylight.controller.cluster.raft.utils.MessageCollectorActor; import org.opendaylight.yangtools.concepts.Identifier; -import org.opendaylight.yangtools.util.StringIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.duration.Duration; @@ -440,7 +439,7 @@ public class RaftActorTest extends AbstractActorTest { ReplicatedLogEntry entry = new MockRaftActorContext.MockReplicatedLogEntry(1, 5, new MockRaftActorContext.MockPayload("F")); - final Identifier id = new StringIdentifier("apply-state"); + final Identifier id = new MockIdentifier("apply-state"); mockRaftActor.onReceiveCommand(new ApplyState(mockActorRef, id, entry)); verify(mockRaftActor.actorDelegate).applyState(eq(mockActorRef), eq(id), anyObject()); @@ -947,7 +946,7 @@ public class RaftActorTest extends AbstractActorTest { assertEquals(RaftState.Leader, leaderActor.getCurrentBehavior().state()); // Persist another entry (this will cause a CaptureSnapshot to be triggered - leaderActor.persistData(mockActorRef, new StringIdentifier("x"), + leaderActor.persistData(mockActorRef, new MockIdentifier("x"), new MockRaftActorContext.MockPayload("duh")); // Now send a CaptureSnapshotReply diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderTest.java index c99c85fbce..1caf631cee 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderTest.java @@ -64,7 +64,6 @@ import org.opendaylight.controller.cluster.raft.policy.RaftPolicy; import org.opendaylight.controller.cluster.raft.utils.ForwardMessageToBehaviorActor; import org.opendaylight.controller.cluster.raft.utils.MessageCollectorActor; import org.opendaylight.yangtools.concepts.Identifier; -import org.opendaylight.yangtools.util.StringIdentifier; import scala.concurrent.duration.FiniteDuration; public class LeaderTest extends AbstractLeaderTest { @@ -516,7 +515,7 @@ public class LeaderTest extends AbstractLeaderTest { actorContext.getReplicatedLog().append(newEntry); - final Identifier id = new StringIdentifier("state-id"); + final Identifier id = new MockIdentifier("state-id"); RaftActorBehavior raftBehavior = leader.handleMessage(leaderActor, new Replicate(leaderActor, id, newEntry)); // State should not change @@ -654,7 +653,7 @@ public class LeaderTest extends AbstractLeaderTest { // this should invoke a sendinstallsnapshot as followersLastIndex < snapshotIndex RaftActorBehavior raftBehavior = leader.handleMessage( - leaderActor, new Replicate(null, new StringIdentifier("state-id"), entry)); + leaderActor, new Replicate(null, new MockIdentifier("state-id"), entry)); assertTrue(raftBehavior instanceof Leader); @@ -699,7 +698,7 @@ public class LeaderTest extends AbstractLeaderTest { //update follower timestamp leader.markFollowerActive(FOLLOWER_ID); - leader.handleMessage(leaderActor, new Replicate(null, new StringIdentifier("state-id"), entry)); + leader.handleMessage(leaderActor, new Replicate(null, new MockIdentifier("state-id"), entry)); assertEquals("isCapturing", true, actorContext.getSnapshotManager().isCapturing()); @@ -712,7 +711,7 @@ public class LeaderTest extends AbstractLeaderTest { assertEquals(2, cs.getLastTerm()); // if an initiate is started again when first is in progress, it shouldnt initiate Capture - leader.handleMessage(leaderActor, new Replicate(null, new StringIdentifier("state-id"), entry)); + leader.handleMessage(leaderActor, new Replicate(null, new MockIdentifier("state-id"), entry)); assertSame("CaptureSnapshot instance", cs, actorContext.getSnapshotManager().getCaptureSnapshot()); } @@ -774,7 +773,7 @@ public class LeaderTest extends AbstractLeaderTest { assertEquals(2, cs.getLastTerm()); // if an initiate is started again when first is in progress, it should not initiate Capture - leader.handleMessage(leaderActor, new Replicate(null, new StringIdentifier("state-id"), entry)); + leader.handleMessage(leaderActor, new Replicate(null, new MockIdentifier("state-id"), entry)); assertSame("CaptureSnapshot instance", cs, actorContext.getSnapshotManager().getCaptureSnapshot()); } -- 2.36.6