2 * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.cluster.datastore.shardmanager;
10 import akka.actor.ActorRef;
11 import akka.actor.Props;
13 import org.opendaylight.controller.cluster.datastore.DatastoreContext;
14 import org.opendaylight.controller.cluster.datastore.TestShard;
15 import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier;
16 import org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot;
18 public class TestShardManager extends ShardManager {
19 TestShardManager(AbstractShardManagerCreator<?> builder) {
24 public void handleCommand(Object message) throws Exception {
25 if (GetLocalShards.INSTANCE.equals(message)) {
26 sender().tell(new GetLocalShardsReply(localShards), null);
28 super.handleCommand(message);
33 * Plug into shard actor creation to replace info with our testing one.
34 * @param info shard info.
35 * @return actor for replaced shard info.
38 protected ActorRef newShardActor(ShardInformation info) {
39 Map<String, String> peerAddresses = getPeerAddresses(info.getShardName());
40 ShardInformation newInfo = new ShardInformation(info.getShardName(),
41 info.getShardId(), peerAddresses,
42 info.getDatastoreContext(),
44 .restoreFromSnapshot(info.getBuilder().getRestoreFromSnapshot()),
46 newInfo.setSchemaContext(info.getSchemaContext());
47 newInfo.setActiveMember(info.isActiveMember());
50 localShards.put(info.getShardName(), info);
51 return getContext().actorOf(newInfo.newProps().withDispatcher(shardDispatcherPath),
52 info.getShardId().toString());
56 ShardInformation createShardInfoFor(String shardName, ShardIdentifier shardId,
57 Map<String, String> peerAddresses,
58 DatastoreContext datastoreContext,
59 Map<String, DatastoreSnapshot.ShardSnapshot> shardSnapshots) {
60 return new ShardInformation(shardName, shardId, peerAddresses,
61 datastoreContext, TestShard.builder().restoreFromSnapshot(shardSnapshots.get(shardName)),
65 public static class TestShardManagerCreator extends AbstractShardManagerCreator<TestShardManagerCreator> {
67 public Props props() {
69 return Props.create(TestShardManager.class, this);
73 public static final class GetLocalShards {
74 public static final GetLocalShards INSTANCE = new GetLocalShards();
76 private GetLocalShards() {
81 public static class GetLocalShardsReply {
83 private final Map<String, ShardInformation> localShards;
85 public GetLocalShardsReply(Map<String, ShardInformation> localShards) {
86 this.localShards = localShards;
89 public Map<String, ShardInformation> getLocalShards() {