remove redundant parent data with last child 36/49536/5
authorMatej Perina <mperina@cisco.com>
Tue, 17 Jan 2017 15:33:24 +0000 (15:33 +0000)
committerMatej Perina <mperina@cisco.com>
Tue, 17 Jan 2017 15:33:24 +0000 (15:33 +0000)
Change-Id: If833e1a6c9bce23834f15983ed1a620c39fed9c8
Signed-off-by: Matej Perina <mperina@cisco.com>
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/location/resolver/LocationResolver.java
renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/BridgeDomainManagerImpl.java

index 9e30d7d2e2c3eb29be96ff42b677829856e83d13..02f5419e5f6d208145ad8c37836fe89569f9b5bb 100644 (file)
@@ -128,6 +128,10 @@ public class LocationResolver implements ClusteredDataTreeChangeListener<Locatio
                     wtx.delete(LogicalDatastoreType.OPERATIONAL, iid);
                 }
             }
+            if (newAbsoluteLocation == null && addressEndpointLocation.getRelativeLocations() == null) {
+                InstanceIdentifier<AddressEndpointLocation> iid = IidFactory.addressEndpointLocationIid(epKey);
+                wtx.delete(LogicalDatastoreType.OPERATIONAL, iid);
+            }
         }
         for (ProviderContainmentEndpointLocation containmentEndpoint : nullToEmpty(
                 provider.getProviderContainmentEndpointLocation())) {
index 6c5bf5df71f167555f573a767436d842d696d680..a95779a834ae7aff8276be1603f002d03431a6a7 100644 (file)
@@ -28,6 +28,7 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.groupbasedpolicy.renderer.vpp.api.BridgeDomainManager;
 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.Config;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.bridge.domain.base.attributes.PhysicalLocationRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.GbpBridgeDomain;
@@ -326,10 +327,21 @@ public class BridgeDomainManagerImpl implements BridgeDomainManager {
     public ListenableFuture<Void> removeBridgeDomainFromVppNode(@Nonnull final String bridgeDomainName,
                                                                 @Nonnull final NodeId vppNode) {
         LOG.info("Removing bridge domain {} from VPP node {}", bridgeDomainName, vppNode);
+        InstanceIdentifier<Topology> topologyIid =
+                VppIidFactory.getTopologyIid(new TopologyKey(new TopologyId(bridgeDomainName)));
+        ReadOnlyTransaction rTx = dataProvider.newReadOnlyTransaction();
+        Optional<Topology> topologyOpt =
+                DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, topologyIid, rTx);
         WriteTransaction wTx = dataProvider.newWriteOnlyTransaction();
         InstanceIdentifier<Node> nodeIid =
                 VppIidFactory.getNodeIid(new TopologyKey(new TopologyId(bridgeDomainName)), new NodeKey(vppNode));
         wTx.delete(LogicalDatastoreType.CONFIGURATION, nodeIid);
+        if (topologyOpt.isPresent()) {
+            Topology topology = topologyOpt.get();
+            if(topology.getNode() == null || topology.getNode().size() == 1) {
+                wTx.delete(LogicalDatastoreType.CONFIGURATION, topologyIid);
+            }
+        }
         SettableFuture<Void> future = SettableFuture.create();
         Futures.addCallback(wTx.submit(), new FutureCallback<Void>() {