package org.opendaylight.controller.cluster.datastore.shardmanager;
import akka.actor.Address;
+import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
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;
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<String, Address> memberNameToAddress = new ConcurrentHashMap<>();
+ private final ConcurrentMap<MemberName, Address> 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) {
+ public ShardPeerAddressResolver(String shardManagerType, MemberName localMemberName) {
this.shardManagerIdentifier = ShardManagerIdentifier.builder().type(shardManagerType).build().toString();
this.shardManagerType = shardManagerType;
- this.localMemberName = localMemberName;
+ this.localMemberName = Preconditions.checkNotNull(localMemberName);
}
- void addPeerAddress(String memberName, Address address) {
+ void addPeerAddress(MemberName memberName, Address address) {
memberNameToAddress.put(memberName, address);
}
- void removePeerAddress(String memberName) {
+ void removePeerAddress(MemberName memberName) {
memberNameToAddress.remove(memberName);
}
- Address getPeerAddress(String memberName) {
+ Address getPeerAddress(MemberName memberName) {
return memberNameToAddress.get(memberName);
}
Collection<String> getShardManagerPeerActorAddresses() {
Collection<String> peerAddresses = new ArrayList<>();
- for(Map.Entry<String, Address> entry: memberNameToAddress.entrySet()) {
+ for(Map.Entry<MemberName, Address> entry: memberNameToAddress.entrySet()) {
if(!localMemberName.equals(entry.getKey())) {
peerAddresses.add(getShardManagerActorPathBuilder(entry.getValue()).toString());
}
return peerAddresses;
}
- ShardIdentifier getShardIdentifier(String memberName, String shardName){
+ ShardIdentifier getShardIdentifier(MemberName memberName, String shardName){
return ShardIdentifier.builder().memberName(memberName).shardName(shardName).type(shardManagerType).build();
}
- String getShardActorAddress(String shardName, String memberName) {
+ String getShardActorAddress(String shardName, MemberName memberName) {
Address memberAddress = memberNameToAddress.get(memberName);
if(memberAddress != null) {
return getShardManagerActorPathBuilder(memberAddress).append("/").append(