Fix followerDistributedDataStore tear down
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / shardmanager / ShardPeerAddressResolver.java
index 62b8e93fb545de80ef4faa9ed765238c0f1bfe8f..6c33652bb1a6cde93cad77ec48adbe4068289060 100644 (file)
@@ -7,11 +7,14 @@
  */
 package org.opendaylight.controller.cluster.datastore.shardmanager;
 
+import static java.util.Objects.requireNonNull;
+
 import akka.actor.Address;
-import com.google.common.base.Preconditions;
+import akka.actor.AddressFromURIString;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.cluster.access.concepts.MemberName;
@@ -33,28 +36,32 @@ class ShardPeerAddressResolver implements PeerAddressResolver {
     private final String shardManagerType;
     private final MemberName localMemberName;
 
-    public ShardPeerAddressResolver(String shardManagerType, MemberName localMemberName) {
+    ShardPeerAddressResolver(final String shardManagerType, final MemberName localMemberName) {
         this.shardManagerIdentifier = ShardManagerIdentifier.builder().type(shardManagerType).build().toString();
         this.shardManagerType = shardManagerType;
-        this.localMemberName = Preconditions.checkNotNull(localMemberName);
+        this.localMemberName = requireNonNull(localMemberName);
     }
 
-    void addPeerAddress(MemberName memberName, Address address) {
+    void addPeerAddress(final MemberName memberName, final Address address) {
         memberNameToAddress.put(memberName, address);
     }
 
-    void removePeerAddress(MemberName memberName) {
+    void removePeerAddress(final MemberName memberName) {
         memberNameToAddress.remove(memberName);
     }
 
-    Address getPeerAddress(MemberName memberName) {
+    Set<MemberName> getPeerMembers() {
+        return this.memberNameToAddress.keySet();
+    }
+
+    Address getPeerAddress(final MemberName memberName) {
         return memberNameToAddress.get(memberName);
     }
 
     Collection<String> getShardManagerPeerActorAddresses() {
         Collection<String> peerAddresses = new ArrayList<>();
-        for(Map.Entry<MemberName, Address> entry: memberNameToAddress.entrySet()) {
-            if(!localMemberName.equals(entry.getKey())) {
+        for (Map.Entry<MemberName, Address> entry: memberNameToAddress.entrySet()) {
+            if (!localMemberName.equals(entry.getKey())) {
                 peerAddresses.add(getShardManagerActorPathBuilder(entry.getValue()).toString());
             }
         }
@@ -62,13 +69,13 @@ class ShardPeerAddressResolver implements PeerAddressResolver {
         return peerAddresses;
     }
 
-    ShardIdentifier getShardIdentifier(MemberName memberName, String shardName) {
+    ShardIdentifier getShardIdentifier(final MemberName memberName, final String shardName) {
         return ShardIdentifier.create(shardName, memberName, shardManagerType);
     }
 
-    String getShardActorAddress(String shardName, MemberName memberName) {
+    String getShardActorAddress(final String shardName, final MemberName memberName) {
         Address memberAddress = memberNameToAddress.get(memberName);
-        if(memberAddress != null) {
+        if (memberAddress != null) {
             return getShardManagerActorPathBuilder(memberAddress).append("/").append(
                     getShardIdentifier(memberName, shardName)).toString();
         }
@@ -76,12 +83,12 @@ class ShardPeerAddressResolver implements PeerAddressResolver {
         return null;
     }
 
-    StringBuilder getShardManagerActorPathBuilder(Address address) {
+    StringBuilder getShardManagerActorPathBuilder(final Address address) {
         return new StringBuilder().append(address.toString()).append("/user/").append(shardManagerIdentifier);
     }
 
     @Override
-    public String resolve(String peerId) {
+    public String resolve(final String peerId) {
         if (peerId == null) {
             return null;
         }
@@ -89,4 +96,10 @@ class ShardPeerAddressResolver implements PeerAddressResolver {
         ShardIdentifier shardId = ShardIdentifier.fromShardIdString(peerId);
         return getShardActorAddress(shardId.getShardName(), shardId.getMemberName());
     }
+
+    @Override
+    public void setResolved(final String peerId, final String address) {
+        memberNameToAddress.put(ShardIdentifier.fromShardIdString(peerId).getMemberName(),
+                AddressFromURIString.parse(address));
+    }
 }