Move tepsNotHosted from Config DS to Oper DS
[genius.git] / itm / itm-impl / src / main / java / org / opendaylight / genius / itm / confighelpers / OvsdbTepAddConfigHelper.java
index f5abd00e4509ceb486bcf22319d1e439590db291..b9c711b6324db2e6159719475829549d5147e200 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.genius.itm.confighelpers;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
@@ -18,17 +17,19 @@ import org.opendaylight.genius.itm.globals.ITMConstants;
 import org.opendaylight.genius.itm.impl.ItmUtils;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 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.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.NotHostedTransportZones;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TepsNotHostedInTransportZone;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TepsNotHostedInTransportZoneBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TepsNotHostedInTransportZoneKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZone;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZoneBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZoneKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVteps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVtepsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVtepsKey;
 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.tepsnothostedintransportzone.UnknownVteps;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.tepsnothostedintransportzone.UnknownVtepsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.tepsnothostedintransportzone.UnknownVtepsKey;
 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;
@@ -39,12 +40,14 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class OvsdbTepAddConfigHelper {
+public final class OvsdbTepAddConfigHelper {
 
     private static final Logger LOG = LoggerFactory.getLogger(OvsdbTepAddConfigHelper.class);
 
+    private OvsdbTepAddConfigHelper() { }
+
     /**
-     * Adds the TEP into ITM configuration Datastore in one of the following cases.
+     * Adds the TEP into ITM configuration/operational Datastore in one of the following cases.
      * 1) default transport zone
      * 2) Configured transport zone
      * 3) Unhosted transport zone
@@ -53,7 +56,7 @@ public class OvsdbTepAddConfigHelper {
      * @param strDpnId bridge datapath ID in string
      * @param tzName transport zone name in string
      * @param ofTunnel boolean flag for TEP to enable/disable of-tunnel feature on it
-     * @param dataBroker data broker handle to perform operations on config datastore
+     * @param dataBroker data broker handle to perform operations on config/operational datastore
      * @param wrTx WriteTransaction object
      */
 
@@ -66,10 +69,10 @@ public class OvsdbTepAddConfigHelper {
         }
 
         // Get tep IP
-        IpAddress tepIpAddress = new IpAddress(tepIp.toCharArray());
+        IpAddress tepIpAddress = IpAddressBuilder.getDefaultInstance(tepIp);
         TransportZone tzone = null;
 
-        // Case: TZ name is not given with CSS TEP.
+        // Case: TZ name is not given with OVS TEP.
         if (tzName == null) {
             tzName = ITMConstants.DEFAULT_TRANSPORT_ZONE;
             // add TEP into default-TZ
@@ -83,8 +86,8 @@ public class OvsdbTepAddConfigHelper {
             // Case: Add TEP into corresponding TZ created from Northbound.
             tzone = ItmUtils.getTransportZoneFromConfigDS(tzName, dataBroker);
             if (tzone == null) {
-                // Case: TZ is not configured from Northbound, then add TEP into "teps-not-hosted-in-transport-zone"
-                LOG.trace("Adding TEP with unknown TZ into teps-not-hosted-in-transport-zone.");
+                // Case: TZ is not configured from Northbound, then add TEP into "teps-in-not-hosted-transport-zone"
+                LOG.trace("Adding TEP with unknown TZ into teps-in-not-hosted-transport-zone.");
                 addUnknownTzTepIntoTepsNotHosted(tzName, tepIpAddress, dpnId, ofTunnel,
                     dataBroker, wrTx);
                 return;
@@ -101,9 +104,9 @@ public class OvsdbTepAddConfigHelper {
 
         if (subnetList == null || subnetList.isEmpty()) {
             if (subnetList == null) {
-                subnetList = new ArrayList<Subnets>();
+                subnetList = new ArrayList<>();
             }
-            List<Vteps> vtepList = new ArrayList<Vteps>();
+            List<Vteps> vtepList = new ArrayList<>();
             LOG.trace("Add TEP in transport-zone when no subnet-list.");
             addVtepInITMConfigDS(subnetList, subnetMaskObj, vtepList, tepIpAddress, tzName, dpnId,
                 portName, ofTunnel, wrTx);
@@ -123,7 +126,7 @@ public class OvsdbTepAddConfigHelper {
             if (vtepList == null || vtepList.isEmpty()) {
                 //  case: vtep list does not exist or it has no elements
                 if (vtepList == null) {
-                    vtepList = new ArrayList<Vteps>();
+                    vtepList = new ArrayList<>();
                 }
                 LOG.trace("Add TEP in transport-zone when no vtep-list for specific subnet.");
                 addVtepInITMConfigDS(subnetList, subnetMaskObj, vtepList, tepIpAddress, tzName,
@@ -189,22 +192,21 @@ public class OvsdbTepAddConfigHelper {
             // Add vtep obtained from bridge into list
             updatedVtepList.add(vtepObj);
 
-            LOG.trace("Adding TEP (TZ: {} Subnet: {} TEP IP: {} DPID: {}, of-tunnel: {})"
-                    + "in ITM Config DS.", tzName, subnetMaskObj.getValue().toString(), tepIpAddress,
-                dpid, ofTunnel);
+            LOG.trace("Adding TEP (TZ: {} Subnet: {} TEP IP: {} DPID: {}, of-tunnel: {}) in ITM Config DS.", tzName,
+                    subnetMaskObj, tepIpAddress, dpid, ofTunnel);
         } else {
             // this is case when this function is called while TEPs movement from tepsNotHosted list when
             // corresponding TZ is configured from northbound.
             for (Vteps vtep: updatedVtepList) {
                 LOG.trace("Moving TEP (TEP IP: {} DPID: {}, of-tunnel: {})"
-                        + "from tepNotHosted list into transport-zone {} in  ITM Config DS.",
-                    vtep.getIpAddress().getValue().toString(), vtep.getDpnId(), ofTunnel, tzName);
+                        + "from not-hosted-transport-zone {} into  ITM Config DS.",
+                    vtep.getIpAddress(), vtep.getDpnId(), ofTunnel, tzName);
             }
         }
 
         // Create subnet object
         SubnetsKey subKey = new SubnetsKey(subnetMaskObj);
-        IpAddress gatewayIP = new IpAddress(ITMConstants.DUMMY_GATEWAY_IP.toCharArray());
+        IpAddress gatewayIP = IpAddressBuilder.getDefaultInstance(ITMConstants.DUMMY_GATEWAY_IP);
         int vlanID = ITMConstants.DUMMY_VLANID;
 
         Subnets subnet =
@@ -226,33 +228,33 @@ public class OvsdbTepAddConfigHelper {
 
     /**
      * Adds the TEP into Vtep list in the subnet list in the transport zone list
-     * from ITM configuration Datastore by merge operation with write transaction.
+     * from ITM operational Datastore by merge operation with write transaction.
      *
      * @param tzName transport zone name in string
      * @param tepIpAddress TEP IP address in IpAddress object
      * @param dpid bridge datapath ID in BigInteger
      * @param ofTunnel boolean flag for TEP to enable/disable of-tunnel feature on it
-     * @param dataBroker data broker handle to perform operations on config datastore
+     * @param dataBroker data broker handle to perform operations on operational datastore
      * @param wrTx WriteTransaction object
      */
     protected static void addUnknownTzTepIntoTepsNotHosted(String tzName, IpAddress tepIpAddress,
         BigInteger dpid, boolean ofTunnel, DataBroker dataBroker, WriteTransaction wrTx) {
         List<UnknownVteps> vtepList = null;
 
-        TepsNotHostedInTransportZone unknownTz =
-            ItmUtils.getUnknownTransportZoneFromITMConfigDS(tzName, dataBroker);
-        if (unknownTz == null) {
-            LOG.trace("Unhosted TransportZone does not exist.");
-            vtepList = new ArrayList<UnknownVteps>();
+        TepsInNotHostedTransportZone tepsInNotHostedTransportZone =
+            ItmUtils.getUnknownTransportZoneFromITMOperDS(tzName, dataBroker);
+        if (tepsInNotHostedTransportZone == null) {
+            LOG.trace("Unhosted TransportZone ({}) does not exist in OperDS.", tzName);
+            vtepList = new ArrayList<>();
             addVtepIntoTepsNotHosted(vtepList, tepIpAddress, tzName, dpid, ofTunnel, wrTx);
         } else {
-            vtepList = unknownTz.getUnknownVteps();
+            vtepList = tepsInNotHostedTransportZone.getUnknownVteps();
             if (vtepList == null || vtepList.isEmpty()) {
                 //  case: vtep list does not exist or it has no elements
                 if (vtepList == null) {
-                    vtepList = new ArrayList<UnknownVteps>();
+                    vtepList = new ArrayList<>();
                 }
-                LOG.trace("Add TEP in unhosted TZ ({}) when no vtep-list in the TZ.", tzName);
+                LOG.trace("Add TEP into unhosted TZ ({}) when no vtep-list in the TZ.", tzName);
                 addVtepIntoTepsNotHosted(vtepList, tepIpAddress, tzName, dpid, ofTunnel, wrTx);
             } else {
                 //  case: vtep list has elements
@@ -281,7 +283,7 @@ public class OvsdbTepAddConfigHelper {
 
     /**
      * Adds the TEP into Unknown Vtep list under the transport zone in the TepsNotHosted list
-     * from ITM configuration Datastore by merge operation with write transaction.
+     * from ITM operational Datastore by merge operation with write transaction.
      *
      * @param updatedVtepList updated UnknownVteps list object which will have new TEP for addition
      *                        into TepsNotHosted
@@ -295,10 +297,10 @@ public class OvsdbTepAddConfigHelper {
         IpAddress tepIpAddress, String tzName, BigInteger dpid, boolean ofTunnel,
         WriteTransaction wrTx) {
         //Create TZ node path
-        InstanceIdentifier<TepsNotHostedInTransportZone> transportZonePath =
-            InstanceIdentifier.builder(TransportZones.class)
-                .child(TepsNotHostedInTransportZone.class,
-                    new TepsNotHostedInTransportZoneKey(tzName)).build();
+        InstanceIdentifier<TepsInNotHostedTransportZone> tepsInNotHostedTransportZoneIid =
+            InstanceIdentifier.builder(NotHostedTransportZones.class)
+                .child(TepsInNotHostedTransportZone.class,
+                    new TepsInNotHostedTransportZoneKey(tzName)).build();
 
         // create vtep
         UnknownVtepsKey vtepkey = new UnknownVtepsKey(dpid);
@@ -310,14 +312,14 @@ public class OvsdbTepAddConfigHelper {
         updatedVtepList.add(vtepObj);
 
         // create unknown TZ node with updated vtep list
-        TepsNotHostedInTransportZone updatedTzone = new TepsNotHostedInTransportZoneBuilder()
-            .setKey(new TepsNotHostedInTransportZoneKey(tzName)).setZoneName(tzName)
+        TepsInNotHostedTransportZone updatedTzone = new TepsInNotHostedTransportZoneBuilder()
+            .setKey(new TepsInNotHostedTransportZoneKey(tzName)).setZoneName(tzName)
             .setUnknownVteps(updatedVtepList).build();
 
-        LOG.trace("Adding TEP into unhosted (TZ: {}, DPID: {}, TEP IP: {}, of-tunnel: {})"
-                + "in ITM Config DS.", tzName, dpid, tepIpAddress, ofTunnel);
+        LOG.trace("Adding TEP  (DPID: {}, TEP IP: {}, of-tunnel: {}) into unhosted TZ: {}"
+                + "inside ITM Oper DS.", dpid, tepIpAddress, ofTunnel, tzName);
 
-        // Update TZ in Config DS.
-        wrTx.merge(LogicalDatastoreType.CONFIGURATION, transportZonePath, updatedTzone, true);
+        // Update TZ in Oper DS.
+        wrTx.merge(LogicalDatastoreType.OPERATIONAL, tepsInNotHostedTransportZoneIid, updatedTzone, true);
     }
 }