X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fshardmanager%2FShardPeerAddressResolver.java;h=6c33652bb1a6cde93cad77ec48adbe4068289060;hb=a66474c41883733413a6851d49fb5ade892764b3;hp=4a9f144ef11159410de192bbe218d276519d5901;hpb=f86f7e8c204fb19615c45e669a764c623576e1a3;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardPeerAddressResolver.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardPeerAddressResolver.java index 4a9f144ef1..6c33652bb1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardPeerAddressResolver.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardPeerAddressResolver.java @@ -7,12 +7,17 @@ */ package org.opendaylight.controller.cluster.datastore.shardmanager; +import static java.util.Objects.requireNonNull; + import akka.actor.Address; +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; import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier; import org.opendaylight.controller.cluster.datastore.identifiers.ShardManagerIdentifier; import org.opendaylight.controller.cluster.raft.PeerAddressResolver; @@ -26,33 +31,37 @@ import org.opendaylight.controller.cluster.raft.PeerAddressResolver; class ShardPeerAddressResolver implements PeerAddressResolver { // Stores a mapping between a member name and the address of the member. The map is concurrent as it // will be accessed by multiple threads via the public resolve method. - private final ConcurrentMap memberNameToAddress = new ConcurrentHashMap<>(); + private final ConcurrentMap memberNameToAddress = new ConcurrentHashMap<>(); private final String shardManagerIdentifier; private final String shardManagerType; - private final String localMemberName; + private final MemberName localMemberName; - public ShardPeerAddressResolver(String shardManagerType, String localMemberName) { + ShardPeerAddressResolver(final String shardManagerType, final MemberName localMemberName) { this.shardManagerIdentifier = ShardManagerIdentifier.builder().type(shardManagerType).build().toString(); this.shardManagerType = shardManagerType; - this.localMemberName = localMemberName; + this.localMemberName = requireNonNull(localMemberName); } - void addPeerAddress(String memberName, Address address) { + void addPeerAddress(final MemberName memberName, final Address address) { memberNameToAddress.put(memberName, address); } - void removePeerAddress(String memberName) { + void removePeerAddress(final MemberName memberName) { memberNameToAddress.remove(memberName); } - Address getPeerAddress(String memberName) { + Set getPeerMembers() { + return this.memberNameToAddress.keySet(); + } + + Address getPeerAddress(final MemberName memberName) { return memberNameToAddress.get(memberName); } Collection getShardManagerPeerActorAddresses() { Collection peerAddresses = new ArrayList<>(); - for(Map.Entry entry: memberNameToAddress.entrySet()) { - if(!localMemberName.equals(entry.getKey())) { + for (Map.Entry entry: memberNameToAddress.entrySet()) { + if (!localMemberName.equals(entry.getKey())) { peerAddresses.add(getShardManagerActorPathBuilder(entry.getValue()).toString()); } } @@ -60,13 +69,13 @@ class ShardPeerAddressResolver implements PeerAddressResolver { return peerAddresses; } - ShardIdentifier getShardIdentifier(String memberName, String shardName){ - return ShardIdentifier.builder().memberName(memberName).shardName(shardName).type(shardManagerType).build(); + ShardIdentifier getShardIdentifier(final MemberName memberName, final String shardName) { + return ShardIdentifier.create(shardName, memberName, shardManagerType); } - String getShardActorAddress(String shardName, String 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(); } @@ -74,17 +83,23 @@ 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) { - if(peerId == null) { + public String resolve(final String peerId) { + if (peerId == null) { return null; } - ShardIdentifier shardId = ShardIdentifier.builder().fromShardIdString(peerId).build(); + 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)); + } }