the node from inventory data store, when switch disconnect from slave node.
Change-Id: I19155e84444b57eab94157c34eaa32952fecf3f2
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
(cherry picked from commit
69da70673ed8afe48eec65ed5ffab750e6cac444)
<capability>urn:opendaylight:inventory?module=opendaylight-inventory&revision=2013-08-19</capability>
<capability>urn:opendaylight:flow:inventory?module=flow-node-inventory&revision=2013-08-19</capability>
<capability>urn:opendaylight:flow:types?module=opendaylight-flow-types&revision=2013-10-26</capability>
<capability>urn:opendaylight:inventory?module=opendaylight-inventory&revision=2013-08-19</capability>
<capability>urn:opendaylight:flow:inventory?module=flow-node-inventory&revision=2013-08-19</capability>
<capability>urn:opendaylight:flow:types?module=opendaylight-flow-types&revision=2013-10-26</capability>
+ <capability>urn:opendaylight:params:xml:ns:yang:controller:config:distributed-entity-ownership-service?module=distributed-entity-ownership-service&revision=2015-08-10</capability>
</required-capabilities>
<configuration>
</required-capabilities>
<configuration>
<type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
<name>binding-osgi-broker</name>
</broker>
<type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
<name>binding-osgi-broker</name>
</broker>
+ <entity-ownership-service>
+ <type xmlns:entity-ownership="urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service">entity-ownership:entity-ownership-service</type>
+ <name>entity-ownership-service</name>
+ </entity-ownership-service>
</module>
</modules>
</data>
</module>
</modules>
</data>
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
+import com.google.common.base.Optional;
import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipState;
import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
import org.opendaylight.controller.md.sal.common.api.data.TransactionChain;
import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
import org.opendaylight.controller.md.sal.common.api.data.TransactionChain;
import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final BlockingQueue<InventoryOperation> queue = new LinkedBlockingDeque<>(QUEUE_DEPTH);
private final NotificationProviderService notificationService;
private final BlockingQueue<InventoryOperation> queue = new LinkedBlockingDeque<>(QUEUE_DEPTH);
private final NotificationProviderService notificationService;
+ private final EntityOwnershipService eos;
private final DataBroker dataBroker;
private BindingTransactionChain txChain;
private final DataBroker dataBroker;
private BindingTransactionChain txChain;
private ListenerRegistration<?> tableFeatureListenerRegistration;
private Thread thread;
private ListenerRegistration<?> tableFeatureListenerRegistration;
private Thread thread;
- FlowCapableInventoryProvider(final DataBroker dataBroker, final NotificationProviderService notificationService) {
+ FlowCapableInventoryProvider(final DataBroker dataBroker, final NotificationProviderService notificationService, EntityOwnershipService eos) {
this.dataBroker = Preconditions.checkNotNull(dataBroker);
this.notificationService = Preconditions.checkNotNull(notificationService);
this.dataBroker = Preconditions.checkNotNull(dataBroker);
this.notificationService = Preconditions.checkNotNull(notificationService);
+
+ public boolean deviceDataDeleteAllowed(NodeId nodeId) {
+ Entity device = new Entity("openflow",nodeId.getValue());
+ Optional<EntityOwnershipState> entityOwnershipState = eos.getOwnershipState(device);
+ if(entityOwnershipState.isPresent()){
+ EntityOwnershipState eState = entityOwnershipState.get();
+ if(eState.isOwner()) { return true; }
+
+ return !eState.hasOwner();
+ }
+ return true;
+ }
package org.opendaylight.openflowplugin.applications.inventory.manager;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
package org.opendaylight.openflowplugin.applications.inventory.manager;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
public class InventoryActivator implements BindingAwareProvider, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(InventoryActivator.class);
private FlowCapableInventoryProvider provider;
public class InventoryActivator implements BindingAwareProvider, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(InventoryActivator.class);
private FlowCapableInventoryProvider provider;
+ final private EntityOwnershipService eos;
+
+ public InventoryActivator(EntityOwnershipService eos) {
+ this.eos = eos;
+ }
+
@Override
public void onSessionInitiated(final ProviderContext session) {
@Override
public void onSessionInitiated(final ProviderContext session) {
NotificationProviderService salNotifiService =
session.getSALService(NotificationProviderService.class);
NotificationProviderService salNotifiService =
session.getSALService(NotificationProviderService.class);
- provider = new FlowCapableInventoryProvider(dataBroker, salNotifiService);
+ provider = new FlowCapableInventoryProvider(dataBroker, salNotifiService, eos);
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemoved;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRemoved;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdated;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.OpendaylightInventoryListener;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.*;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
+ if(!manager.deviceDataDeleteAllowed(getNodeId(connector.getNodeConnectorRef().getValue()))) { return; }
+
LOG.debug("Node connector removed notification received, {}", connector.getNodeConnectorRef().getValue());
manager.enqueue(new InventoryOperation() {
@Override
LOG.debug("Node connector removed notification received, {}", connector.getNodeConnectorRef().getValue());
manager.enqueue(new InventoryOperation() {
@Override
+ if(!manager.deviceDataDeleteAllowed(getNodeId(node.getNodeRef().getValue()))) { return; }
+
LOG.debug("Node removed notification received, {}", node.getNodeRef().getValue());
manager.enqueue(new InventoryOperation() {
@Override
LOG.debug("Node removed notification received, {}", node.getNodeRef().getValue());
manager.enqueue(new InventoryOperation() {
@Override
+
+ private NodeId getNodeId(InstanceIdentifier<?> iid) {
+ return iid.firstKeyOf(Node.class).getId();
+ }
@Override
public java.lang.AutoCloseable createInstance() {
@Override
public java.lang.AutoCloseable createInstance() {
- InventoryActivator provider = new InventoryActivator();
+ InventoryActivator provider = new InventoryActivator(getEntityOwnershipServiceDependency());
getBrokerDependency().registerProvider(provider);
return provider;
}
getBrokerDependency().registerProvider(provider);
return provider;
}
import config { prefix config; revision-date 2013-04-05; }
import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
import config { prefix config; revision-date 2013-04-05; }
import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
+ import opendaylight-entity-ownership-service { prefix eos; }
description
"Service definition for inventory manager";
description
"Service definition for inventory manager";
+
+ container entity-ownership-service {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity eos:entity-ownership-service;
+ }
+ }
+ }