
org.opendaylight.controller.cluster.sharding.ShardingServiceAddressResolver Maven / Gradle / Ivy
/*
* 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 static com.google.common.base.Preconditions.checkNotNull;
import static java.util.Objects.requireNonNull;
import akka.actor.Address;
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) {
final Address address = memberNameToAddress.get(requireNonNull(memberName));
checkNotNull(address, "Requested member[%s] is not present in the resolver", memberName);
return getActorPathBuilder(address).toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy