import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.CANDIDATE_NODE_ID;
import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_OWNER_NODE_ID;
import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.entityPath;
import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.CANDIDATE_NODE_ID;
import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.ENTITY_OWNER_NODE_ID;
import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.entityPath;
import akka.pattern.Patterns;
import akka.util.Timeout;
import com.google.common.annotations.VisibleForTesting;
import akka.pattern.Patterns;
import akka.util.Timeout;
import com.google.common.annotations.VisibleForTesting;
import java.util.Collection;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
import java.util.Collection;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
import org.opendaylight.controller.cluster.access.concepts.MemberName;
import org.opendaylight.controller.cluster.datastore.config.Configuration;
import org.opendaylight.controller.cluster.datastore.config.ModuleShardConfiguration;
import org.opendaylight.controller.cluster.access.concepts.MemberName;
import org.opendaylight.controller.cluster.datastore.config.Configuration;
import org.opendaylight.controller.cluster.datastore.config.ModuleShardConfiguration;
import org.opendaylight.controller.cluster.datastore.messages.CreateShard;
import org.opendaylight.controller.cluster.datastore.messages.GetShardDataTree;
import org.opendaylight.controller.cluster.datastore.shardstrategy.ModuleShardStrategy;
import org.opendaylight.controller.cluster.datastore.messages.CreateShard;
import org.opendaylight.controller.cluster.datastore.messages.GetShardDataTree;
import org.opendaylight.controller.cluster.datastore.shardstrategy.ModuleShardStrategy;
import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
private static final Timeout MESSAGE_TIMEOUT = new Timeout(1, TimeUnit.MINUTES);
private final ConcurrentMap<DOMEntity, DOMEntity> registeredEntities = new ConcurrentHashMap<>();
private static final Timeout MESSAGE_TIMEOUT = new Timeout(1, TimeUnit.MINUTES);
private final ConcurrentMap<DOMEntity, DOMEntity> registeredEntities = new ConcurrentHashMap<>();
private volatile ActorRef localEntityOwnershipShard;
private volatile DataTree localEntityOwnershipShardDataTree;
private volatile ActorRef localEntityOwnershipShard;
private volatile DataTree localEntityOwnershipShardDataTree;
- DistributedEntityOwnershipService(final ActorContext context) {
- this.context = Preconditions.checkNotNull(context);
+ DistributedEntityOwnershipService(final ActorUtils context) {
+ this.context = requireNonNull(context);
final EntityOwnerSelectionStrategyConfig strategyConfig) {
ActorRef shardManagerActor = context.getShardManager();
final EntityOwnerSelectionStrategyConfig strategyConfig) {
ActorRef shardManagerActor = context.getShardManager();
"entity-owners", ENTITY_OWNERSHIP_SHARD_NAME, ModuleShardStrategy.NAME, entityOwnersMemberNames),
newShardBuilder(context, strategyConfig), null);
"entity-owners", ENTITY_OWNERSHIP_SHARD_NAME, ModuleShardStrategy.NAME, entityOwnersMemberNames),
newShardBuilder(context, strategyConfig), null);
- Future<Object> createFuture = context.executeOperationAsync(shardManagerActor,
- createShard, MESSAGE_TIMEOUT);
-
+ Future<Object> createFuture = context.executeOperationAsync(shardManagerActor, createShard, MESSAGE_TIMEOUT);
createFuture.onComplete(new OnComplete<Object>() {
@Override
public void onComplete(final Throwable failure, final Object response) {
createFuture.onComplete(new OnComplete<Object>() {
@Override
public void onComplete(final Throwable failure, final Object response) {
- LOG.debug("Error sending message {} to {}", message, shardActor, failure);
+ // FIXME: CONTROLLER-1904: reduce the severity to info once we have a retry mechanism
+ LOG.error("Error sending message {} to {}", message, shardActor, failure);
LOG.error("Failed to find local {} shard", ENTITY_OWNERSHIP_SHARD_NAME, failure);
} else {
localEntityOwnershipShard = shardActor;
LOG.error("Failed to find local {} shard", ENTITY_OWNERSHIP_SHARD_NAME, failure);
} else {
localEntityOwnershipShard = shardActor;
@Override
public DOMEntityOwnershipCandidateRegistration registerCandidate(final DOMEntity entity)
throws CandidateAlreadyRegisteredException {
@Override
public DOMEntityOwnershipCandidateRegistration registerCandidate(final DOMEntity entity)
throws CandidateAlreadyRegisteredException {
if (registeredEntities.putIfAbsent(entity, entity) != null) {
throw new CandidateAlreadyRegisteredException(entity);
if (registeredEntities.putIfAbsent(entity, entity) != null) {
throw new CandidateAlreadyRegisteredException(entity);
@Override
public DOMEntityOwnershipListenerRegistration registerListener(final String entityType,
final DOMEntityOwnershipListener listener) {
@Override
public DOMEntityOwnershipListenerRegistration registerListener(final String entityType,
final DOMEntityOwnershipListener listener) {
RegisterListenerLocal registerListener = new RegisterListenerLocal(listener, entityType);
LOG.debug("Registering listener with message: {}", registerListener);
RegisterListenerLocal registerListener = new RegisterListenerLocal(listener, entityType);
LOG.debug("Registering listener with message: {}", registerListener);
final EntityOwnerSelectionStrategyConfig strategyConfig) {
return EntityOwnershipShard.newBuilder().localMemberName(context.getCurrentMemberName())
.ownerSelectionStrategyConfig(strategyConfig);
final EntityOwnerSelectionStrategyConfig strategyConfig) {
return EntityOwnershipShard.newBuilder().localMemberName(context.getCurrentMemberName())
.ownerSelectionStrategyConfig(strategyConfig);