BUG-4794: use the transaction invoker for hwvtep 87/33687/1
authorStephen Kitt <skitt@redhat.com>
Thu, 28 Jan 2016 09:51:38 +0000 (10:51 +0100)
committerStephen Kitt <skitt@redhat.com>
Thu, 28 Jan 2016 09:54:21 +0000 (09:54 +0000)
HwvtepConnectionManager can delete a connection without going through
the transaction invoker. This patch fixes this and removes the
now-obsolete deleteNode method from HwvtepSouthboundUtil.

Change-Id: I623016599a7de2cc7e6edf72865e10af452f3a8b
Signed-off-by: Stephen Kitt <skitt@redhat.com>
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionManager.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundUtil.java

index f8e733a62f8d77d4e980cdb0fd311ed240a283ad..85a83662da53b60f8c6b474945f2474a588d7f53 100644 (file)
@@ -30,7 +30,9 @@ import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipL
 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListenerRegistration;
 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.LogicalDatastoreType;
 import org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md.HwvtepGlobalRemoveCommand;
+import org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md.TransactionCommand;
 import org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md.TransactionInvoker;
 import org.opendaylight.ovsdb.lib.OvsdbClient;
 import org.opendaylight.ovsdb.lib.OvsdbConnectionListener;
@@ -406,11 +408,16 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
     }
 
     private void cleanEntityOperationalData(Entity entity) {
-        InstanceIdentifier<Node> nodeIid = (InstanceIdentifier<Node>) HwvtepSouthboundUtil
-                .getInstanceIdentifierCodec().bindingDeserializer(entity.getId());
-
-        final ReadWriteTransaction transaction = db.newReadWriteTransaction();
-        HwvtepSouthboundUtil.deleteNode(transaction, nodeIid);
+        @SuppressWarnings("unchecked") final InstanceIdentifier<Node> nodeIid =
+                (InstanceIdentifier<Node>) HwvtepSouthboundUtil
+                        .getInstanceIdentifierCodec().bindingDeserializer(entity.getId());
+
+        txInvoker.invoke(new TransactionCommand() {
+            @Override
+            public void execute(ReadWriteTransaction transaction) {
+                transaction.delete(LogicalDatastoreType.OPERATIONAL, nodeIid);
+            }
+        });
     }
 
     private HwvtepConnectionInstance getConnectionInstanceFromEntity(Entity entity) {
index 0c1e3dc8ec6384ea16426cba0b313632f7cfad4c..bf9d08e8c20dda363505d66eb40be248eaf8125d 100644 (file)
@@ -72,20 +72,6 @@ public class HwvtepSouthboundUtil {
         return node;
     }
 
-    public static <D extends org.opendaylight.yangtools.yang.binding.DataObject> boolean deleteNode(
-                    ReadWriteTransaction transaction, final InstanceIdentifier<D> connectionIid) {
-        boolean result = false;
-        transaction.delete(LogicalDatastoreType.OPERATIONAL, connectionIid);
-        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
-        try {
-            future.checkedGet();
-            result = true;
-        } catch (TransactionCommitFailedException e) {
-            LOG.warn("Failed to delete {} ", connectionIid, e);
-        }
-        return result;
-    }
-
     public static Optional<HwvtepGlobalAugmentation> getManagingNode(DataBroker db,
                     HwvtepPhysicalSwitchAttributes pNode) {
         Preconditions.checkNotNull(pNode);