2 * Copyright (c) 2015 Brocade Communications Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.cluster.datastore.entityownership;
10 import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.createEntity;
11 import com.google.common.base.Optional;
12 import com.google.common.base.Preconditions;
13 import com.google.common.base.Strings;
14 import java.util.Collection;
15 import java.util.Objects;
16 import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
17 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
18 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
19 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
20 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
25 * Listens for entity owner changes and notifies the EntityOwnershipListenerSupport appropriately.
27 * @author Thomas Pantelis
29 class EntityOwnerChangeListener extends AbstractEntityOwnerChangeListener {
30 private static final Logger LOG = LoggerFactory.getLogger(EntityOwnerChangeListener.class);
32 private final String localMemberName;
33 private final EntityOwnershipListenerSupport listenerSupport;
35 EntityOwnerChangeListener(final String localMemberName, final EntityOwnershipListenerSupport listenerSupport) {
36 this.localMemberName = Preconditions.checkNotNull(localMemberName);
37 this.listenerSupport = Preconditions.checkNotNull(listenerSupport);
41 public void onDataTreeChanged(final Collection<DataTreeCandidate> changes) {
42 for(DataTreeCandidate change: changes) {
43 DataTreeCandidateNode changeRoot = change.getRootNode();
44 LeafNode<?> ownerLeaf = (LeafNode<?>) changeRoot.getDataAfter().get();
46 LOG.debug("{}: Entity node changed: {}, {}", logId(), changeRoot.getModificationType(), change.getRootPath());
48 String newOwner = extractOwner(ownerLeaf);
50 String origOwner = null;
51 Optional<NormalizedNode<?, ?>> dataBefore = changeRoot.getDataBefore();
52 if(dataBefore.isPresent()) {
53 origOwner = extractOwner((LeafNode<?>) changeRoot.getDataBefore().get());
56 LOG.debug("{}: New owner: {}, Original owner: {}", logId(), newOwner, origOwner);
58 if(!Objects.equals(origOwner, newOwner)) {
59 boolean isOwner = Objects.equals(localMemberName, newOwner);
60 boolean wasOwner = Objects.equals(localMemberName, origOwner);
61 boolean hasOwner = !Strings.isNullOrEmpty(newOwner);
63 Entity entity = createEntity(change.getRootPath());
65 LOG.debug("{}: Calling notifyEntityOwnershipListeners: entity: {}, wasOwner: {}, isOwner: {}, hasOwner: {}",
66 logId(), entity, wasOwner, isOwner, hasOwner);
68 listenerSupport.notifyEntityOwnershipListeners(entity, wasOwner, isOwner, hasOwner);
73 private String logId() {
74 return listenerSupport.getLogId();