From 0d05ea3fd79780e2526d9f049d2500825b629955 Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Thu, 22 Jun 2017 09:28:03 -0400 Subject: [PATCH] Bug 7449: Introduce ClientActorConfig in cds-access-client Upcoming changes in cds-access-client will need access to some config params in DatastoreContext. However DatastoreContext is in sal-distributed-datastore and thus can't be referenced in cds-access-client. So refactor a ClientActorConfig interface with the necessary accessors. Change-Id: I55e7291340e711c585f4fb1236a27396503d1914 Signed-off-by: Tom Pantelis --- opendaylight/md-sal/cds-access-client/pom.xml | 11 ++++++ .../access/client/AbstractClientActor.java | 2 + .../access/client/ClientActorConfig.java | 37 +++++++++++++++++++ .../access/client/ClientActorContext.java | 9 ++++- .../client/InitialClientActorContext.java | 2 +- .../client/AbstractClientConnectionTest.java | 4 +- .../access/client/AccessClientUtil.java | 15 +++++++- .../access/client/ActorBehaviorTest.java | 21 ++++++++++- .../access/client/ClientActorContextTest.java | 2 +- opendaylight/md-sal/mdsal-artifacts/pom.xml | 7 ++++ .../md-sal/sal-distributed-datastore/pom.xml | 6 +++ .../dds/AbstractDataStoreClientActor.java | 6 +++ .../cluster/datastore/DatastoreContext.java | 6 ++- 13 files changed, 119 insertions(+), 9 deletions(-) create mode 100644 opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorConfig.java rename opendaylight/md-sal/{sal-distributed-datastore => cds-access-client}/src/test/java/org/opendaylight/controller/cluster/access/client/AccessClientUtil.java (80%) diff --git a/opendaylight/md-sal/cds-access-client/pom.xml b/opendaylight/md-sal/cds-access-client/pom.xml index 962ef8ed70..7b1fc570c4 100644 --- a/opendaylight/md-sal/cds-access-client/pom.xml +++ b/opendaylight/md-sal/cds-access-client/pom.xml @@ -92,6 +92,17 @@ true + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + diff --git a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientActor.java b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientActor.java index fdba64f064..2fb4c94307 100644 --- a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientActor.java +++ b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientActor.java @@ -68,4 +68,6 @@ public abstract class AbstractClientActor extends UntypedPersistentActor { } protected abstract ClientActorBehavior initialBehavior(ClientActorContext context); + + protected abstract ClientActorConfig getClientActorConfig(); } diff --git a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorConfig.java b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorConfig.java new file mode 100644 index 0000000000..460420a260 --- /dev/null +++ b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorConfig.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2017 Inocybe Technologies and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.cluster.access.client; + +/** + * Interface for client actor configuration parameters. + * + * @author Thomas Pantelis + */ +public interface ClientActorConfig { + /** + * Returns the maximum size in bytes for a message slice when fragmenting messages thru the akka remoting framework. + * + * @return the maximum size in bytes + */ + int getMaximumMessageSliceSize(); + + /** + * Returns the threshold in bytes before switching from storing in memory to buffering to a file when streaming + * large amounts of data. + * + * @return the threshold in bytes + */ + int getFileBackedStreamingThreshold(); + + /** + * Returns the directory in which to create temporary files. + * + * @return the directory name + */ + String getTempFileDirectory(); +} diff --git a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorContext.java b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorContext.java index cb36223c26..5520359802 100644 --- a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorContext.java +++ b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorContext.java @@ -36,14 +36,16 @@ public class ClientActorContext extends AbstractClientActorContext implements Id private final ExecutionContext executionContext; private final ClientIdentifier identifier; private final Scheduler scheduler; + private final ClientActorConfig config; // Hidden to avoid subclassing ClientActorContext(final ActorRef self, final Scheduler scheduler, final ExecutionContext executionContext, - final String persistenceId, final ClientIdentifier identifier) { + final String persistenceId, final ClientIdentifier identifier, final ClientActorConfig config) { super(self, persistenceId); this.identifier = Preconditions.checkNotNull(identifier); this.scheduler = Preconditions.checkNotNull(scheduler); this.executionContext = Preconditions.checkNotNull(executionContext); + this.config = Preconditions.checkNotNull(config); } @Override @@ -52,6 +54,11 @@ public class ClientActorContext extends AbstractClientActorContext implements Id return identifier; } + @Nonnull + public ClientActorConfig config() { + return config; + } + /** * Return the time ticker for this {@link ClientActorContext}. This should be used for in all time-tracking * done within a client actor. Subclasses of {@link ClientActorBehavior} are encouraged to use diff --git a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/InitialClientActorContext.java b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/InitialClientActorContext.java index c0790e7b27..91675c1895 100644 --- a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/InitialClientActorContext.java +++ b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/InitialClientActorContext.java @@ -36,7 +36,7 @@ final class InitialClientActorContext extends AbstractClientActorContext { ClientActorBehavior createBehavior(final ClientIdentifier clientId) { final ActorSystem system = actor.getContext().system(); final ClientActorContext context = new ClientActorContext(self(), system.scheduler(), system.dispatcher(), - persistenceId(), clientId); + persistenceId(), clientId, actor.getClientActorConfig()); return actor.initialBehavior(context); } diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnectionTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnectionTest.java index 3a2abbe31c..f2c42e18d4 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnectionTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnectionTest.java @@ -66,7 +66,7 @@ public abstract class AbstractClientConnectionTest ConnectedClientConnection createConnectedConnection( @@ -43,4 +54,4 @@ public class AccessClientUtil { return new ConnectionEntry(request, callback, now); } -} \ No newline at end of file +} diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ActorBehaviorTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ActorBehaviorTest.java index 7431813010..6804b1fc25 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ActorBehaviorTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ActorBehaviorTest.java @@ -189,6 +189,25 @@ public class ActorBehaviorTest { return initialBehavior; } + @Override + protected ClientActorConfig getClientActorConfig() { + return new ClientActorConfig() { + @Override + public String getTempFileDirectory() { + return null; + } + + @Override + public int getMaximumMessageSliceSize() { + return 2000000; + } + + @Override + public int getFileBackedStreamingThreshold() { + return 1000000000; + } + }; + } } -} \ No newline at end of file +} diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ClientActorContextTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ClientActorContextTest.java index 3ecc68bdb4..afb76591b2 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ClientActorContextTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ClientActorContextTest.java @@ -46,7 +46,7 @@ public class ClientActorContextTest { system = ActorSystem.apply(); probe = new TestProbe(system); ctx = new ClientActorContext(probe.ref(), system.scheduler(), system.dispatcher(), - PERSISTENCE_ID, CLIENT_ID); + PERSISTENCE_ID, CLIENT_ID, AccessClientUtil.newMockClientActorConfig()); } @Test diff --git a/opendaylight/md-sal/mdsal-artifacts/pom.xml b/opendaylight/md-sal/mdsal-artifacts/pom.xml index d9a30fffbb..39ff81553a 100644 --- a/opendaylight/md-sal/mdsal-artifacts/pom.xml +++ b/opendaylight/md-sal/mdsal-artifacts/pom.xml @@ -228,6 +228,13 @@ cds-access-client 1.2.0-SNAPSHOT + + org.opendaylight.controller + cds-access-client + 1.2.0-SNAPSHOT + test-jar + test + org.opendaylight.controller sal-cluster-admin-api diff --git a/opendaylight/md-sal/sal-distributed-datastore/pom.xml b/opendaylight/md-sal/sal-distributed-datastore/pom.xml index 2f9381b2c2..a444164274 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/pom.xml +++ b/opendaylight/md-sal/sal-distributed-datastore/pom.xml @@ -113,6 +113,12 @@ org.opendaylight.controller cds-access-client + + org.opendaylight.controller + cds-access-client + test-jar + test + org.opendaylight.controller cds-dom-api diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractDataStoreClientActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractDataStoreClientActor.java index 1143bab10c..b91ff70b62 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractDataStoreClientActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractDataStoreClientActor.java @@ -15,6 +15,7 @@ import com.google.common.base.Verify; import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; import org.opendaylight.controller.cluster.access.client.AbstractClientActor; +import org.opendaylight.controller.cluster.access.client.ClientActorConfig; import org.opendaylight.controller.cluster.access.client.ClientActorContext; import org.opendaylight.controller.cluster.access.concepts.FrontendIdentifier; import org.opendaylight.controller.cluster.common.actor.ExplicitAsk; @@ -33,6 +34,11 @@ public abstract class AbstractDataStoreClientActor extends AbstractClientActor { this.actorContext = Preconditions.checkNotNull(actorContext); } + @Override + protected ClientActorConfig getClientActorConfig() { + return actorContext.getDatastoreContext(); + } + @Override protected final AbstractDataStoreClientBehavior initialBehavior(final ClientActorContext context) { return Verify.verifyNotNull(initialBehavior(context, actorContext)); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java index 07115b7169..890e103067 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java @@ -15,6 +15,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.text.WordUtils; +import org.opendaylight.controller.cluster.access.client.ClientActorConfig; import org.opendaylight.controller.cluster.common.actor.AkkaConfigurationReader; import org.opendaylight.controller.cluster.common.actor.FileAkkaConfigurationReader; import org.opendaylight.controller.cluster.raft.ConfigParams; @@ -33,7 +34,7 @@ import scala.concurrent.duration.FiniteDuration; * * @author Thomas Pantelis */ -public class DatastoreContext { +public class DatastoreContext implements ClientActorConfig { public static final String METRICS_DOMAIN = "org.opendaylight.controller.cluster.datastore"; public static final Duration DEFAULT_SHARD_TRANSACTION_IDLE_TIMEOUT = Duration.create(10, TimeUnit.MINUTES); @@ -216,6 +217,7 @@ public class DatastoreContext { return shardManagerPersistenceId; } + @Override public String getTempFileDirectory() { return raftConfig.getTempFileDirectory(); } @@ -224,6 +226,7 @@ public class DatastoreContext { raftConfig.setTempFileDirectory(tempFileDirectory); } + @Override public int getFileBackedStreamingThreshold() { return raftConfig.getFileBackedStreamingThreshold(); } @@ -307,6 +310,7 @@ public class DatastoreContext { return useTellBasedProtocol; } + @Override public int getMaximumMessageSliceSize() { return maximumMessageSliceSize; } -- 2.36.6