Migrate elanmanager to use LoggingFutures
[netvirt.git] / elanmanager / impl / src / main / java / org / opendaylight / netvirt / elan / l2gw / utils / StaleVlanBindingsCleaner.java
index 56be989feeeb833bf6a86ff7cd26119e28cdc7bc..ea8e50cbf22a7a1ed15fe82826987352583d5127 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.netvirt.elan.l2gw.utils;
 
-import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION;
+import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -24,13 +24,13 @@ import java.util.stream.Collectors;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 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.data.LogicalDatastoreType;
+import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
+import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.utils.hwvtep.HwvtepSouthboundUtils;
-import org.opendaylight.infrautils.utils.concurrent.ListenableFutures;
+import org.opendaylight.infrautils.utils.concurrent.LoggingFutures;
 import org.opendaylight.netvirt.elan.cache.ElanInstanceCache;
-import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.netvirt.elan.utils.Scheduler;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayCache;
 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
@@ -54,24 +54,20 @@ public class StaleVlanBindingsCleaner {
     private static final Logger LOG = LoggerFactory.getLogger(StaleVlanBindingsCleaner.class);
     private static final int DEFAULT_STALE_CLEANUP_DELAY_SECS = 900;
 
-    private static Function<VlanBindings, String> LOGICAL_SWITCH_FROM_BINDING = (binding) -> {
-        InstanceIdentifier<LogicalSwitches> lsRef = (InstanceIdentifier<LogicalSwitches>)
-                binding.getLogicalSwitchRef().getValue();
-        return lsRef.firstKeyOf(LogicalSwitches.class).getHwvtepNodeName().getValue();
-    };
+    private static Function<VlanBindings, String> LOGICAL_SWITCH_FROM_BINDING =
+        (binding) -> binding.getLogicalSwitchRef().getValue().firstKeyOf(
+                LogicalSwitches.class).getHwvtepNodeName().getValue();
 
-    private static BiPredicate<List<String>, String> IS_STALE_LOGICAL_SWITCH = (validNetworks, logicalSwitch) -> {
-        return !validNetworks.contains(logicalSwitch);
-    };
+    private static BiPredicate<List<String>, String> IS_STALE_LOGICAL_SWITCH =
+        (validNetworks, logicalSwitch) -> !validNetworks.contains(logicalSwitch);
 
-    private static Predicate<TerminationPoint> CONTAINS_VLANBINDINGS = (port) -> {
-        return port.getAugmentation(HwvtepPhysicalPortAugmentation.class) != null
-                && port.getAugmentation(HwvtepPhysicalPortAugmentation.class).getVlanBindings() != null;
-    };
+    private static Predicate<TerminationPoint> CONTAINS_VLANBINDINGS = (port) ->
+            port.augmentation(HwvtepPhysicalPortAugmentation.class) != null
+                    && port.augmentation(HwvtepPhysicalPortAugmentation.class).getVlanBindings() != null;
 
 
     private final DataBroker broker;
-    private final ElanUtils elanUtils;
+    private final ManagedNewTransactionRunner txRunner;
     private final ElanL2GatewayUtils elanL2GatewayUtils;
     private final Scheduler scheduler;
     private final ElanConfig elanConfig;
@@ -81,14 +77,13 @@ public class StaleVlanBindingsCleaner {
 
     @Inject
     public StaleVlanBindingsCleaner(final DataBroker broker,
-                                    final ElanUtils elanUtils,
                                     final ElanL2GatewayUtils elanL2GatewayUtils,
                                     final Scheduler scheduler,
                                     final ElanConfig elanConfig,
                                     final L2GatewayCache l2GatewayCache,
                                     final ElanInstanceCache elanInstanceCache) {
         this.broker = broker;
-        this.elanUtils = elanUtils;
+        this.txRunner = new ManagedNewTransactionRunnerImpl(broker);
         this.elanL2GatewayUtils = elanL2GatewayUtils;
         this.scheduler = scheduler;
         this.elanConfig = elanConfig;
@@ -113,9 +108,10 @@ public class StaleVlanBindingsCleaner {
                 () -> {
                     L2GatewayDevice l2GwDevice = l2GatewayCache.get(deviceName);
                     NodeId globalNodeId = globalNodeIid.firstKeyOf(Node.class).getNodeId();
-                    Node configNode = MDSALUtil.read(broker, CONFIGURATION, globalNodeIid)
+                    Node configNode = MDSALUtil.read(broker, LogicalDatastoreType.CONFIGURATION, globalNodeIid)
                             .or(defaultNode(globalNodeId));
-                    Node configPsNode = MDSALUtil.read(broker, CONFIGURATION, psNodeIid).or(defaultNode(psNodeId));
+                    Node configPsNode =
+                        MDSALUtil.read(broker, LogicalDatastoreType.CONFIGURATION, psNodeIid).or(defaultNode(psNodeId));
                     cleanupStaleLogicalSwitches(l2GwDevice, configNode, configPsNode);
                     cleanupTasks.remove(psNodeIid.firstKeyOf(Node.class).getNodeId());
                 }, getCleanupDelay(), TimeUnit.SECONDS);
@@ -162,11 +158,9 @@ public class StaleVlanBindingsCleaner {
         Map<String, List<InstanceIdentifier<VlanBindings>>> vlans = new HashMap<>();
         ports.stream()
                 .filter(CONTAINS_VLANBINDINGS)
-                .forEach((port) -> {
-                    port.getAugmentation(HwvtepPhysicalPortAugmentation.class)
-                            .getVlanBindings()
-                            .forEach((binding) -> putVlanBindingVsLogicalSwitch(configPsNode, vlans, port, binding));
-                });
+                .forEach((port) -> port.augmentation(HwvtepPhysicalPortAugmentation.class)
+                        .getVlanBindings()
+                        .forEach((binding) -> putVlanBindingVsLogicalSwitch(configPsNode, vlans, port, binding)));
         return vlans;
     }
 
@@ -183,9 +177,9 @@ public class StaleVlanBindingsCleaner {
                                                            final TerminationPoint tp,
                                                            final VlanBindings vlanBinding) {
         return HwvtepSouthboundUtils.createInstanceIdentifier(nodeId)
-                .child(TerminationPoint.class, tp.getKey())
+                .child(TerminationPoint.class, tp.key())
                 .augmentation(HwvtepPhysicalPortAugmentation.class)
-                .child(VlanBindings.class, vlanBinding.getKey());
+                .child(VlanBindings.class, vlanBinding.key());
     }
 
     private void cleanupStaleBindings(final String globalNodeId,
@@ -193,18 +187,18 @@ public class StaleVlanBindingsCleaner {
                                       final String staleLogicalSwitch) {
 
         LOG.trace("CleanupStaleBindings for logical switch {}", staleLogicalSwitch);
-        ReadWriteTransaction tx = broker.newReadWriteTransaction();
-        if (vlans.containsKey(staleLogicalSwitch)) {
-            vlans.get(staleLogicalSwitch)
-                    .forEach((vlanIid) -> tx.delete(LogicalDatastoreType.CONFIGURATION, vlanIid));
-        }
-        ListenableFutures.addErrorLogging(tx.submit(), LOG,
-                "Failed to delete stale vlan bindings from node {}", globalNodeId);
+        LoggingFutures.addErrorLogging(
+            txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION, tx -> {
+                if (vlans.containsKey(staleLogicalSwitch)) {
+                    vlans.get(staleLogicalSwitch).forEach((vlanIid) -> tx.delete(vlanIid));
+                }
+            }),
+            LOG, "Failed to delete stale vlan bindings from node {}", globalNodeId);
         elanL2GatewayUtils.scheduleDeleteLogicalSwitch(new NodeId(globalNodeId), staleLogicalSwitch, true);
     }
 
     private List<String> getLogicalSwitchesOnDevice(final Node globalConfigNode) {
-        HwvtepGlobalAugmentation augmentation = globalConfigNode.getAugmentation(HwvtepGlobalAugmentation.class);
+        HwvtepGlobalAugmentation augmentation = globalConfigNode.augmentation(HwvtepGlobalAugmentation.class);
         if (augmentation == null || augmentation.getLogicalSwitches() == null) {
             return Collections.emptyList();
         }