Merge "allow EpPolicyTemplate without conditions"
authorMartin Sunal <msunal@cisco.com>
Wed, 6 Jul 2016 15:12:19 +0000 (15:12 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 6 Jul 2016 15:12:19 +0000 (15:12 +0000)
neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortHandler.java
neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortHandlerTest.java
renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/iface/InterfaceManager.java
renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/iface/VppEndpointLocationProvider.java
renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/BridgeDomainManagerImpl.java
renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/ForwardingManager.java
renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/VppRendererPolicyManager.java

index 74a0f6be9b417fb226ef8eb20825fd12e34ff5de..687fd0b5c1d4997cde97235855bd50fb1e2479f1 100644 (file)
@@ -11,13 +11,11 @@ package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors;
 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;\r
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
-import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;\r
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
 import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;\r
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChain;\r
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;\r
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;\r
 import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo;\r
 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;\r
@@ -37,11 +35,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.por
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortKey;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;\r
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;\r
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;\r
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;\r
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;\r
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;\r
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
@@ -72,9 +70,10 @@ public class PortHandler implements TransactionChainListener {
     }\r
 \r
     void processCreated(Port port) {\r
-        ReadTransaction rTx = dataBroker.newReadOnlyTransaction();\r
+        ReadOnlyTransaction rTx = transactionChain.newReadOnlyTransaction();\r
         Optional<BaseEndpointByPort> optBaseEpByPort = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,\r
                 createBaseEpByPortIid(port.getUuid()), rTx);\r
+        rTx.close();\r
         if (!optBaseEpByPort.isPresent()) {\r
             return;\r
         }\r
@@ -82,9 +81,10 @@ public class PortHandler implements TransactionChainListener {
     }\r
 \r
     void processCreated(BaseEndpointByPort bebp) {\r
-        ReadTransaction rTx = dataBroker.newReadOnlyTransaction();\r
+        ReadOnlyTransaction rTx = transactionChain.newReadOnlyTransaction();\r
         Optional<Port> optPort = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
                 createPortIid(bebp.getPortId()), rTx);\r
+        rTx.close();\r
         if (!optPort.isPresent()) {\r
             return;\r
         }\r
@@ -120,7 +120,7 @@ public class PortHandler implements TransactionChainListener {
 \r
     void processUpdated(Port original, Port delta) {\r
         if (isValidVhostUser(original)) {\r
-            ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();\r
+            ReadOnlyTransaction rTx = transactionChain.newReadOnlyTransaction();\r
             Optional<BaseEndpointByPort> optBebp = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,\r
                     createBaseEpByPortIid(original.getUuid()), rTx);\r
             rTx.close();\r
@@ -145,20 +145,14 @@ public class PortHandler implements TransactionChainListener {
         }\r
     }\r
 \r
-    private void writeVppEndpoint(InstanceIdentifier<VppEndpoint> vppEpIid, VppEndpoint vppEp) {\r
+    private synchronized void writeVppEndpoint(InstanceIdentifier<VppEndpoint> vppEpIid, VppEndpoint vppEp) {\r
         WriteTransaction wTx = transactionChain.newWriteOnlyTransaction();\r
         if (vppEp != null) {\r
             wTx.put(LogicalDatastoreType.CONFIGURATION, vppEpIid, vppEp, true);\r
         } else {\r
             wTx.delete(LogicalDatastoreType.CONFIGURATION, vppEpIid);\r
         }\r
-        try {\r
-            wTx.submit().checkedGet();\r
-        } catch (TransactionCommitFailedException e) {\r
-            LOG.error("Transaction chain commit failed. {}", e);\r
-            transactionChain.close();\r
-            transactionChain = dataBroker.createTransactionChain(this);\r
-        }\r
+        wTx.submit();\r
     }\r
 \r
     @VisibleForTesting\r
@@ -214,7 +208,8 @@ public class PortHandler implements TransactionChainListener {
     @Override\r
     public void onTransactionChainFailed(TransactionChain<?, ?> chain, AsyncTransaction<?, ?> transaction,\r
             Throwable cause) {\r
-        LOG.error("Transaction chain failed. {}", cause.getMessage());\r
+        LOG.error("Transaction chain failed. {} \nTransaction which caused the chain to fail {}", cause.getMessage(),\r
+                transaction, cause);\r
         transactionChain.close();\r
         transactionChain = dataBroker.createTransactionChain(this);\r
     }\r
index 7180b26c004d1ac0653b5f6a009a3f6e72765327..5aae2bc853b91a4d11e8344eb9eba093b53bbca4 100644 (file)
@@ -10,12 +10,10 @@ package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertNotNull;
-import static org.mockito.Mockito.any;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import org.junit.Before;
@@ -142,8 +140,6 @@ public class PortHandlerTest extends AbstractDataBrokerTest {
         ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
         Optional<VppEndpoint> optVppEp = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
                 TestUtils.createVppEpIid(TestUtils.createVppEndpointKey(bebp)), rTx);
-        verify(transactionChain).newReadOnlyTransaction();
-        verify(transactionChain, times(2)).newWriteOnlyTransaction();
         assertTrue(optVppEp.isPresent());
     }
 
@@ -158,10 +154,6 @@ public class PortHandlerTest extends AbstractDataBrokerTest {
         ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
         Optional<VppEndpoint> optVppEp = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
                 TestUtils.createVppEpIid(TestUtils.createVppEndpointKey(bebp)), rTx);
-        // looks for existing Vpp endpoint
-        verify(transactionChain).newReadOnlyTransaction();
-        // only removes former valid vpp endpoint
-        verify(transactionChain).newWriteOnlyTransaction();
         assertFalse(optVppEp.isPresent());
     }
 
@@ -175,8 +167,6 @@ public class PortHandlerTest extends AbstractDataBrokerTest {
         Optional<VppEndpoint> optVppEp = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
                 TestUtils.createVppEpIid(TestUtils.createVppEndpointKey(bebp)), rTx);
         assertFalse(optVppEp.isPresent());
-        verify(transactionChain).newReadOnlyTransaction();
-        verify(transactionChain).newWriteOnlyTransaction();
     }
 
     private void putVppEp(Port port, BaseEndpointByPort bebp, WriteTransaction rwTx) {
index 3cda5aecd6ed80490a39f458161db351d072e00a..5340f929865337cc066ffb7c5e022fb1a4b2718a 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.groupbasedpolicy.renderer.vpp.iface;
 
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 
 import javax.annotation.Nonnull;
@@ -24,6 +25,7 @@ import org.opendaylight.groupbasedpolicy.renderer.vpp.event.NodeOperEvent;
 import org.opendaylight.groupbasedpolicy.renderer.vpp.event.VppEndpointConfEvent;
 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General.Operations;
 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.MountedDataBrokerProvider;
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.LocationType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCase;
@@ -43,14 +45,12 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.eventbus.Subscribe;
 import com.google.common.util.concurrent.AsyncFunction;
 import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -69,90 +69,84 @@ public class InterfaceManager implements AutoCloseable {
 
     @Subscribe
     public synchronized void vppEndpointChanged(VppEndpointConfEvent event) {
-        switch (event.getDtoModificationType()) {
-            case CREATED:
-                vppEndpointCreated(event.getAfter().get());
-                break;
-            case UPDATED:
-                vppEndpointDeleted(event.getBefore().get());
-                vppEndpointCreated(event.getAfter().get());
-                break;
-            case DELETED:
-                vppEndpointDeleted(event.getBefore().get());
-                break;
+        try {
+            switch (event.getDtoModificationType()) {
+                case CREATED:
+                    vppEndpointCreated(event.getAfter().get()).get();
+                    break;
+                case UPDATED:
+                    vppEndpointDeleted(event.getBefore().get()).get();
+                    vppEndpointCreated(event.getAfter().get()).get();
+                    break;
+                case DELETED:
+                    vppEndpointDeleted(event.getBefore().get()).get();
+                    break;
+            }
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Failed to update Vpp Endpoint. {}", e);
+            e.printStackTrace();
         }
     }
 
-    private void vppEndpointCreated(VppEndpoint vppEndpoint) {
+    private ListenableFuture<Void> vppEndpointCreated(VppEndpoint vppEndpoint) {
         Optional<ConfigCommand> potentialIfaceCommand = createInterfaceWithoutBdCommand(vppEndpoint, Operations.PUT);
         if (!potentialIfaceCommand.isPresent()) {
-            return;
+            return Futures.immediateFuture(null);
         }
         ConfigCommand ifaceWithoutBdCommand = potentialIfaceCommand.get();
         InstanceIdentifier<?> vppNodeIid = vppEndpoint.getVppNodePath();
         Optional<DataBroker> potentialVppDataProvider = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);
         if (!potentialVppDataProvider.isPresent()) {
             LOG.debug("Cannot get data broker for mount point {}", vppNodeIid);
-            return;
+            Futures.immediateFuture(null);
         }
         DataBroker vppDataBroker = potentialVppDataProvider.get();
-        createIfaceOnVpp(ifaceWithoutBdCommand, vppDataBroker, vppEndpoint, vppNodeIid);
+        return createIfaceOnVpp(ifaceWithoutBdCommand, vppDataBroker, vppEndpoint, vppNodeIid);
     }
 
-    private void createIfaceOnVpp(ConfigCommand createIfaceWithoutBdCommand, DataBroker vppDataBroker,
-            VppEndpoint vppEndpoint, InstanceIdentifier<?> vppNodeIid) {
+    private ListenableFuture<Void> createIfaceOnVpp(ConfigCommand createIfaceWithoutBdCommand,
+            DataBroker vppDataBroker, VppEndpoint vppEndpoint, InstanceIdentifier<?> vppNodeIid) {
         ReadWriteTransaction rwTx = vppDataBroker.newReadWriteTransaction();
         createIfaceWithoutBdCommand.execute(rwTx);
-        Futures.addCallback(rwTx.submit(), new FutureCallback<Void>() {
+        return Futures.transform(rwTx.submit(), new AsyncFunction<Void, Void>() {
 
             @Override
-            public void onSuccess(Void result) {
+            public ListenableFuture<Void> apply(Void input) {
                 LOG.debug("Create interface on VPP command was successful:\nVPP: {}\nCommand: {}", vppNodeIid,
                         createIfaceWithoutBdCommand);
-                vppEndpointLocationProvider.createLocationForVppEndpoint(vppEndpoint);
-            }
-
-            @Override
-            public void onFailure(Throwable t) {
-                LOG.error("Create interface on VPP command was NOT successful:\nVPP: {}\nCommand: {}", vppNodeIid,
-                        createIfaceWithoutBdCommand, t);
+                return vppEndpointLocationProvider.createLocationForVppEndpoint(vppEndpoint);
             }
         }, netconfWorker);
     }
 
-    private void vppEndpointDeleted(VppEndpoint vppEndpoint) {
+    private ListenableFuture<Void> vppEndpointDeleted(VppEndpoint vppEndpoint) {
         Optional<ConfigCommand> potentialIfaceCommand = createInterfaceWithoutBdCommand(vppEndpoint, Operations.DELETE);
         if (!potentialIfaceCommand.isPresent()) {
-            return;
+            return Futures.immediateFuture(null);
         }
         ConfigCommand ifaceWithoutBdCommand = potentialIfaceCommand.get();
         InstanceIdentifier<?> vppNodeIid = vppEndpoint.getVppNodePath();
         Optional<DataBroker> potentialVppDataProvider = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);
         if (!potentialVppDataProvider.isPresent()) {
             LOG.debug("Cannot get data broker for mount point {}", vppNodeIid);
-            return;
+            return Futures.immediateFuture(null);
         }
         DataBroker vppDataBroker = potentialVppDataProvider.get();
-        deleteIfaceOnVpp(ifaceWithoutBdCommand, vppDataBroker, vppEndpoint, vppNodeIid);
+        return deleteIfaceOnVpp(ifaceWithoutBdCommand, vppDataBroker, vppEndpoint, vppNodeIid);
     }
 
-    private void deleteIfaceOnVpp(ConfigCommand deleteIfaceWithoutBdCommand, DataBroker vppDataBroker,
-            VppEndpoint vppEndpoint, InstanceIdentifier<?> vppNodeIid) {
+    private ListenableFuture<Void> deleteIfaceOnVpp(ConfigCommand deleteIfaceWithoutBdCommand,
+            DataBroker vppDataBroker, VppEndpoint vppEndpoint, InstanceIdentifier<?> vppNodeIid) {
         ReadWriteTransaction rwTx = vppDataBroker.newReadWriteTransaction();
         deleteIfaceWithoutBdCommand.execute(rwTx);
-        Futures.addCallback(rwTx.submit(), new FutureCallback<Void>() {
+
+        return Futures.transform(rwTx.submit(), new AsyncFunction<Void, Void>() {
 
             @Override
-            public void onSuccess(Void result) {
+            public ListenableFuture<Void> apply(Void input) {
                 LOG.debug("Delete interface on VPP command was successful:\nVPP: {}\nCommand: {}", vppNodeIid,
                         deleteIfaceWithoutBdCommand);
-                vppEndpointLocationProvider.deleteLocationForVppEndpoint(vppEndpoint);
-            }
-
-            @Override
-            public void onFailure(Throwable t) {
-                LOG.error("Delete interface on VPP command was NOT successful:\nVPP: {}\nCommand: {}", vppNodeIid,
-                        deleteIfaceWithoutBdCommand, t);
+                return vppEndpointLocationProvider.deleteLocationForVppEndpoint(vppEndpoint);
             }
         }, netconfWorker);
     }
@@ -255,7 +249,7 @@ public class InterfaceManager implements AutoCloseable {
                     LOG.debug("Bridge domain {} already exists on interface {}", bridgeDomainName, interfacePath);
                     String bridgeDomainPath = VppPathMapper.bridgeDomainToRestPath(bridgeDomainName);
                     if (!bridgeDomainPath.equals(epLoc.getExternalNode())) {
-                        vppEndpointLocationProvider.replaceLocationForEndpoint(new ExternalLocationCaseBuilder()
+                        return vppEndpointLocationProvider.replaceLocationForEndpoint(new ExternalLocationCaseBuilder()
                             .setExternalNode(bridgeDomainPath)
                             .setExternalNodeMountPoint(vppNodeIid)
                             .setExternalNodeConnector(interfacePath)
@@ -266,21 +260,21 @@ public class InterfaceManager implements AutoCloseable {
 
                 InstanceIdentifier<L2> l2Iid =
                         interfaceIid.builder().augmentation(VppInterfaceAugmentation.class).child(L2.class).build();
-                L2 l2 = new L2Builder()
-                    .setInterconnection(new BridgeBasedBuilder().setBridgeDomain(bridgeDomainName).build()).build();
-                rwTx.merge(LogicalDatastoreType.CONFIGURATION, l2Iid, l2);
+                Optional<L2> optL2 = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, l2Iid, rwTx);
+                L2Builder l2Builder = (optL2.isPresent()) ? new L2Builder(optL2.get()) : new L2Builder();
+                L2 l2 = l2Builder.setInterconnection(new BridgeBasedBuilder().setBridgeDomain(bridgeDomainName).build()).build();
+                rwTx.put(LogicalDatastoreType.CONFIGURATION, l2Iid, l2);
                 LOG.debug("Adding bridge domain {} to interface {}", bridgeDomainName, interfacePath);
-                return Futures.transform(rwTx.submit(), new Function<Void, Void>() {
+                return Futures.transform(rwTx.submit(), new AsyncFunction<Void, Void>() {
 
                     @Override
-                    public Void apply(Void input) {
+                    public ListenableFuture<Void> apply(Void input) {
                         String bridgeDomainPath = VppPathMapper.bridgeDomainToRestPath(bridgeDomainName);
-                        vppEndpointLocationProvider.replaceLocationForEndpoint(new ExternalLocationCaseBuilder()
+                        return vppEndpointLocationProvider.replaceLocationForEndpoint(new ExternalLocationCaseBuilder()
                                 .setExternalNode(bridgeDomainPath)
                                 .setExternalNodeMountPoint(vppNodeIid)
                                 .setExternalNodeConnector(interfacePath)
                                 .build(), addrEpWithLoc.getKey());
-                        return null;
                     }
                 }, netconfWorker);
             }
@@ -339,28 +333,26 @@ public class InterfaceManager implements AutoCloseable {
                     LOG.debug("Bridge domain does not exist therefore it is cosidered as"
                             + "deleted for interface {}", interfacePath);
                     // bridge domain does not exist on interface so we consider job done
-                    vppEndpointLocationProvider.replaceLocationForEndpoint(new ExternalLocationCaseBuilder()
+                    return vppEndpointLocationProvider.replaceLocationForEndpoint(new ExternalLocationCaseBuilder()
                             .setExternalNode(null)
                             .setExternalNodeMountPoint(vppNodeIid)
                             .setExternalNodeConnector(interfacePath)
                             .build(), addrEpWithLoc.getKey());
-                    return Futures.immediateFuture(null);
                 }
 
                 InstanceIdentifier<L2> l2Iid =
                         interfaceIid.builder().augmentation(VppInterfaceAugmentation.class).child(L2.class).build();
                 rwTx.delete(LogicalDatastoreType.CONFIGURATION, l2Iid);
                 LOG.debug("Deleting bridge domain from interface {}", interfacePath);
-                return Futures.transform(rwTx.submit(), new Function<Void, Void>() {
+                return Futures.transform(rwTx.submit(), new AsyncFunction<Void, Void>() {
 
                     @Override
-                    public Void apply(Void input) {
-                        vppEndpointLocationProvider.replaceLocationForEndpoint(new ExternalLocationCaseBuilder()
+                    public ListenableFuture<Void> apply(Void input) {
+                        return vppEndpointLocationProvider.replaceLocationForEndpoint(new ExternalLocationCaseBuilder()
                                 .setExternalNode(null)
                                 .setExternalNodeMountPoint(vppNodeIid)
                                 .setExternalNodeConnector(interfacePath)
                                 .build(), addrEpWithLoc.getKey());
-                        return null;
                     }
                 }, netconfWorker);
             }
@@ -394,11 +386,11 @@ public class InterfaceManager implements AutoCloseable {
 
     private static boolean hasNodeAndInterface(VppEndpoint vppEp) {
         if (vppEp.getVppNodePath() == null) {
-            LOG.trace("vpp-node is missing. {}", vppEp);
+            LOG.debug("vpp-node is missing. {}", vppEp);
             return false;
         }
         if (Strings.isNullOrEmpty(vppEp.getVppInterfaceName())) {
-            LOG.trace("vpp-interface-name is missing. {}", vppEp);
+            LOG.debug("vpp-interface-name is missing. {}", vppEp);
             return false;
         }
         return true;
index 02b719b7848e3b6abc78ef7e5b886806e928dbef..eabc270e6855c0c873c2220b8d24b4e1b3c3a832 100644 (file)
@@ -34,8 +34,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_render
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Function;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 
 public class VppEndpointLocationProvider implements AutoCloseable {
 
@@ -69,27 +71,20 @@ public class VppEndpointLocationProvider implements AutoCloseable {
         });
     }
 
-    public void createLocationForVppEndpoint(VppEndpoint vppEndpoint) {
-        ProviderAddressEndpointLocation providerAddressEndpointLocation =
-                createProviderAddressEndpointLocation(vppEndpoint);
+    public ListenableFuture<Void> createLocationForVppEndpoint(VppEndpoint vppEndpoint) {
+        ProviderAddressEndpointLocation providerAddressEndpointLocation = createProviderAddressEndpointLocation(vppEndpoint);
         WriteTransaction wTx = txChain.newWriteOnlyTransaction();
-        wTx.put(LogicalDatastoreType.CONFIGURATION,
-                IidFactory.providerAddressEndpointLocationIid(VPP_ENDPOINT_LOCATION_PROVIDER,
-                        providerAddressEndpointLocation.getKey()),
+        wTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.providerAddressEndpointLocationIid(
+                VPP_ENDPOINT_LOCATION_PROVIDER, providerAddressEndpointLocation.getKey()),
                 providerAddressEndpointLocation);
         LOG.debug("Creating location for {}", providerAddressEndpointLocation.getKey());
-        Futures.addCallback(wTx.submit(), new FutureCallback<Void>() {
+        return Futures.transform(wTx.submit(), new Function<Void, Void>() {
 
             @Override
-            public void onSuccess(Void result) {
+            public Void apply(Void input) {
                 LOG.debug("{} provided location: {}", VPP_ENDPOINT_LOCATION_PROVIDER.getValue(),
                         providerAddressEndpointLocation);
-            }
-
-            @Override
-            public void onFailure(Throwable t) {
-                LOG.error("{} failed to provide location: {}", VPP_ENDPOINT_LOCATION_PROVIDER.getValue(),
-                        providerAddressEndpointLocation, t);
+                return null;
             }
         });
     }
@@ -107,23 +102,18 @@ public class VppEndpointLocationProvider implements AutoCloseable {
             .build();
     }
 
-    public void deleteLocationForVppEndpoint(VppEndpoint vppEndpoint) {
+    public ListenableFuture<Void> deleteLocationForVppEndpoint(VppEndpoint vppEndpoint) {
         ProviderAddressEndpointLocationKey provAddrEpLocKey = createProviderAddressEndpointLocationKey(vppEndpoint);
         WriteTransaction wTx = txChain.newWriteOnlyTransaction();
         wTx.delete(LogicalDatastoreType.CONFIGURATION,
                 IidFactory.providerAddressEndpointLocationIid(VPP_ENDPOINT_LOCATION_PROVIDER, provAddrEpLocKey));
         LOG.debug("Deleting location for {}", provAddrEpLocKey);
-        Futures.addCallback(wTx.submit(), new FutureCallback<Void>() {
+        return Futures.transform(wTx.submit(), new Function<Void, Void>() {
 
             @Override
-            public void onSuccess(Void result) {
+            public Void apply(Void input) {
                 LOG.debug("{} removed location: {}", VPP_ENDPOINT_LOCATION_PROVIDER.getValue(), provAddrEpLocKey);
-            }
-
-            @Override
-            public void onFailure(Throwable t) {
-                LOG.error("{} failed to remove location: {}", VPP_ENDPOINT_LOCATION_PROVIDER.getValue(),
-                        provAddrEpLocKey, t);
+                return null;
             }
         });
     }
@@ -134,7 +124,7 @@ public class VppEndpointLocationProvider implements AutoCloseable {
                 vppEndpoint.getContextId(), vppEndpoint.getContextType());
     }
 
-    public void replaceLocationForEndpoint(@Nonnull ExternalLocationCase location, @Nonnull AddressEndpointWithLocationKey addrEpWithLocKey) {
+    public ListenableFuture<Void> replaceLocationForEndpoint(@Nonnull ExternalLocationCase location, @Nonnull AddressEndpointWithLocationKey addrEpWithLocKey) {
         ProviderAddressEndpointLocationKey provAddrEpLocKey =
                 KeyFactory.providerAddressEndpointLocationKey(addrEpWithLocKey);
         AbsoluteLocation absoluteLocation =
@@ -147,18 +137,13 @@ public class VppEndpointLocationProvider implements AutoCloseable {
                         providerAddressEndpointLocation.getKey()),
                 providerAddressEndpointLocation);
         LOG.debug("Updating location for {}", provAddrEpLocKey);
-        Futures.addCallback(wTx.submit(), new FutureCallback<Void>() {
+        return Futures.transform(wTx.submit(), new Function<Void, Void>() {
 
             @Override
-            public void onSuccess(Void result) {
+            public Void apply(Void input) {
                 LOG.debug("{} replaced location: {}", VPP_ENDPOINT_LOCATION_PROVIDER.getValue(),
                         providerAddressEndpointLocation);
-            }
-
-            @Override
-            public void onFailure(Throwable t) {
-                LOG.error("{} failed to replace location: {}", VPP_ENDPOINT_LOCATION_PROVIDER.getValue(),
-                        providerAddressEndpointLocation, t);
+                return null;
             }
         });
     }
index e57aed4ad87fbc6956f264a3d1082e850e4fdb9c..54f2b8d0da3ab96708ad832407fa3bcb3214009b 100644 (file)
@@ -97,7 +97,7 @@ public class BridgeDomainManagerImpl implements BridgeDomainManager {
             this.modificationForFutureSet = Preconditions.checkNotNull(modificationForFutureSet);
             this.iid = Preconditions.checkNotNull(iid);
             registeredListener = dataProvider.registerDataTreeChangeListener(iid, this);
-            LOG.trace("Registered listener for path {}", iid.getRootIdentifier());
+            LOG.debug("Registered listener for path {}", iid.getRootIdentifier());
         }
 
         @Override
@@ -114,7 +114,7 @@ public class BridgeDomainManagerImpl implements BridgeDomainManager {
 
         private void unregisterOnTrue(boolean _true) {
             if (_true) {
-                LOG.trace("Unregistering listener for path {}", iid.getRootIdentifier());
+                LOG.debug("Unregistering listener for path {}", iid.getRootIdentifier());
                 if (registeredListener != null) {
                     registeredListener.close();
                 }
index dd04d7735813a9d755589b1e407cff22bab6e8b9..6e7ed5a1717898c33c32bcf13679597d77b72b1e 100644 (file)
@@ -105,7 +105,7 @@ public final class ForwardingManager {
     private void createVxlanBridgeDomains(String bd, VxlanVni vni, Set<NodeId> vppNodes) {
         for (NodeId vppNode : vppNodes) {
             try {
-                LOG.trace("Creating VXLAN bridge-domain {} on node {} with VNI {}", bd, vppNode.getValue(),
+                LOG.debug("Creating VXLAN bridge-domain {} on node {} with VNI {}", bd, vppNode.getValue(),
                         vni);
                 // TODO think about propagating ListenableFuture - timeout set as workaround
                 bdManager.createVxlanBridgeDomainOnVppNode(bd, vni, vppNode).get(WAIT_FOR_BD_CREATION,
@@ -122,7 +122,7 @@ public final class ForwardingManager {
     private void createVlanBridgeDomains(String bd, VlanId vlanId, Set<NodeId> vppNodes) {
         for (NodeId vppNode : vppNodes) {
             try {
-                LOG.trace("Creating VLAN bridge-domain {} on node {} with VLAN ID {}", bd, vppNode.getValue(),
+                LOG.debug("Creating VLAN bridge-domain {} on node {} with VLAN ID {}", bd, vppNode.getValue(),
                         vlanId.getValue());
                 // TODO think about propagating ListenableFuture - timeout set as workaround
                 bdManager.createVlanBridgeDomainOnVppNode(bd, vlanId, vppNode).get(WAIT_FOR_BD_CREATION,
index 85d4205e3a73f6de7e29da086ea42dc82bada8d9..4ab79e399c87391df4b37fad819eff229d3acf67 100644 (file)
@@ -65,12 +65,12 @@ public class VppRendererPolicyManager {
         RendererPolicyBuilder responseBuilder = new RendererPolicyBuilder();
         switch (event.getDtoModificationType()) {
             case CREATED:
-                LOG.trace("CREATED : {}", event.getIid());
+                LOG.debug("CREATED : {}", event.getIid());
                 responseBuilder.setVersion(event.getAfter().get().getVersion());
                 rendererPolicyCreated(event.getAfter().get());
                 break;
             case UPDATED:
-                LOG.trace("UPDATED: {}", event.getIid());
+                LOG.debug("UPDATED: {}", event.getIid());
                 RendererPolicy rPolicyBefore = event.getBefore().get();
                 RendererPolicy rPolicyAfter = event.getAfter().get();
                 responseBuilder.setVersion(rPolicyAfter.getVersion());
@@ -83,7 +83,7 @@ public class VppRendererPolicyManager {
                 }
                 break;
             case DELETED:
-                LOG.trace("DELETED: {}", event.getIid());
+                LOG.debug("DELETED: {}", event.getIid());
                 responseBuilder.setVersion(event.getBefore().get().getVersion());
                 rendererPolicyDeleted(event.getBefore().get());
                 break;
@@ -151,20 +151,20 @@ public class VppRendererPolicyManager {
         ImmutableSet<RendererEndpointKey> rendEpsAfter = policyCtxAfter.getPolicyTable().rowKeySet();
 
         SetView<RendererEndpointKey> removedRendEps = Sets.difference(rendEpsBefore, rendEpsAfter);
-        LOG.trace("Removed renderer endpoints {}", removedRendEps);
+        LOG.debug("Removed renderer endpoints {}", removedRendEps);
         removedRendEps.forEach(rEpKey -> fwManager.removeForwardingForEndpoint(rEpKey, policyCtxBefore));
 
-        LOG.trace("Removed bridge domains on nodes {}", removedVppNodesByL2Fd);
-        LOG.trace("Created bridge domains on nodes {}", createdVppNodesByL2Fd);
+        LOG.debug("Removed bridge domains on nodes {}", removedVppNodesByL2Fd);
+        LOG.debug("Created bridge domains on nodes {}", createdVppNodesByL2Fd);
         fwManager.removeBridgeDomainOnNodes(removedVppNodesByL2Fd);
         fwManager.createBridgeDomainOnNodes(createdVppNodesByL2Fd);
 
         SetView<RendererEndpointKey> createdRendEps = Sets.difference(rendEpsAfter, rendEpsBefore);
-        LOG.trace("Created renderer endpoints {}", createdRendEps);
+        LOG.debug("Created renderer endpoints {}", createdRendEps);
         createdRendEps.forEach(rEpKey -> fwManager.createForwardingForEndpoint(rEpKey, policyCtxAfter));
 
         SetView<RendererEndpointKey> updatedRendEps = Sets.intersection(rendEpsBefore, rendEpsAfter);
-        LOG.trace("Updated renderer endpoints {}", updatedRendEps);
+        LOG.debug("Updated renderer endpoints {}", updatedRendEps);
         // update forwarding for endpoint
         updatedRendEps.forEach(rEpKey -> {
             AddressEndpointWithLocation addrEpWithLocBefore =
@@ -173,7 +173,7 @@ public class VppRendererPolicyManager {
                     policyCtxAfter.getAddrEpByKey().get(KeyFactory.addressEndpointKey(rEpKey));
             if (isLocationChanged(addrEpWithLocBefore, addrEpWithLocAfter)) {
                 LOG.debug("Location is changed in endpoint {}", rEpKey);
-                LOG.trace("\nLocation before: {}\nLocation after: {}", addrEpWithLocBefore.getAbsoluteLocation(),
+                LOG.debug("\nLocation before: {}\nLocation after: {}", addrEpWithLocBefore.getAbsoluteLocation(),
                         addrEpWithLocAfter.getAbsoluteLocation());
                 fwManager.removeForwardingForEndpoint(rEpKey, policyCtxBefore);
                 fwManager.createForwardingForEndpoint(rEpKey, policyCtxAfter);