Remove GENIUS UTIL references in Elanmanager Module
[netvirt.git] / elanmanager / impl / src / main / java / org / opendaylight / netvirt / elan / utils / TransportZoneNotificationUtil.java
index 5f26e458f6cdcf0b257deb6c5f135eba9f3c6e25..863fd39aecb773e29ac31c0b6e63363f5338d0a1 100644 (file)
@@ -7,19 +7,19 @@
  */
 package org.opendaylight.netvirt.elan.utils;
 
-import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
+import static org.opendaylight.mdsal.binding.util.Datastore.CONFIGURATION;
 
-import com.google.common.base.Optional;
 import com.google.common.collect.MapDifference;
 import com.google.common.collect.MapDifference.ValueDifference;
 import com.google.common.collect.Maps;
-import java.math.BigInteger;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
@@ -27,24 +27,22 @@ import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
-import org.opendaylight.genius.infra.Datastore.Configuration;
-import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
-import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
-import org.opendaylight.genius.infra.TypedReadTransaction;
-import org.opendaylight.genius.infra.TypedReadWriteTransaction;
-import org.opendaylight.genius.infra.TypedWriteTransaction;
 import org.opendaylight.infrautils.utils.concurrent.LoggingFutures;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.util.Datastore.Configuration;
+import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunner;
+import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunnerImpl;
+import org.opendaylight.mdsal.binding.util.TypedReadTransaction;
+import org.opendaylight.mdsal.binding.util.TypedReadWriteTransaction;
+import org.opendaylight.mdsal.binding.util.TypedWriteTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.common.api.ReadFailedException;
 import org.opendaylight.netvirt.elan.cache.ElanInstanceCache;
 import org.opendaylight.netvirt.elan.internal.ElanBridgeManager;
 import org.opendaylight.netvirt.elanmanager.api.IElanService;
-import org.opendaylight.ovsdb.utils.mdsal.utils.ControllerMdsalUtils;
+import org.opendaylight.ovsdb.utils.mdsal.utils.MdsalUtils;
 import org.opendaylight.ovsdb.utils.southbound.utils.SouthboundUtils;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.BridgeRefInfo;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntryKey;
