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%2Fsharding%2FShardingServiceAddressResolver.java;fp=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fsharding%2FShardingServiceAddressResolver.java;h=b443a69e1f06de79aeeff862c8f86288dc85e88c;hb=877c428f2897f6e3b11efd25589a84aa0c660a31;hp=0000000000000000000000000000000000000000;hpb=823bd74f34ee1c651f1f90daeef386a35c68d431;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/ShardingServiceAddressResolver.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/ShardingServiceAddressResolver.java new file mode 100644 index 0000000000..b443a69e1f --- /dev/null +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/ShardingServiceAddressResolver.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.cluster.sharding; + +import akka.actor.Address; +import com.google.common.base.Preconditions; +import java.util.Collection; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.stream.Collectors; +import org.opendaylight.controller.cluster.access.concepts.MemberName; + +/** + * Resolver for remote {@link ShardedDataTreeActor}'s. + */ +public class ShardingServiceAddressResolver { + + private final ConcurrentMap memberNameToAddress = new ConcurrentHashMap<>(); + private final String shardingServiceActorIdentifier; + private final MemberName localMemberName; + + public ShardingServiceAddressResolver(final String shardingServiceActorIdentifier, + final MemberName localMemberName) { + this.shardingServiceActorIdentifier = shardingServiceActorIdentifier; + this.localMemberName = localMemberName; + } + + void addPeerAddress(final MemberName memberName, final Address address) { + memberNameToAddress.put(memberName, address); + } + + void removePeerAddress(final MemberName memberName) { + memberNameToAddress.remove(memberName); + } + + Address getPeerAddress(final MemberName memberName) { + return memberNameToAddress.get(memberName); + } + + StringBuilder getActorPathBuilder(final Address address) { + return new StringBuilder().append(address.toString()).append("/user/").append(shardingServiceActorIdentifier); + } + + Collection getShardingServicePeerActorAddresses() { + final Collection peerAddresses = + memberNameToAddress + .entrySet() + .stream() + .filter(entry -> !localMemberName.equals(entry.getKey())) + .map(entry -> getActorPathBuilder(entry.getValue()).toString()) + .collect(Collectors.toList()); + + return peerAddresses; + } + + public String resolve(final MemberName memberName) { + Preconditions.checkNotNull(memberName); + final Address address = memberNameToAddress.get(memberName); + Preconditions.checkNotNull(address, "Requested member[%s] is not present in the resolver ", + memberName.toString()); + + return getActorPathBuilder(address).toString(); + } +}