import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import org.mockito.Mockito;
+import org.opendaylight.controller.cluster.databroker.ClientBackedDataStore;
import org.opendaylight.controller.cluster.datastore.DatastoreContext.Builder;
import org.opendaylight.controller.cluster.datastore.config.Configuration;
import org.opendaylight.controller.cluster.datastore.config.ConfigurationImpl;
import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats;
import org.opendaylight.controller.cluster.datastore.messages.OnDemandShardState;
import org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot;
-import org.opendaylight.controller.cluster.datastore.utils.ActorContext;
+import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
import org.opendaylight.controller.cluster.raft.client.messages.GetOnDemandRaftState;
import org.opendaylight.controller.md.cluster.datastore.model.SchemaContextHelper;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import scala.concurrent.Await;
import scala.concurrent.Future;
-import scala.concurrent.duration.Duration;
+import scala.concurrent.duration.FiniteDuration;
public class IntegrationTestKit extends ShardTestKit {
public DistributedDataStore setupDistributedDataStore(final String typeName, final String moduleShardsConfig,
final boolean waitUntilLeader,
- final SchemaContext schemaContext) throws Exception {
+ final EffectiveModelContext schemaContext) throws Exception {
return setupDistributedDataStore(typeName, moduleShardsConfig, "modules.conf", waitUntilLeader, schemaContext);
}
public DistributedDataStore setupDistributedDataStore(final String typeName, final String moduleShardsConfig,
final String modulesConfig,
final boolean waitUntilLeader,
- final SchemaContext schemaContext,
+ final EffectiveModelContext schemaContext,
final String... shardNames) throws Exception {
return (DistributedDataStore) setupAbstractDataStore(DistributedDataStore.class, typeName, moduleShardsConfig,
modulesConfig, waitUntilLeader, schemaContext, shardNames);
public AbstractDataStore setupAbstractDataStore(final Class<? extends AbstractDataStore> implementation,
final String typeName, final String moduleShardsConfig,
final boolean waitUntilLeader,
- final SchemaContext schemaContext,
+ final EffectiveModelContext schemaContext,
final String... shardNames) throws Exception {
return setupAbstractDataStore(implementation, typeName, moduleShardsConfig, "modules.conf", waitUntilLeader,
schemaContext, shardNames);
private AbstractDataStore setupAbstractDataStore(final Class<? extends AbstractDataStore> implementation,
final String typeName, final String moduleShardsConfig,
final String modulesConfig, final boolean waitUntilLeader,
- final SchemaContext schemaContext, final String... shardNames)
+ final EffectiveModelContext schemaContext,
+ final String... shardNames)
throws Exception {
final ClusterWrapper cluster = new ClusterWrapperImpl(getSystem());
final Configuration config = new ConfigurationImpl(moduleShardsConfig, modulesConfig);
setDataStoreName(typeName);
+ // Make sure we set up datastore context correctly
+ datastoreContextBuilder.useTellBasedProtocol(ClientBackedDataStore.class.isAssignableFrom(implementation));
+
final DatastoreContext datastoreContext = datastoreContextBuilder.build();
final DatastoreContextFactory mockContextFactory = Mockito.mock(DatastoreContextFactory.class);
Mockito.doReturn(datastoreContext).when(mockContextFactory).getBaseDatastoreContext();
final AbstractDataStore dataStore = constructor.newInstance(getSystem(), cluster, config, mockContextFactory,
restoreFromSnapshot);
- dataStore.onGlobalContextUpdated(schemaContext);
+ dataStore.onModelContextUpdated(schemaContext);
if (waitUntilLeader) {
- waitUntilLeader(dataStore.getActorContext(), shardNames);
+ waitUntilLeader(dataStore.getActorUtils(), shardNames);
}
datastoreContextBuilder = DatastoreContext.newBuilderFrom(datastoreContext);
}
public DistributedDataStore setupDistributedDataStoreWithoutConfig(final String typeName,
- final SchemaContext schemaContext) {
+ final EffectiveModelContext schemaContext) {
final ClusterWrapper cluster = new ClusterWrapperImpl(getSystem());
final ConfigurationImpl configuration = new ConfigurationImpl(new EmptyModuleShardConfigProvider());
final DistributedDataStore dataStore = new DistributedDataStore(getSystem(), cluster,
configuration, mockContextFactory, restoreFromSnapshot);
- dataStore.onGlobalContextUpdated(schemaContext);
+ dataStore.onModelContextUpdated(schemaContext);
datastoreContextBuilder = DatastoreContext.newBuilderFrom(datastoreContext);
return dataStore;
}
public DistributedDataStore setupDistributedDataStoreWithoutConfig(final String typeName,
- final SchemaContext schemaContext,
+ final EffectiveModelContext schemaContext,
final LogicalDatastoreType storeType) {
final ClusterWrapper cluster = new ClusterWrapperImpl(getSystem());
final ConfigurationImpl configuration = new ConfigurationImpl(new EmptyModuleShardConfigProvider());
final DistributedDataStore dataStore = new DistributedDataStore(getSystem(), cluster,
configuration, mockContextFactory, restoreFromSnapshot);
- dataStore.onGlobalContextUpdated(schemaContext);
+ dataStore.onModelContextUpdated(schemaContext);
datastoreContextBuilder = DatastoreContext.newBuilderFrom(datastoreContext);
return dataStore;
}
- public void waitUntilLeader(final ActorContext actorContext, final String... shardNames) {
+ public void waitUntilLeader(final ActorUtils actorUtils, final String... shardNames) {
for (String shardName: shardNames) {
- ActorRef shard = findLocalShard(actorContext, shardName);
+ ActorRef shard = findLocalShard(actorUtils, shardName);
assertNotNull("Shard was not created for " + shardName, shard);
}
}
- public void waitUntilNoLeader(final ActorContext actorContext, final String... shardNames) {
+ public void waitUntilNoLeader(final ActorUtils actorUtils, final String... shardNames) {
for (String shardName: shardNames) {
- ActorRef shard = findLocalShard(actorContext, shardName);
+ ActorRef shard = findLocalShard(actorUtils, shardName);
assertNotNull("No local shard found for " + shardName, shard);
waitUntilNoLeader(shard);
fail("Member(s) " + otherMembersSet + " are not Up");
}
- public static ActorRef findLocalShard(final ActorContext actorContext, final String shardName) {
+ public static ActorRef findLocalShard(final ActorUtils actorUtils, final String shardName) {
ActorRef shard = null;
for (int i = 0; i < 20 * 5 && shard == null; i++) {
Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS);
- com.google.common.base.Optional<ActorRef> shardReply = actorContext.findLocalShard(shardName);
+ Optional<ActorRef> shardReply = actorUtils.findLocalShard(shardName);
if (shardReply.isPresent()) {
shard = shardReply.get();
}
return shard;
}
- public static void waitUntilShardIsDown(final ActorContext actorContext, final String shardName) {
+ public static void waitUntilShardIsDown(final ActorUtils actorUtils, final String shardName) {
for (int i = 0; i < 20 * 5 ; i++) {
LOG.debug("Waiting for shard down {}", shardName);
Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS);
- com.google.common.base.Optional<ActorRef> shardReply = actorContext.findLocalShard(shardName);
+ Optional<ActorRef> shardReply = actorUtils.findLocalShard(shardName);
if (!shardReply.isPresent()) {
return;
}
public static void verifyShardStats(final AbstractDataStore datastore, final String shardName,
final ShardStatsVerifier verifier) throws Exception {
- ActorContext actorContext = datastore.getActorContext();
+ ActorUtils actorUtils = datastore.getActorUtils();
- Future<ActorRef> future = actorContext.findLocalShardAsync(shardName);
- ActorRef shardActor = Await.result(future, Duration.create(10, TimeUnit.SECONDS));
+ Future<ActorRef> future = actorUtils.findLocalShardAsync(shardName);
+ ActorRef shardActor = Await.result(future, FiniteDuration.create(10, TimeUnit.SECONDS));
AssertionError lastError = null;
Stopwatch sw = Stopwatch.createStarted();
while (sw.elapsed(TimeUnit.SECONDS) <= 5) {
- ShardStats shardStats = (ShardStats)actorContext
+ ShardStats shardStats = (ShardStats)actorUtils
.executeOperation(shardActor, Shard.GET_SHARD_MBEAN_MESSAGE);
try {
public static void verifyShardState(final AbstractDataStore datastore, final String shardName,
final Consumer<OnDemandShardState> verifier) throws Exception {
- ActorContext actorContext = datastore.getActorContext();
+ ActorUtils actorUtils = datastore.getActorUtils();
- Future<ActorRef> future = actorContext.findLocalShardAsync(shardName);
- ActorRef shardActor = Await.result(future, Duration.create(10, TimeUnit.SECONDS));
+ Future<ActorRef> future = actorUtils.findLocalShardAsync(shardName);
+ ActorRef shardActor = Await.result(future, FiniteDuration.create(10, TimeUnit.SECONDS));
AssertionError lastError = null;
Stopwatch sw = Stopwatch.createStarted();
while (sw.elapsed(TimeUnit.SECONDS) <= 5) {
- OnDemandShardState shardState = (OnDemandShardState)actorContext
+ OnDemandShardState shardState = (OnDemandShardState)actorUtils
.executeOperation(shardActor, GetOnDemandRaftState.INSTANCE);
try {