@@ -59,13 +57,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transp
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Vteps;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.VtepsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.VtepsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.config.rev150710.ElanConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpn.to.dpn.list.VpnInterfaces;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Uint64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -96,7 +94,7 @@ public class TransportZoneNotificationUtil {
         this.elanConfig = elanConfig;
         this.elanBridgeManager = elanBridgeManager;
         this.elanInstanceCache = elanInstanceCache;
-        southBoundUtils = new SouthboundUtils(new ControllerMdsalUtils(dbx));
+        southBoundUtils = new SouthboundUtils(new MdsalUtils(dbx));
     }
 
     public boolean shouldCreateVtep(List<VpnInterfaces> vpnInterfaces) {
@@ -113,7 +111,7 @@ public class TransportZoneNotificationUtil {
             }
 
             if (ElanUtils.isVxlanNetworkOrVxlanSegment(
-                    elanInstanceCache.get(elanInt.getElanInstanceName()).orNull())) {
+                    elanInstanceCache.get(elanInt.getElanInstanceName()).orElse(null))) {
                 return true;
             } else {
                 LOG.debug("Non-VXLAN elanInstance: {}", elanInt.getElanInstanceName());
@@ -129,7 +127,7 @@ public class TransportZoneNotificationUtil {
         return tzb.build();
     }
 
-    private static void updateTransportZone(TransportZone zone, BigInteger dpnId,
+    private static void updateTransportZone(TransportZone zone, Uint64 dpnId,
             @NonNull TypedWriteTransaction<Configuration> tx) {
         InstanceIdentifier<TransportZone> path = InstanceIdentifier.builder(TransportZones.class)
                 .child(TransportZone.class, new TransportZoneKey(zone.getZoneName())).build();
@@ -138,7 +136,7 @@ public class TransportZoneNotificationUtil {
         LOG.info("Transport zone {} updated due to dpn {} handling.", zone.getZoneName(), dpnId);
     }
 
-    public void updateTransportZone(String zoneNamePrefix, BigInteger dpnId) {
+    public void updateTransportZone(String zoneNamePrefix, Uint64 dpnId) {
         LoggingFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, tx -> {
             Map<String, String> localIps = getDpnLocalIps(dpnId);
             if (!localIps.isEmpty()) {
@@ -157,14 +155,14 @@ public class TransportZoneNotificationUtil {
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
-    private void updateTransportZone(String zoneName, BigInteger dpnId, @Nullable String localIp,
+    private void updateTransportZone(String zoneName, Uint64 dpnId, @Nullable String localIp,
             @NonNull TypedReadWriteTransaction<Configuration> tx)
             throws ExecutionException, InterruptedException {
         InstanceIdentifier<TransportZone> inst = InstanceIdentifier.create(TransportZones.class)
                 .child(TransportZone.class, new TransportZoneKey(zoneName));
 
         // FIXME: Read this through a cache
-        TransportZone zone = tx.read(inst).get().orNull();
+        TransportZone zone = tx.read(inst).get().orElse(null);
 
         if (zone == null) {
             zone = createZone(ALL_SUBNETS, zoneName);
@@ -179,7 +177,7 @@ public class TransportZoneNotificationUtil {
         }
     }
 
-    private static void deleteTransportZone(TransportZone zone, BigInteger dpnId,
+    private static void deleteTransportZone(TransportZone zone, Uint64 dpnId,
             @NonNull TypedWriteTransaction<Configuration> tx) {
         InstanceIdentifier<TransportZone> path = InstanceIdentifier.builder(TransportZones.class)
                 .child(TransportZone.class, new TransportZoneKey(zone.getZoneName())).build();
@@ -187,7 +185,7 @@ public class TransportZoneNotificationUtil {
         LOG.info("Transport zone {} deleted due to dpn {} handling.", zone.getZoneName(), dpnId);
     }
 
-    public void deleteTransportZone(String zoneNamePrefix, BigInteger dpnId) {
+    public void deleteTransportZone(String zoneNamePrefix, Uint64 dpnId) {
         LoggingFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, tx -> {
             Map<String, String> localIps = getDpnLocalIps(dpnId);
             if (!localIps.isEmpty()) {
@@ -204,13 +202,13 @@ public class TransportZoneNotificationUtil {
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
-    private static void deleteTransportZone(String zoneName, BigInteger dpnId,
+    private static void deleteTransportZone(String zoneName, Uint64 dpnId,
             @NonNull TypedReadWriteTransaction<Configuration> tx) throws ExecutionException, InterruptedException {
         InstanceIdentifier<TransportZone> inst = InstanceIdentifier.create(TransportZones.class)
                 .child(TransportZone.class, new TransportZoneKey(zoneName));
 
         // FIXME: Read this through a cache
-        TransportZone zone = tx.read(inst).get().orNull();
+        TransportZone zone = tx.read(inst).get().orElse(null);
         if (zone != null) {
             try {
                 deleteTransportZone(zone, dpnId, tx);
@@ -252,14 +250,14 @@ public class TransportZoneNotificationUtil {
             return;
         }
 
-        java.util.Optional<BigInteger> dpIdOpt = elanBridgeManager.getDpIdFromManagerNodeId(managerNodeId);
+        java.util.Optional<Uint64> dpIdOpt = elanBridgeManager.getDpIdFromManagerNodeId(managerNodeId);
         if (!dpIdOpt.isPresent()) {
             LOG.debug("No DPN id found for node {}", managerNodeId);
             return;
         }
 
         LoggingFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, tx -> {
-            BigInteger dpId = dpIdOpt.get();
+            Uint64 dpId = dpIdOpt.get();
             Optional<DPNTEPsInfo> dpnTepsInfoOpt = getDpnTepsInfo(dpId, tx);
             if (!dpnTepsInfoOpt.isPresent()) {
                 LOG.debug("No DPNTEPsInfo found for DPN id {}", dpId);
@@ -283,7 +281,7 @@ public class TransportZoneNotificationUtil {
         }), LOG, "Error handling OVSDB node update");
     }
 
-    private void handleAddedLocalIps(Map<String, String> addedEntries, BigInteger dpId, Set<String> zonePrefixes,
+    private void handleAddedLocalIps(Map<String, String> addedEntries, Uint64 dpId, Set<String> zonePrefixes,
             TypedReadWriteTransaction<Configuration> tx) throws ExecutionException, InterruptedException {
         if (addedEntries == null || addedEntries.isEmpty()) {
             LOG.trace("No added local_ips found for DPN {}", dpId);
@@ -301,7 +299,7 @@ public class TransportZoneNotificationUtil {
         }
     }
 
-    private void handleChangedLocalIps(Map<String, ValueDifference<String>> changedEntries, BigInteger dpId,
+    private void handleChangedLocalIps(Map<String, ValueDifference<String>> changedEntries, Uint64 dpId,
             Set<String> zonePrefixes, Map<String, List<String>> tepTzMap,
             @NonNull TypedReadWriteTransaction<Configuration> tx) throws ExecutionException, InterruptedException {
         if (changedEntries == null || changedEntries.isEmpty()) {
@@ -331,7 +329,7 @@ public class TransportZoneNotificationUtil {
         }
     }
 
-    private static void handleRemovedLocalIps(Map<String, String> removedEntries, BigInteger dpId,
+    private static void handleRemovedLocalIps(Map<String, String> removedEntries, Uint64 dpId,
             Set<String> zonePrefixes, Map<String, List<String>> tepTzMap,
             @NonNull TypedWriteTransaction<Configuration> tx) {
         if (removedEntries == null || removedEntries.isEmpty()) {
@@ -355,7 +353,7 @@ public class TransportZoneNotificationUtil {
     }
 
     private List<String> getTepTransportZoneNames(TunnelEndPoints tep) {
-        List<TzMembership> tzMembershipList = tep.getTzMembership();
+        List<TzMembership> tzMembershipList = new ArrayList<TzMembership>(tep.nonnullTzMembership().values());
         if (tzMembershipList == null) {
             LOG.debug("No TZ membership exist for TEP ip {}", tep.getIpAddress().stringValue());
             return Collections.emptyList();
@@ -365,14 +363,14 @@ public class TransportZoneNotificationUtil {
                 .collect(Collectors.toList());
     }
 
-    private static Optional<DPNTEPsInfo> getDpnTepsInfo(BigInteger dpId, TypedReadTransaction<Configuration> tx) {
+    private static Optional<DPNTEPsInfo> getDpnTepsInfo(Uint64 dpId, TypedReadTransaction<Configuration> tx) {
         InstanceIdentifier<DPNTEPsInfo> identifier = InstanceIdentifier.builder(DpnEndpoints.class)
                 .child(DPNTEPsInfo.class, new DPNTEPsInfoKey(dpId)).build();
         try {
             return tx.read(identifier).get();
         } catch (InterruptedException | ExecutionException e) {
             LOG.warn("Failed to read DPNTEPsInfo for DPN id {}", dpId);
-            return Optional.absent();
+            return Optional.empty();
         }
     }
 
@@ -381,25 +379,27 @@ public class TransportZoneNotificationUtil {
      *
      * @return Whether a vtep was added or not.
      */
-    private boolean addVtep(TransportZone zone, String subnetIp, BigInteger dpnId, @Nullable String localIp) {
-        for (Vteps existingVtep : zone.nonnullVteps()) {
+    private boolean addVtep(TransportZone zone, String subnetIp, Uint64 dpnId, @Nullable String localIp) {
+        for (Vteps existingVtep : new ArrayList<Vteps>(zone.nonnullVteps().values())) {
             if (Objects.equals(existingVtep.getDpnId(), dpnId)) {
                 return false;
             }
         }
 
         if (localIp != null) {
-            IpAddress nodeIp = IpAddressBuilder.getDefaultInstance(localIp);
+            //This seems to be a unused code, creating unused objects
+            //Check if any assignment needed here.
+            /*IpAddress nodeIp = IpAddressBuilder.getDefaultInstance(localIp);
             VtepsBuilder vtepsBuilder = new VtepsBuilder().setDpnId(dpnId).setIpAddress(nodeIp)
                     .setOptionOfTunnel(elanConfig.isUseOfTunnels());
-            zone.getVteps().add(vtepsBuilder.build());
+            zone.getVteps().add(vtepsBuilder.build());*/
             return true;
         }
 
         return false;
     }
 
-    private static void removeVtep(String zoneName, BigInteger dpId, @NonNull TypedWriteTransaction<Configuration> tx) {
+    private static void removeVtep(String zoneName, Uint64 dpId, @NonNull TypedWriteTransaction<Configuration> tx) {
         InstanceIdentifier<Vteps> path = InstanceIdentifier.builder(TransportZones.class)
                 .child(TransportZone.class, new TransportZoneKey(zoneName))
                 .child(Vteps.class, new VtepsKey(dpId)).build();
@@ -407,7 +407,7 @@ public class TransportZoneNotificationUtil {
     }
 
     @Nullable
-    private String getDpnLocalIp(BigInteger dpId) throws ReadFailedException {
+    private String getDpnLocalIp(Uint64 dpId) throws ReadFailedException {
         Optional<Node> node = getPortsNode(dpId);
 
         if (node.isPresent()) {
@@ -424,35 +424,43 @@ public class TransportZoneNotificationUtil {
     }
 
     @NonNull
-    private Map<String, String> getDpnLocalIps(BigInteger dpId) throws ReadFailedException {
+    private Map<String, String> getDpnLocalIps(Uint64 dpId) throws ReadFailedException {
         // Example of local IPs from other_config:
         // local_ips="10.0.43.159:MPLS,11.11.11.11:DSL,ip:underlay-network"
-        return getPortsNode(dpId).toJavaUtil().map(
+        return getPortsNode(dpId).map(
             node -> elanBridgeManager.getOpenvswitchOtherConfigMap(node, LOCAL_IPS)).orElse(Collections.emptyMap());
     }
 
     @SuppressWarnings("unchecked")
-    private Optional<Node> getPortsNode(BigInteger dpnId) throws ReadFailedException {
+    private Optional<Node> getPortsNode(Uint64 dpnId) throws ReadFailedException {
         InstanceIdentifier<BridgeRefEntry> bridgeRefInfoPath = InstanceIdentifier.create(BridgeRefInfo.class)
                 .child(BridgeRefEntry.class, new BridgeRefEntryKey(dpnId));
 
-        // FIXME: Read this through a cache
-        Optional<BridgeRefEntry> optionalBridgeRefEntry =
-            singleTxBroker.syncReadOptional(LogicalDatastoreType.OPERATIONAL, bridgeRefInfoPath);
-        if (!optionalBridgeRefEntry.isPresent()) {
-            LOG.error("no bridge ref entry found for dpnId {}", dpnId);
-            return Optional.absent();
-        }
+        try {
+            // FIXME: Read this through a cache
+            Optional<BridgeRefEntry> optionalBridgeRefEntry =
+                singleTxBroker
+                    .syncReadOptional(LogicalDatastoreType.OPERATIONAL, bridgeRefInfoPath);
+            if (!optionalBridgeRefEntry.isPresent()) {
+                LOG.error("no bridge ref entry found for dpnId {}", dpnId);
+                return Optional.empty();
+            }
 
-        InstanceIdentifier<Node> nodeId =
-                optionalBridgeRefEntry.get().getBridgeReference().getValue().firstIdentifierOf(Node.class);
+            InstanceIdentifier<Node> nodeId =
+                optionalBridgeRefEntry.get().getBridgeReference().getValue()
+                    .firstIdentifierOf(Node.class);
 
-        // FIXME: Read this through a cache
-        Optional<Node> optionalNode = singleTxBroker.syncReadOptional(LogicalDatastoreType.OPERATIONAL, nodeId);
-        if (!optionalNode.isPresent()) {
-            LOG.error("missing node for dpnId {}", dpnId);
+            // FIXME: Read this through a cache
+            Optional<Node> optionalNode = singleTxBroker
+                .syncReadOptional(LogicalDatastoreType.OPERATIONAL, nodeId);
+            if (!optionalNode.isPresent()) {
+                LOG.error("missing node for dpnId {}", dpnId);
+            }
+            return optionalNode;
+        } catch (ExecutionException | InterruptedException e) {
+            LOG.error("Exception while getting ports for Node {}", dpnId, e);
         }
-        return optionalNode;
+        return Optional.empty();
     }
 
     private static String getTzNameForUnderlayNetwork(String zoneNamePrefix, String underlayNetworkName) {
@@ -461,6 +469,6 @@ public class TransportZoneNotificationUtil {
 
     private static Optional<String> getZonePrefixForUnderlayNetwork(String zoneName, String underlayNetworkName) {
         String[] zoneParts = zoneName.split(IP_NETWORK_ZONE_NAME_DELIMITER + underlayNetworkName);
-        return zoneParts.length == 2 ? Optional.of(zoneParts[0]) : Optional.absent();
+        return zoneParts.length == 2 ? Optional.of(zoneParts[0]) : Optional.empty();
     }
 }