X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=elanmanager%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetvirt%2Felan%2Futils%2FTransportZoneNotificationUtil.java;h=79cb1d4560943ec4f876fee300e98b2f31ba0ea9;hb=109e8de722fbf0608a026dbbe151c3ff7fab5950;hp=687c76dafe42860d52733fb1b32839c75cdbeb9e;hpb=ed5c7039dcb67a5085f913282b2926fa6cf97de9;p=netvirt.git diff --git a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/TransportZoneNotificationUtil.java b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/TransportZoneNotificationUtil.java index 687c76dafe..79cb1d4560 100644 --- a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/TransportZoneNotificationUtil.java +++ b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/TransportZoneNotificationUtil.java @@ -7,39 +7,42 @@ */ package org.opendaylight.netvirt.elan.utils; -import com.google.common.base.Optional; +import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; + 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; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; 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.ReadTransaction; -import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +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.infrautils.utils.concurrent.ListenableFutures; +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.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.MdsalUtils; +import org.opendaylight.ovsdb.utils.mdsal.utils.ControllerMdsalUtils; 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.IpPrefix; 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; @@ -53,17 +56,14 @@ 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.TransportZone; 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.Subnets; -import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps; -import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsKey; +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.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; @@ -77,6 +77,7 @@ public class TransportZoneNotificationUtil { private static final String ALL_SUBNETS_GW = "0.0.0.0"; private static final String ALL_SUBNETS = "0.0.0.0/0"; private final ManagedNewTransactionRunner txRunner; + private final SingleTransactionDataBroker singleTxBroker; private final SouthboundUtils southBoundUtils; private final IElanService elanService; private final ElanConfig elanConfig; @@ -88,11 +89,12 @@ public class TransportZoneNotificationUtil { final IElanService elanService, final ElanConfig elanConfig, final ElanBridgeManager elanBridgeManager, final ElanInstanceCache elanInstanceCache) { this.txRunner = new ManagedNewTransactionRunnerImpl(dbx); + this.singleTxBroker = new SingleTransactionDataBroker(dbx); this.elanService = elanService; this.elanConfig = elanConfig; this.elanBridgeManager = elanBridgeManager; this.elanInstanceCache = elanInstanceCache; - southBoundUtils = new SouthboundUtils(new MdsalUtils(dbx)); + southBoundUtils = new SouthboundUtils(new ControllerMdsalUtils(dbx)); } public boolean shouldCreateVtep(List vpnInterfaces) { @@ -109,35 +111,34 @@ 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()); + LOG.debug("Non-VXLAN elanInstance: {}", elanInt.getElanInstanceName()); } } return false; } - private TransportZone createZone(String subnetIp, String zoneName) { - List subnets = new ArrayList<>(); - subnets.add(buildSubnets(subnetIp)); - TransportZoneBuilder tzb = new TransportZoneBuilder().setKey(new TransportZoneKey(zoneName)) - .setTunnelType(TunnelTypeVxlan.class).setZoneName(zoneName).setSubnets(subnets); + private static TransportZone createZone(String subnetIp, String zoneName) { + TransportZoneBuilder tzb = new TransportZoneBuilder().withKey(new TransportZoneKey(zoneName)) + .setTunnelType(TunnelTypeVxlan.class).setZoneName(zoneName); return tzb.build(); } - private void updateTransportZone(TransportZone zone, BigInteger dpnId, @Nonnull WriteTransaction tx) { + private static void updateTransportZone(TransportZone zone, Uint64 dpnId, + @NonNull TypedWriteTransaction tx) { InstanceIdentifier path = InstanceIdentifier.builder(TransportZones.class) .child(TransportZone.class, new TransportZoneKey(zone.getZoneName())).build(); - tx.merge(LogicalDatastoreType.CONFIGURATION, path, zone); + tx.merge(path, zone); LOG.info("Transport zone {} updated due to dpn {} handling.", zone.getZoneName(), dpnId); } - public void updateTransportZone(String zoneNamePrefix, BigInteger dpnId) { - ListenableFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(tx -> { - Map localIps = getDpnLocalIps(dpnId, tx); + public void updateTransportZone(String zoneNamePrefix, Uint64 dpnId) { + LoggingFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, tx -> { + Map localIps = getDpnLocalIps(dpnId); if (!localIps.isEmpty()) { LOG.debug("Will use local_ips for transport zone update for dpn {} and zone name prefix {}", dpnId, zoneNamePrefix); @@ -148,19 +149,20 @@ public class TransportZoneNotificationUtil { updateTransportZone(zoneName, dpnId, localIp, tx); } } else { - updateTransportZone(zoneNamePrefix, dpnId, getDpnLocalIp(dpnId, tx), tx); + updateTransportZone(zoneNamePrefix, dpnId, getDpnLocalIp(dpnId), tx); } }), LOG, "Error updating transport zone"); } @SuppressWarnings("checkstyle:IllegalCatch") - private void updateTransportZone(String zoneName, BigInteger dpnId, @Nullable String localIp, - @Nonnull ReadWriteTransaction tx) throws ReadFailedException { + private void updateTransportZone(String zoneName, Uint64 dpnId, @Nullable String localIp, + @NonNull TypedReadWriteTransaction tx) + throws ExecutionException, InterruptedException { InstanceIdentifier inst = InstanceIdentifier.create(TransportZones.class) .child(TransportZone.class, new TransportZoneKey(zoneName)); // FIXME: Read this through a cache - TransportZone zone = tx.read(LogicalDatastoreType.CONFIGURATION, inst).checkedGet().orNull(); + TransportZone zone = tx.read(inst).get().orElse(null); if (zone == null) { zone = createZone(ALL_SUBNETS, zoneName); @@ -175,16 +177,17 @@ public class TransportZoneNotificationUtil { } } - private void deleteTransportZone(TransportZone zone, BigInteger dpnId, @Nonnull WriteTransaction tx) { + private static void deleteTransportZone(TransportZone zone, Uint64 dpnId, + @NonNull TypedWriteTransaction tx) { InstanceIdentifier path = InstanceIdentifier.builder(TransportZones.class) .child(TransportZone.class, new TransportZoneKey(zone.getZoneName())).build(); - tx.delete(LogicalDatastoreType.CONFIGURATION, path); + tx.delete(path); LOG.info("Transport zone {} deleted due to dpn {} handling.", zone.getZoneName(), dpnId); } - public void deleteTransportZone(String zoneNamePrefix, BigInteger dpnId) { - ListenableFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(tx -> { - Map localIps = getDpnLocalIps(dpnId, tx); + public void deleteTransportZone(String zoneNamePrefix, Uint64 dpnId) { + LoggingFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, tx -> { + Map localIps = getDpnLocalIps(dpnId); if (!localIps.isEmpty()) { LOG.debug("Will use local_ips for transport zone delete for dpn {} and zone name prefix {}", dpnId, zoneNamePrefix); @@ -199,13 +202,13 @@ public class TransportZoneNotificationUtil { } @SuppressWarnings("checkstyle:IllegalCatch") - private void deleteTransportZone(String zoneName, BigInteger dpnId, @Nonnull ReadWriteTransaction tx) - throws ReadFailedException { + private static void deleteTransportZone(String zoneName, Uint64 dpnId, + @NonNull TypedReadWriteTransaction tx) throws ExecutionException, InterruptedException { InstanceIdentifier inst = InstanceIdentifier.create(TransportZones.class) .child(TransportZone.class, new TransportZoneKey(zoneName)); // FIXME: Read this through a cache - TransportZone zone = tx.read(LogicalDatastoreType.CONFIGURATION, inst).checkedGet().orNull(); + TransportZone zone = tx.read(inst).get().orElse(null); if (zone != null) { try { deleteTransportZone(zone, dpnId, tx); @@ -247,14 +250,14 @@ public class TransportZoneNotificationUtil { return; } - java.util.Optional dpIdOpt = elanBridgeManager.getDpIdFromManagerNodeId(managerNodeId); + java.util.Optional dpIdOpt = elanBridgeManager.getDpIdFromManagerNodeId(managerNodeId); if (!dpIdOpt.isPresent()) { LOG.debug("No DPN id found for node {}", managerNodeId); return; } - ListenableFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(tx -> { - BigInteger dpId = dpIdOpt.get(); + LoggingFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, tx -> { + Uint64 dpId = dpIdOpt.get(); Optional dpnTepsInfoOpt = getDpnTepsInfo(dpId, tx); if (!dpnTepsInfoOpt.isPresent()) { LOG.debug("No DPNTEPsInfo found for DPN id {}", dpId); @@ -269,7 +272,7 @@ public class TransportZoneNotificationUtil { Set zonePrefixes = new HashSet<>(); Map> tepTzMap = tunnelEndPoints.stream().collect(Collectors - .toMap(tep -> String.valueOf(tep.getIpAddress().getValue()), this::getTepTransportZoneNames)); + .toMap(tep -> tep.getIpAddress().stringValue(), this::getTepTransportZoneNames)); LOG.trace("Transport zone prefixes {}", tepTzMap); handleRemovedLocalIps(mapDiff.entriesOnlyOnLeft(), dpId, zonePrefixes, tepTzMap, tx); @@ -278,8 +281,8 @@ public class TransportZoneNotificationUtil { }), LOG, "Error handling OVSDB node update"); } - private void handleAddedLocalIps(Map addedEntries, BigInteger dpId, Set zonePrefixes, - ReadWriteTransaction tx) throws ReadFailedException { + private void handleAddedLocalIps(Map addedEntries, Uint64 dpId, Set zonePrefixes, + TypedReadWriteTransaction tx) throws ExecutionException, InterruptedException { if (addedEntries == null || addedEntries.isEmpty()) { LOG.trace("No added local_ips found for DPN {}", dpId); return; @@ -296,9 +299,9 @@ public class TransportZoneNotificationUtil { } } - private void handleChangedLocalIps(Map> changedEntries, BigInteger dpId, - Set zonePrefixes, Map> tepTzMap, @Nonnull ReadWriteTransaction tx) - throws ReadFailedException { + private void handleChangedLocalIps(Map> changedEntries, Uint64 dpId, + Set zonePrefixes, Map> tepTzMap, + @NonNull TypedReadWriteTransaction tx) throws ExecutionException, InterruptedException { if (changedEntries == null || changedEntries.isEmpty()) { LOG.trace("No changed local_ips found for DPN {}", dpId); return; @@ -326,8 +329,9 @@ public class TransportZoneNotificationUtil { } } - private void handleRemovedLocalIps(Map removedEntries, BigInteger dpId, Set zonePrefixes, - Map> tepTzMap, @Nonnull WriteTransaction tx) { + private static void handleRemovedLocalIps(Map removedEntries, Uint64 dpId, + Set zonePrefixes, Map> tepTzMap, + @NonNull TypedWriteTransaction tx) { if (removedEntries == null || removedEntries.isEmpty()) { LOG.trace("No removed local_ips found on DPN {}", dpId); return; @@ -349,9 +353,9 @@ public class TransportZoneNotificationUtil { } private List getTepTransportZoneNames(TunnelEndPoints tep) { - List tzMembershipList = tep.getTzMembership(); + List tzMembershipList = new ArrayList(tep.nonnullTzMembership().values()); if (tzMembershipList == null) { - LOG.debug("No TZ membership exist for TEP ip {}", tep.getIpAddress().getValue()); + LOG.debug("No TZ membership exist for TEP ip {}", tep.getIpAddress().stringValue()); return Collections.emptyList(); } @@ -359,14 +363,14 @@ public class TransportZoneNotificationUtil { .collect(Collectors.toList()); } - private Optional getDpnTepsInfo(BigInteger dpId, ReadTransaction tx) { + private static Optional getDpnTepsInfo(Uint64 dpId, TypedReadTransaction tx) { InstanceIdentifier identifier = InstanceIdentifier.builder(DpnEndpoints.class) .child(DPNTEPsInfo.class, new DPNTEPsInfoKey(dpId)).build(); try { - return tx.read(LogicalDatastoreType.CONFIGURATION, identifier).checkedGet(); - } catch (ReadFailedException e) { + 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(); } } @@ -375,71 +379,42 @@ public class TransportZoneNotificationUtil { * * @return Whether a vtep was added or not. */ - private boolean addVtep(TransportZone zone, String subnetIp, BigInteger dpnId, @Nullable String localIp) { - List zoneSubnets = zone.getSubnets(); - if (zoneSubnets == null) { - return false; - } - - Subnets subnets = getOrAddSubnet(zoneSubnets, subnetIp); - for (Vteps existingVtep : subnets.getVteps()) { - if (existingVtep.getDpnId().equals(dpnId)) { + private boolean addVtep(TransportZone zone, String subnetIp, Uint64 dpnId, @Nullable String localIp) { + for (Vteps existingVtep : new ArrayList(zone.nonnullVteps().values())) { + if (Objects.equals(existingVtep.getDpnId(), dpnId)) { return false; } } if (localIp != null) { - IpAddress nodeIp = new IpAddress(localIp.toCharArray()); + //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) - .setPortname(TUNNEL_PORT).setOptionOfTunnel(elanConfig.isUseOfTunnels()); - subnets.getVteps().add(vtepsBuilder.build()); + .setOptionOfTunnel(elanConfig.isUseOfTunnels()); + zone.getVteps().add(vtepsBuilder.build());*/ return true; } return false; } - private void removeVtep(String zoneName, BigInteger dpId, @Nonnull WriteTransaction tx) { + private static void removeVtep(String zoneName, Uint64 dpId, @NonNull TypedWriteTransaction tx) { InstanceIdentifier path = InstanceIdentifier.builder(TransportZones.class) .child(TransportZone.class, new TransportZoneKey(zoneName)) - .child(Subnets.class, new SubnetsKey(new IpPrefix(ALL_SUBNETS.toCharArray()))) - .child(Vteps.class, new VtepsKey(dpId, TUNNEL_PORT)).build(); - tx.delete(LogicalDatastoreType.CONFIGURATION, path); + .child(Vteps.class, new VtepsKey(dpId)).build(); + tx.delete(path); } - // search for relevant subnets for the given subnetIP, add one if it is - // necessary - private Subnets getOrAddSubnet(@Nonnull List subnets, @Nonnull String subnetIp) { - IpPrefix subnetPrefix = new IpPrefix(subnetIp.toCharArray()); - - for (Subnets subnet : subnets) { - if (subnet.getPrefix().equals(subnetPrefix)) { - return subnet; - } - } - - Subnets retSubnet = buildSubnets(subnetIp); - subnets.add(retSubnet); - - return retSubnet; - } - - private Subnets buildSubnets(String subnetIp) { - SubnetsBuilder subnetsBuilder = new SubnetsBuilder().setDeviceVteps(new ArrayList<>()) - .setGatewayIp(new IpAddress(ALL_SUBNETS_GW.toCharArray())) - .setKey(new SubnetsKey(new IpPrefix(subnetIp.toCharArray()))).setVlanId(0) - .setVteps(new ArrayList<>()); - return subnetsBuilder.build(); - } - - private String getDpnLocalIp(BigInteger dpId, ReadTransaction tx) throws ReadFailedException { - Optional node = getPortsNode(dpId, tx); + @Nullable + private String getDpnLocalIp(Uint64 dpId) throws ReadFailedException { + Optional node = getPortsNode(dpId); if (node.isPresent()) { String localIp = southBoundUtils.getOpenvswitchOtherConfig(node.get(), LOCAL_IP); if (localIp == null) { LOG.error("missing local_ip key in ovsdb:openvswitch-other-configs in operational" - + " network-topology for node: " + node.get().getNodeId().getValue()); + + " network-topology for node: {}", node.get().getNodeId().getValue()); } else { return localIp; } @@ -448,44 +423,52 @@ public class TransportZoneNotificationUtil { return null; } - @Nonnull - private Map getDpnLocalIps(BigInteger dpId, ReadTransaction tx) throws ReadFailedException { + @NonNull + private Map 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, tx).toJavaUtil().map( + return getPortsNode(dpId).map( node -> elanBridgeManager.getOpenvswitchOtherConfigMap(node, LOCAL_IPS)).orElse(Collections.emptyMap()); } @SuppressWarnings("unchecked") - private Optional getPortsNode(BigInteger dpnId, ReadTransaction tx) throws ReadFailedException { + private Optional getPortsNode(Uint64 dpnId) throws ReadFailedException { InstanceIdentifier bridgeRefInfoPath = InstanceIdentifier.create(BridgeRefInfo.class) .child(BridgeRefEntry.class, new BridgeRefEntryKey(dpnId)); - // FIXME: Read this through a cache - Optional optionalBridgeRefEntry = - tx.read(LogicalDatastoreType.OPERATIONAL, bridgeRefInfoPath).checkedGet(); - if (!optionalBridgeRefEntry.isPresent()) { - LOG.error("no bridge ref entry found for dpnId: " + dpnId); - return Optional.absent(); - } + try { + // FIXME: Read this through a cache + Optional optionalBridgeRefEntry = + singleTxBroker + .syncReadOptional(LogicalDatastoreType.OPERATIONAL, bridgeRefInfoPath); + if (!optionalBridgeRefEntry.isPresent()) { + LOG.error("no bridge ref entry found for dpnId {}", dpnId); + return Optional.empty(); + } - InstanceIdentifier nodeId = - optionalBridgeRefEntry.get().getBridgeReference().getValue().firstIdentifierOf(Node.class); + InstanceIdentifier nodeId = + optionalBridgeRefEntry.get().getBridgeReference().getValue() + .firstIdentifierOf(Node.class); - // FIXME: Read this through a cache - Optional optionalNode = tx.read(LogicalDatastoreType.OPERATIONAL, nodeId).checkedGet(); - if (!optionalNode.isPresent()) { - LOG.error("missing node for dpnId: " + dpnId); + // FIXME: Read this through a cache + Optional 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 String getTzNameForUnderlayNetwork(String zoneNamePrefix, String underlayNetworkName) { + private static String getTzNameForUnderlayNetwork(String zoneNamePrefix, String underlayNetworkName) { return zoneNamePrefix + IP_NETWORK_ZONE_NAME_DELIMITER + underlayNetworkName; } - private Optional getZonePrefixForUnderlayNetwork(String zoneName, String underlayNetworkName) { + private static Optional 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(); } }