MRI version bump for Aluminium 13/89613/27
authorNidhi Adhvaryu <nidhi.adhvaryu@ericsson.com>
Wed, 6 May 2020 10:21:48 +0000 (15:51 +0530)
committerR P Karthika <r.p.karthika@ericsson.com>
Tue, 26 May 2020 13:04:34 +0000 (18:34 +0530)
This bumps versions to the following:
- odlparent-7.0.1
- yangtools-5.0.1
- mdsal-6.0.0
- controller-2.0.0

Signed-off-by: R P Karthika <r.p.karthika@ericsson.com>
Signed-off-by: Nidhi Adhvaryu <nidhi.adhvaryu@ericsson.com>
Signed-off-by: Apurba Mukherjee <apurba.mukherjee@ericsson.com>
Change-Id: I508ba70555f52da12439a3963d642fc60cfe7775

155 files changed:
alivenessmonitor/alivenessmonitor-impl/pom.xml
alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java
alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/HwVtepTunnelsStateHandler.java
alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/protocols/impl/AlivenessProtocolHandlerRegistryImpl.java
alivenessmonitor/pom.xml
arputil/arputil-impl/src/main/java/org/opendaylight/genius/arputil/internal/ArpUtilImpl.java
arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestOdlInterfaceRpcService.java
arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestPacketProcessingService.java
arputil/pom.xml
artifacts/pom.xml
cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/CloudscalerRpcServiceImpl.java
cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/ComputeNodeManager.java
cloudscaler/pom.xml
commons/binding-parent/pom.xml
commons/checkstyle/pom.xml
commons/pom.xml
commons/quality-parent/pom.xml
fcapsapplication/fcapsapplication-impl/pom.xml
fcapsapplication/pom.xml
fcapsmanager/pom.xml
features/genius-features/pom.xml
features/odl-genius-api/pom.xml
features/odl-genius-api/src/main/feature/feature.xml
features/odl-genius-fcaps-application/pom.xml
features/odl-genius-fcaps-framework/pom.xml
features/odl-genius-rest/pom.xml
features/odl-genius/pom.xml
features/pom.xml
idmanager/idmanager-impl/pom.xml
idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdManager.java
idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdUtils.java
idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/IdHolderSyncJob.java
idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/LocalPoolCreateJob.java
idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/ExpectedAllocateIdMultipleRequestsFromReleaseIds.xtend
idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/IdManagerTest.java
idmanager/pom.xml
interfacemanager/interfacemanager-api/src/main/java/org/opendaylight/genius/interfacemanager/globals/InterfaceServiceUtil.java
interfacemanager/interfacemanager-impl/pom.xml
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/InterfacemgrProvider.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/AlivenessMonitorUtils.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceManagerCommonUtils.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceMetaUtils.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/diagstatus/IfmDiagStatusProvider.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/AlivenessMonitorListenerImpl.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeEntryConfigListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeRefEntryListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/HwVTEPConfigListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/IfIndexInterfaceCache.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceChildCache.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceInventoryStateListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceStateListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/TerminationPointStateListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/pmcounters/NodeConnectorStatsImpl.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceInstanceRecoveryHandler.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceServiceRecoveryHandler.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigAddHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigUpdateHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/statehelpers/HwVTEPInterfaceStateUpdateHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/utilities/SouthboundUtils.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigAddHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigRemoveHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceStateUpdateHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceTopologyStateUpdateHelper.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/InterfaceBatchHandler.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/SouthboundUtils.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/rpcservice/InterfaceManagerServiceImpl.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesConfigListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesInterfaceStateListener.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/ActionConverterUtil.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/FlowBasedServicesUtils.java
interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerConfigurationTest.java
interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestModule.java
interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestUtil.java
interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/OvsdbSouthboundTestUtil.java
interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/IfmCLIUtil.java
interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/ShowVlan.java
interfacemanager/pom.xml
ipv6util/impl/src/main/java/org/opendaylight/genius/ipv6util/nd/Ipv6NdUtilServiceImpl.java
ipv6util/pom.xml
itm/itm-api/pom.xml
itm/itm-impl/pom.xml
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cache/DpnTepStateCache.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelAddWorker.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelDeleteWorker.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelAddWorker.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelDeleteWorker.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmMonitorWorker.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepAddWorker.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepRemoveWorker.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepsNotHostedAddWorker.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTunnelAggregationHelper.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepAddConfigHelper.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepRemoveConfigHelper.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/impl/ItmUtils.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TerminationPointStateListener.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TunnelTopologyStateListener.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/renderer/ovs/utilities/DirectTunnelUtils.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/OvsdbNodeListener.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/TransportZoneListener.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/monitoring/ItmTunnelEventListener.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTepInstanceRecoveryHandler.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTzInstanceRecoveryHandler.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/rpc/ItmManagerRpcService.java
itm/itm-impl/src/test/java/org/opendaylight/genius/itm/cli/TepCommandHelperTest.java
itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmExternalTunnelAddTest.java
itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmInternalTunnelAddTest.java
itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmManagerRpcServiceTest.java
itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmManagerRpcServiceTest.java
itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTepAutoConfigTest.java
itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java
itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/OvsdbTestUtil.java
itm/pom.xml
karaf/pom.xml
lockmanager/pom.xml
mdsalutil/mdsal-testutils/src/main/java/org/opendaylight/genius/mdsal/testutils/DataBrokerTestWiring.java
mdsalutil/mdsalutil-api/pom.xml
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/datastoreutils/SingleTransactionDataBroker.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TransactionAdapter.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransaction.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransactionImpl.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedReadWriteTransactionImpl.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedWriteTransactionImpl.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingWriteTransaction.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/MDSALUtil.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/NWUtil.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ericmatches/EricMatchInfoHelper.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/nxmatches/NxMatchInfoHelper.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/DefaultBatchHandler.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/ResourceBatchingManager.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/hwvtep/HwvtepUtils.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionLoadMacToShaTest.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionNxConntrackTest.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetDestinationIpTest.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetDestinationTest.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetSourceTest.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpTest.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpv6Test.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionApplyActionsTest.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionWriteActionsTest.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/interfaces/testutils/FlowAssertTestUtils.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/matches/tests/MatchIpv4SourceTest.java
mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/tests/FlowEntityAssertBeansTest.java
mdsalutil/mdsalutil-impl/pom.xml
mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MDSALManager.java
mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MdSalUtilBatchHandler.java
mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/genius/datastoreutils/listeners/tests/DataTreeEventCallbackRegistrarTest.java
mdsalutil/mdsalutil-testutils/pom.xml
mdsalutil/pom.xml
networkutils/pom.xml
pom.xml

index e85706193c60e5d1ee16ad96618685cca32c80be..2a39fcb1e208145c3f9e2da33cf99e43d56e751c 100644 (file)
@@ -69,6 +69,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
+      <scope>provided</scope>
       <optional>true</optional>
     </dependency>
     <dependency>
index e838dde355748117863b725d4801ad10d147b5e0..02405b89c116c0c1d5798cd9b0366f0596efa7f8 100644 (file)
@@ -533,15 +533,15 @@ public class AlivenessMonitor extends AbstractClusteredSyncDataTreeChangeListene
                 MonitoringState monitoringState = monitoringStateBuilder.build();
 
                 txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, operTx -> {
-                    operTx.put(getMonitoringInfoId(monitorId), monitoringInfo, CREATE_MISSING_PARENT);
+                    operTx.mergeParentStructurePut(getMonitoringInfoId(monitorId), monitoringInfo);
                     LOG.debug("adding oper monitoring info {}", monitoringInfo);
 
-                    operTx.put(getMonitorStateId(monitoringKey), monitoringState, CREATE_MISSING_PARENT);
+                    operTx.mergeParentStructurePut(getMonitorStateId(monitoringKey), monitoringState);
                     LOG.debug("adding oper monitoring state {}", monitoringState);
 
                     MonitoridKeyEntry mapEntry = new MonitoridKeyEntryBuilder().setMonitorId(monitorId)
                             .setMonitorKey(monitoringKey).build();
-                    operTx.put(getMonitorMapId(monitorId), mapEntry, CREATE_MISSING_PARENT);
+                    operTx.mergeParentStructurePut(getMonitorMapId(monitorId), mapEntry);
                     LOG.debug("adding oper map entry {}", mapEntry);
                 }).addCallback(new FutureCallback<Object>() {
                     @Override
@@ -601,8 +601,8 @@ public class AlivenessMonitor extends AbstractClusteredSyncDataTreeChangeListene
                 monitorIds2.add(monitorId);
                 InterfaceMonitorEntry newEntry2 = new InterfaceMonitorEntryBuilder()
                             .setInterfaceName(interfaceName).setMonitorIds(monitorIds2).build();
-                tx.put(LogicalDatastoreType.OPERATIONAL, getInterfaceMonitorMapId(interfaceName), newEntry2,
-                            CREATE_MISSING_PARENT);
+                tx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, getInterfaceMonitorMapId(interfaceName),
+                        newEntry2);
             }
             return tx.commit();
         }, callbackExecutorService);
@@ -952,8 +952,8 @@ public class AlivenessMonitor extends AbstractClusteredSyncDataTreeChangeListene
                     final MonitorProfile monitorProfile = new MonitorProfileBuilder().setId(profileId)
                                 .setFailureThreshold(failureThreshold).setMonitorInterval(monitorInterval)
                                 .setMonitorWindow(monitorWindow).setProtocolType(protocolType).build();
-                    tx.put(LogicalDatastoreType.OPERATIONAL, getMonitorProfileId(profileId), monitorProfile,
-                          CREATE_MISSING_PARENT);
+                    tx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, getMonitorProfileId(profileId),
+                            monitorProfile);
                     tx.commit().addCallback(new FutureCallback<CommitInfo>() {
                             @Override
                             public void onFailure(Throwable error) {
@@ -1158,8 +1158,8 @@ public class AlivenessMonitor extends AbstractClusteredSyncDataTreeChangeListene
                 } else {
                     InterfaceMonitorEntry newEntry = new InterfaceMonitorEntryBuilder(entry)
                             .withKey(new InterfaceMonitorEntryKey(interfaceName)).setMonitorIds(monitorIds).build();
-                    tx.put(LogicalDatastoreType.OPERATIONAL, getInterfaceMonitorMapId(interfaceName), newEntry,
-                            CREATE_MISSING_PARENT);
+                    tx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL,
+                            getInterfaceMonitorMapId(interfaceName), newEntry);
                 }
                 return tx.commit();
             } else {
index 1beacb7ae604ccbd37c42502f18867554f3c8447..6ed5dfb32ecfdfda21e3d3d77cfd9a7b4854d874 100644 (file)
@@ -15,8 +15,10 @@ import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.MoreExecutors;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Semaphore;
@@ -62,6 +64,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hw
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdRemoteConfigsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdRemoteConfigsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdStatusKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
@@ -103,8 +106,8 @@ public class HwVtepTunnelsStateHandler extends AbstractSyncDataTreeChangeListene
     @Override
     public void update(@NonNull InstanceIdentifier<Tunnels> instanceIdentifier, @NonNull Tunnels oldTunnelInfo,
                        @NonNull Tunnels updatedTunnelInfo) {
-        List<BfdStatus> oldBfdStatus = oldTunnelInfo.getBfdStatus();
-        List<BfdStatus> newBfdStatus = updatedTunnelInfo.getBfdStatus();
+        @Nullable Map<BfdStatusKey, BfdStatus> oldBfdStatus = oldTunnelInfo.getBfdStatus();
+        @Nullable Map<BfdStatusKey, BfdStatus> newBfdStatus = updatedTunnelInfo.getBfdStatus();
         LivenessState oldTunnelOpState = getTunnelOpState(oldBfdStatus);
         final LivenessState newTunnelOpState = getTunnelOpState(newBfdStatus);
         if (oldTunnelOpState == newTunnelOpState) {
@@ -162,12 +165,12 @@ public class HwVtepTunnelsStateHandler extends AbstractSyncDataTreeChangeListene
         }, MoreExecutors.directExecutor());
     }
 
-    private LivenessState getTunnelOpState(List<BfdStatus> tunnelBfdStatus) {
+    private LivenessState getTunnelOpState(Map<BfdStatusKey, BfdStatus> tunnelBfdStatus) {
         LivenessState livenessState = LivenessState.Unknown;
         if (tunnelBfdStatus == null || tunnelBfdStatus.isEmpty()) {
             return livenessState;
         }
-        for (BfdStatus bfdState : tunnelBfdStatus) {
+        for (BfdStatus bfdState : tunnelBfdStatus.values()) {
             if (AlivenessMonitorConstants.BFD_OP_STATE.equalsIgnoreCase(bfdState.getBfdStatusKey())) {
                 String bfdOpState = bfdState.getBfdStatusValue();
                 if (AlivenessMonitorConstants.BFD_STATE_UP.equalsIgnoreCase(bfdOpState)) {
@@ -223,13 +226,13 @@ public class HwVtepTunnelsStateHandler extends AbstractSyncDataTreeChangeListene
                         return;
                     }
                     Tunnels tunnel = tunnelsOptional.get();
-                    List<BfdParams> tunnelBfdParams = tunnel.getBfdParams();
+                    @Nullable Map<BfdParamsKey, BfdParams> tunnelBfdParams = tunnel.getBfdParams();
                     if (tunnelBfdParams == null || tunnelBfdParams.isEmpty()) {
                         LOG.debug("there is no bfd params available for the tunnel {}", tunnel);
                         return;
                     }
 
-                    Iterator<BfdParams> tunnelBfdParamsIterator = tunnelBfdParams.iterator();
+                    Iterator<BfdParams> tunnelBfdParamsIterator = tunnelBfdParams.values().iterator();
                     while (tunnelBfdParamsIterator.hasNext()) {
                         BfdParams bfdParam = tunnelBfdParamsIterator.next();
                         if (AlivenessMonitorConstants.BFD_PARAM_ENABLE.equals(bfdParam.getBfdParamKey())) {
@@ -272,7 +275,7 @@ public class HwVtepTunnelsStateHandler extends AbstractSyncDataTreeChangeListene
         String tunnelLocalMacAddress = "<TODO>";
         String tunnelLocalIpAddress = "<TODO>";
         String tunnelRemoteMacAddress = "<TODO>";
-        List<BfdParams> bfdParams = new ArrayList<>();
+        Map<BfdParamsKey, BfdParams> bfdParams = new HashMap<>();
         fillBfdParams(bfdParams, profile);
         List<BfdLocalConfigs> bfdLocalConfigs = new ArrayList<>();
         fillBfdLocalConfigs(bfdLocalConfigs, tunnelLocalMacAddress, tunnelLocalIpAddress);
@@ -319,21 +322,35 @@ public class HwVtepTunnelsStateHandler extends AbstractSyncDataTreeChangeListene
                 .setBfdLocalConfigValue(value).build();
     }
 
-    private void fillBfdParams(List<BfdParams> bfdParams, MonitorProfile profile) {
+    private void fillBfdParams(Map<BfdParamsKey, BfdParams> bfdParams, MonitorProfile profile) {
         setBfdParamForEnable(bfdParams, true);
-        bfdParams.add(getBfdParams(AlivenessMonitorConstants.BFD_PARAM_MIN_RX,
-                Long.toString(profile.getMinRx().toJava())));
-        bfdParams.add(getBfdParams(AlivenessMonitorConstants.BFD_PARAM_MIN_TX,
-                Long.toString(profile.getMinTx().toJava())));
-        bfdParams.add(getBfdParams(AlivenessMonitorConstants.BFD_PARAM_DECAY_MIN_RX,
-                Long.toString(profile.getDecayMinRx().toJava())));
-        bfdParams.add(getBfdParams(AlivenessMonitorConstants.BFD_PARAM_FORWARDING_IF_RX, profile.getForwardingIfRx()));
-        bfdParams.add(getBfdParams(AlivenessMonitorConstants.BFD_PARAM_CPATH_DOWN, profile.getCpathDown()));
-        bfdParams.add(getBfdParams(AlivenessMonitorConstants.BFD_PARAM_CHECK_TNL_KEY, profile.getCheckTnlKey()));
+        BfdParams bfdParams1 = getBfdParams(AlivenessMonitorConstants.BFD_PARAM_MIN_RX,
+                Long.toString(profile.getMinRx().toJava()));
+        bfdParams.put(bfdParams1.key(),bfdParams1);
+
+        BfdParams bfdParams2 = getBfdParams(AlivenessMonitorConstants.BFD_PARAM_MIN_TX,
+                Long.toString(profile.getMinTx().toJava()));
+        bfdParams.put(bfdParams2.key(), bfdParams2);
+
+        BfdParams bfdParams3 = getBfdParams(AlivenessMonitorConstants.BFD_PARAM_DECAY_MIN_RX,
+                Long.toString(profile.getDecayMinRx().toJava()));
+        bfdParams.put(bfdParams3.key(), bfdParams3);
+
+        BfdParams bfdParams4 = getBfdParams(AlivenessMonitorConstants.BFD_PARAM_FORWARDING_IF_RX,
+                profile.getForwardingIfRx());
+        bfdParams.put(bfdParams4.key(), bfdParams4);
+
+        BfdParams bfdParams5 = getBfdParams(AlivenessMonitorConstants.BFD_PARAM_CPATH_DOWN, profile.getCpathDown());
+        bfdParams.put(bfdParams5.key(),bfdParams5);
+
+        BfdParams bfdParams6 = getBfdParams(AlivenessMonitorConstants.BFD_PARAM_CHECK_TNL_KEY,
+                profile.getCheckTnlKey());
+        bfdParams.put(bfdParams6.key(),bfdParams6);
     }
 
-    private void setBfdParamForEnable(List<BfdParams> bfdParams, boolean isEnabled) {
-        bfdParams.add(getBfdParams(AlivenessMonitorConstants.BFD_PARAM_ENABLE, Boolean.toString(isEnabled)));
+    private void setBfdParamForEnable(Map<BfdParamsKey, BfdParams> bfdParams, boolean isEnabled) {
+        bfdParams.put(getBfdParams(AlivenessMonitorConstants.BFD_PARAM_ENABLE, Boolean.toString(isEnabled)).key(),
+                getBfdParams(AlivenessMonitorConstants.BFD_PARAM_ENABLE, Boolean.toString(isEnabled)));
     }
 
     private BfdParams getBfdParams(String key, String value) {
index e659f2192a87307e70658e88781ed532c8955460..33d462df7881ad71e62487f31157fe52313774ab 100644 (file)
@@ -11,7 +11,6 @@ import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.Map;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Service;
 import org.opendaylight.genius.alivenessmonitor.protocols.AlivenessProtocolHandler;
 import org.opendaylight.genius.alivenessmonitor.protocols.AlivenessProtocolHandlerRegistry;
index 56563aaeb3e927afdbaf22cdf560035bc4e5287e..ff83f64f9dfa84096b3743a38587caf1441ac202 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index a3b31affee392cd60392b772298496470232ea32..788f69f9cd1287866fb5ba88f5b813a1982f04e9 100644 (file)
@@ -19,8 +19,8 @@ import com.google.common.util.concurrent.SettableFuture;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ExecutionException;
@@ -53,6 +53,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.ArpRequestReceivedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.ArpResponseReceivedBuilder;
@@ -233,7 +234,7 @@ public class ArpUtilImpl extends AbstractLifecycle implements OdlArputilService,
         }
 
         int localErrorCount = 0;
-        for (InterfaceAddress interfaceAddress : arpReqInput.nonnullInterfaceAddress()) {
+        for (InterfaceAddress interfaceAddress : arpReqInput.nonnullInterfaceAddress().values()) {
             try {
                 interfaceName = interfaceAddress.getInterface();
                 srcIpBytes = getIpAddressBytes(interfaceAddress.getIpAddress());
@@ -268,7 +269,7 @@ public class ArpUtilImpl extends AbstractLifecycle implements OdlArputilService,
                 payload = ArpPacketUtil.getPayload(ArpConstants.ARP_REQUEST_OP, srcMac, srcIpBytes,
                         ArpPacketUtil.ETHERNET_BROADCAST_DESTINATION, dstIpBytes);
 
-                List<Action> actions = getEgressAction(interfaceName);
+                Map<ActionKey, Action> actions = getEgressAction(interfaceName);
                 sendPacketOutWithActions(dpnId, payload, ref, actions);
 
                 LOG.trace("sent arp request for {}", arpReqInput.getIpaddress());
@@ -299,7 +300,7 @@ public class ArpUtilImpl extends AbstractLifecycle implements OdlArputilService,
     }
 
     private Future<RpcResult<TransmitPacketOutput>> sendPacketOutWithActions(
-            Uint64 dpnId, byte[] payload, NodeConnectorRef ref, List<Action> actions) {
+            Uint64 dpnId, byte[] payload, NodeConnectorRef ref, Map<ActionKey, Action> actions) {
         NodeConnectorRef nodeConnectorRef = MDSALUtil.getNodeConnRef(dpnId, "0xfffffffd");
         TransmitPacketInput transmitPacketInput = new TransmitPacketInputBuilder().setPayload(payload)
                 .setNode(new NodeRef(InstanceIdentifier.builder(Nodes.class)
@@ -309,8 +310,8 @@ public class ArpUtilImpl extends AbstractLifecycle implements OdlArputilService,
         return packetProcessingService.transmitPacket(transmitPacketInput);
     }
 
-    private List<Action> getEgressAction(String interfaceName) {
-        List<Action> actions = new ArrayList<>();
+    private Map<ActionKey, Action> getEgressAction(String interfaceName) {
+        Map<ActionKey, Action> actions = new HashMap<>();
         try {
             GetEgressActionsForInterfaceInputBuilder egressAction = new GetEgressActionsForInterfaceInputBuilder()
                     .setIntfName(interfaceName);
@@ -367,7 +368,7 @@ public class ArpUtilImpl extends AbstractLifecycle implements OdlArputilService,
             checkNotNull(srcIpBytes, ArpConstants.FAILED_TO_GET_SRC_IP_FOR_INTERFACE, interfaceName);
             payload = ArpPacketUtil.getPayload(ArpConstants.ARP_RESPONSE_OP, srcMac, srcIpBytes, dstMac, dstIpBytes);
 
-            List<Action> actions = getEgressAction(interfaceName);
+            Map<ActionKey, Action> actions = getEgressAction(interfaceName);
             sendPacketOutWithActions(dpnId, payload, ref, actions);
             LOG.debug("Sent ARP response for IP {}, from source MAC {} to target MAC {} and target IP {} via dpnId {}",
                     input.getSrcIpaddress().getIpv4Address().getValue(), HexEncode.bytesToHexStringFormat(srcMac),
index 5d29af1670a8f6dc2409882cd58c3e8fc7002035..23bf5685964f0e33766dfa6b80104a9c2d5ce77a 100644 (file)
@@ -17,7 +17,6 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.mockito.Mockito;
 import org.opendaylight.genius.mdsalutil.ActionInfo;
 import org.opendaylight.genius.mdsalutil.actions.ActionOutput;
index 350e69a0aadc1f640877adcbd0adc472007e8321..aeb9a0cfb0885495a3e3ab70a2c3f37b74413866 100644 (file)
@@ -11,7 +11,6 @@ import static org.opendaylight.yangtools.testutils.mockito.MoreAnswers.realOrExc
 
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
-
 import org.mockito.Mockito;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput;
index 55d437155d9ff25a54fb1197b76b86909cf92e7e..53aad2be56c6b3f4cc35bc1c5cd6787865464786 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index e5b28f65b39c9e35583c108e9bb0fcecacc01a97..a33173412d98c2325c5ec78747e4a58dfb214715 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 2ba9a2ba35676e3f3fc2efe6aaf8d1b2484a65a5..9209942f1638d39d48fc1151b4348aae17b9013e 100644 (file)
@@ -262,8 +262,8 @@ public class CloudscalerRpcServiceImpl implements CloudscalerRpcService {
         }
         ComputeNodeBuilder builder = new ComputeNodeBuilder(computeNode);
         builder.setTombstoned(tombstone);
-        tx.put(LogicalDatastoreType.CONFIGURATION,
-                computeNodeManager.buildComputeNodeIid(computeName), builder.build(), true);
+        tx.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION,
+                computeNodeManager.buildComputeNodeIid(computeName), builder.build());
     }
 
     @Override
@@ -306,7 +306,7 @@ public class CloudscalerRpcServiceImpl implements CloudscalerRpcService {
                         if (zone.getVteps() == null) {
                             continue;
                         }
-                        for (Vteps vteps : zone.getVteps()) {
+                        for (Vteps vteps : zone.getVteps().values()) {
                             if (vteps.getDpnId().equals(computeNode.getDpnid())) {
                                 InstanceIdentifier<Vteps> dpnVtepIid = InstanceIdentifier
                                         .create(TransportZones.class)
index e30a19e8e73502b152d8e65ec96074195282ea23..086d3a8123a201d411e551ba50833adc326b8cbb 100644 (file)
@@ -107,7 +107,7 @@ public class ComputeNodeManager {
         OvsdbBridgeAugmentation bridgeAugmentation = node.augmentation(OvsdbBridgeAugmentation.class);
         if (bridgeAugmentation != null && bridgeAugmentation.getBridgeOtherConfigs() != null) {
             Uint64 datapathid = getDpnIdFromBridge(bridgeAugmentation);
-            Optional<BridgeOtherConfigs> otherConfigOptional = bridgeAugmentation.getBridgeOtherConfigs()
+            Optional<BridgeOtherConfigs> otherConfigOptional = bridgeAugmentation.getBridgeOtherConfigs().values()
                     .stream()
                     .filter(otherConfig -> otherConfig.getBridgeOtherConfigKey().equals("dp-desc"))
                     .findFirst();
index c4ecf6572c88bc5d7aa82729082e44d9e6ac8227..634132b0a48bb255236d4f8a4fd0457f28a9f529 100644 (file)
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index b815d3a65de5dafc844fc0709606a753c96fd0a7..4f04a1e5d720934fbfe23bd0c26259d78acc173d 100644 (file)
@@ -10,7 +10,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>5.0.9</version>
+    <version>6.0.0</version>
     <relativePath/>
   </parent>
 
@@ -33,8 +33,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependencies>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
-        <artifactId>mdsal-artifacts</artifactId>
-        <version>1.11.0</version>
+        <artifactId>controller-artifacts</artifactId>
+        <version>2.0.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
@@ -45,6 +45,16 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
         <type>pom</type>
         <scope>import</scope>
       </dependency>
+      <dependency>
+        <groupId>com.mycila.guice.extensions</groupId>
+        <artifactId>mycila-guice-jsr250</artifactId>
+        <version>4.0.rc1</version>
+      </dependency>
+      <dependency>
+        <groupId>com.google.inject</groupId>
+        <artifactId>guice</artifactId>
+        <version>4.2.2</version>
+      </dependency>
       <dependency>
         <groupId>org.opendaylight.serviceutils</groupId>
         <artifactId>serviceutils-artifacts</artifactId>
index 8214ab586d07e991403994bab4a164cddd483c1d..06cf97fbd6be22ce52a68d465f217ed9faae602e 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 6bd70877fe0b12570fe7a9b67c51624b7d266a17..31b2be9492461c8c6cbe5f18e2f7408c7551660d 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 88b12e51f53ba190d9a4d0a01d68f53e7968df5e..dbd79e05a93ff09738e076c86a620af559a6bfff 100644 (file)
       <dependency>
         <groupId>org.opendaylight.yangtools</groupId>
         <artifactId>yangtools-artifacts</artifactId>
-        <version>4.0.6</version>
+        <version>5.0.1</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
-        <artifactId>mdsal-artifacts</artifactId>
-        <version>1.11.0</version>
+        <artifactId>controller-artifacts</artifactId>
+        <version>2.0.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.mdsal</groupId>
         <artifactId>mdsal-artifacts</artifactId>
-        <version>5.0.9</version>
+        <version>6.0.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
index 5c1eb7f20ebd317c46e2ebbbc2820b84f81391d3..847edeec9b4698442b980d377b8dcb1ebbe82bb8 100644 (file)
@@ -48,6 +48,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
+      <scope>provided</scope>
       <optional>true</optional>
     </dependency>
     <dependency>
index 36de3bf644e53159e213fdd9a19d6ab28ca77f04..aac128a6f59ea3250d4fd9e53c954aa7d360e481 100644 (file)
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index c72fd9cb0c937590191bc8f23936b5a790d7ea43..0f9b0ad90467fe68f398022c969501a22809bb7e 100644 (file)
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index b9144e8c2dbb9597c3f746858c5fc28c60129787..0015d6d935bff3b92f38e10a8e3e23ee4a97e337 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>feature-repo-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index de84c05cffe83dcb9e7b2d7000a1c9465fb68054..3bb5f3e47dddce9405318567ff87133b5a0c0b83 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
@@ -27,7 +27,7 @@
       <dependency>
         <groupId>org.opendaylight.mdsal</groupId>
         <artifactId>mdsal-artifacts</artifactId>
-        <version>5.0.9</version>
+        <version>6.0.0</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
index 68914ceb46ef2a748ea3a584b0e4c354c6185e6d..1cb84b8d6b2da100cebd67d72f88a171c880d19b 100644 (file)
@@ -8,6 +8,6 @@
  -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-genius-api">
     <feature name="odl-genius-api">
-        <feature version="[6,7)">odl-apache-commons-net</feature>
+        <feature version="[7,8)">odl-apache-commons-net</feature>
     </feature>
 </features>
index a4402f050ec177da6e2378b5b06815e6b93871fe..a0bebf668d7d48201448b01376b699e99b55d1cf 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 43336bd6a98576dd0f689a19cfbadc33e15dea6b..420ee220b1c0cd50e3388e9880729a44b18d9213 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 09c532e973625c18b35bbdd7c95320d419122493..def7b2ff2d34c471e86a12912ef1fd3e34a06855 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index a01a8c43b54b6d851de0add4779cda77a9029124..00e0d3831e050e79f7df7d4dfffb4d91c54558eb 100644 (file)
@@ -12,7 +12,7 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 819e5e63788345dd288a517cddf36a358c01d361..24ad747da786c8bc239fc88837a9c1fa14aa8d44 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <parent>
         <groupId>org.opendaylight.odlparent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>6.0.4</version>
+        <version>7.0.1</version>
         <relativePath/>
     </parent>
 
index 870c45e275dbb7384429044986fc13a67ec7d67f..6c4eac7f7a6e6cdfac2310fc9a1f4e958d6c6595 100644 (file)
@@ -49,6 +49,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
+      <scope>provided</scope>
       <optional>true</optional>
     </dependency>
     <dependency>
index 302d885b1de81ca81f6e813062e5776d6b80f979..9c43f90eefeefa81e1e3bad3dc42fe984c23fa1e 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.genius.idmanager;
 import static java.util.Comparator.comparing;
 import static java.util.stream.Collectors.toCollection;
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 import static org.opendaylight.yangtools.yang.binding.CodeHelpers.nonnull;
 
 import com.google.common.util.concurrent.Futures;
@@ -32,11 +31,13 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.apache.aries.blueprint.annotation.service.Reference;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.daexim.DataImportBootReady;
 import org.opendaylight.genius.datastoreutils.ExpectedDataObjectNotFoundException;
 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
@@ -79,7 +80,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolderBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPools;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPoolsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntriesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolderBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntries;
@@ -165,7 +168,7 @@ public class IdManager implements IdManagerService, IdManagerMonitor {
         if (!idPoolsOptional.isPresent()) {
             return;
         }
-        idPoolsOptional.get().nonnullIdPool()
+        idPoolsOptional.get().nonnullIdPool().values()
                 .stream()
                 .filter(idPool -> idPool.getParentPoolName() != null
                         && !idPool.getParentPoolName().isEmpty()
@@ -271,9 +274,14 @@ public class IdManager implements IdManagerService, IdManagerMonitor {
             InstanceIdentifier<IdPool> idPoolToBeDeleted = idUtils.getIdPoolInstance(poolName);
             synchronized (poolName) {
                 IdPool idPool = singleTxDB.syncRead(LogicalDatastoreType.CONFIGURATION, idPoolToBeDeleted);
-                List<ChildPools> childPoolList = idPool.getChildPools();
+                //List<ChildPools> childPoolList = idPool.getChildPools();
+
+
+                @Nullable Map<ChildPoolsKey, ChildPools> childPoolList = idPool.getChildPools();
                 if (childPoolList != null) {
-                    childPoolList.forEach(childPool -> deletePool(childPool.getChildPoolName()));
+                    childPoolList.forEach((childPool, childPools) -> {
+                        deletePool(childPool.getChildPoolName());
+                    });
                 }
                 singleTxDB.syncDelete(LogicalDatastoreType.CONFIGURATION, idPoolToBeDeleted);
             }
@@ -456,12 +464,15 @@ public class IdManager implements IdManagerService, IdManagerMonitor {
 
     private long getIdsFromOtherChildPools(ReleasedIdsHolderBuilder releasedIdsBuilderParent, IdPool parentIdPool)
             throws OperationFailedException {
-        List<ChildPools> childPoolsList = parentIdPool.nonnullChildPools();
+        @Nullable Map<ChildPoolsKey, ChildPools> childPoolsMap = parentIdPool.nonnullChildPools();
         // Sorting the child pools on last accessed time so that the pool that
         // was not accessed for a long time comes first.
-        childPoolsList.sort(comparing(ChildPools::getLastAccessTime));
+
+        List<ChildPools> list = childPoolsMap.values().stream().collect(Collectors.toList());
+        list.sort(comparing(ChildPools::getLastAccessTime));
+
         long currentTime = System.currentTimeMillis() / 1000;
-        for (ChildPools childPools : childPoolsList) {
+        for (ChildPools childPools : childPoolsMap.values()) {
             if (childPools.getLastAccessTime().toJava() + DEFAULT_IDLE_TIME > currentTime) {
                 break;
             }
@@ -530,7 +541,7 @@ public class IdManager implements IdManagerService, IdManagerMonitor {
                         new IdPoolKey(parentIdPool.getPoolName())).child(ReleasedIdsHolder.class).build();
         releasedIdsBuilderParent.setAvailableIdCount(releasedIdsBuilderParent.getAvailableIdCount().toJava() - idCount);
         LOG.debug("Allocated {} ids from releasedIds of parent pool {}", idCount, parentIdPool);
-        confTx.merge(releasedIdsHolderInstanceIdentifier, releasedIdsBuilderParent.build(), CREATE_MISSING_PARENTS);
+        confTx.mergeParentStructureMerge(releasedIdsHolderInstanceIdentifier, releasedIdsBuilderParent.build());
         return idCount;
     }
 
@@ -558,7 +569,7 @@ public class IdManager implements IdManagerService, IdManagerMonitor {
         if (LOG.isDebugEnabled()) {
             LOG.debug("Allocated {} ids from availableIds of global pool {}", idCount, parentIdPool);
         }
-        confTx.merge(availableIdsHolderInstanceIdentifier, availableIdsBuilderParent.build(), CREATE_MISSING_PARENTS);
+        confTx.mergeParentStructureMerge(availableIdsHolderInstanceIdentifier, availableIdsBuilderParent.build());
         return idCount;
     }
 
@@ -581,7 +592,7 @@ public class IdManager implements IdManagerService, IdManagerMonitor {
         localPoolName = localPoolName.intern();
         InstanceIdentifier<IdPool> parentIdPoolInstanceIdentifier = idUtils.getIdPoolInstance(parentPoolName);
         IdPool parentIdPool = singleTxDB.syncRead(LogicalDatastoreType.CONFIGURATION, parentIdPoolInstanceIdentifier);
-        List<IdEntries> idEntries = parentIdPool.getIdEntries();
+        @Nullable Map<IdEntriesKey, IdEntries> idEntries = parentIdPool.getIdEntries();
         if (idEntries == null) {
             throw new IdDoesNotExistException(parentPoolName, idKey);
         }
@@ -597,7 +608,7 @@ public class IdManager implements IdManagerService, IdManagerMonitor {
         IdEntries existingIdEntry = existingIdEntryObject.get();
         List<Uint32> idValuesList = nonnull(existingIdEntry.getIdValue());
         IdLocalPool localIdPoolCache = localPool.get(parentPoolName);
-        boolean isRemoved = idEntries.contains(existingIdEntry);
+        boolean isRemoved = idEntries.values().contains(existingIdEntry);
         LOG.debug("The entry {} is removed {}", existingIdEntry, isRemoved);
         updateDelayedEntriesInLocalCache(idValuesList, parentPoolName, localIdPoolCache);
         IdHolderSyncJob poolSyncJob = new IdHolderSyncJob(localPoolName, localIdPoolCache.getReleasedIds(), txRunner,
@@ -637,7 +648,7 @@ public class IdManager implements IdManagerService, IdManagerMonitor {
                     LOG.debug("Creating new global pool {}", poolName);
                 }
                 idPool = idUtils.createGlobalPool(poolName, low, high, blockSize);
-                confTx.put(idPoolInstanceIdentifier, idPool, CREATE_MISSING_PARENTS);
+                confTx.mergeParentStructurePut(idPoolInstanceIdentifier, idPool);
             } else {
                 idPool = existingIdPool.get();
                 if (LOG.isDebugEnabled()) {
index 1fefd680dcc4b10fc9b60d633933b4e7f3a1c909..3b08f2fb1e3a739517d7facb4be445b14ec43b90 100644 (file)
@@ -8,8 +8,6 @@
 
 package org.opendaylight.genius.idmanager;
 
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
-
 import com.google.common.net.InetAddresses;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -307,7 +305,7 @@ public class IdUtils {
         ChildPools childPool = createChildPool(localPoolName);
         InstanceIdentifier<ChildPools> childPoolInstanceIdentifier =
                 getChildPoolsInstanceIdentifier(poolName, localPoolName);
-        tx.merge(childPoolInstanceIdentifier, childPool, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructureMerge(childPoolInstanceIdentifier, childPool);
     }
 
     public void incrementPoolUpdatedMap(String localPoolName) {
index c8c3876ce53fa3f2defb0d729dd1a2ca7cd8b04e..c81deee332d9659eaea48446705196924ec21bf8 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.genius.idmanager.jobs;
 
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collections;
@@ -47,7 +46,7 @@ public class IdHolderSyncJob implements Callable<List<? extends ListenableFuture
         idHolder.refreshDataStore(idPool);
         InstanceIdentifier<IdPool> localPoolInstanceIdentifier = idUtils.getIdPoolInstance(localPoolName);
         return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION, tx -> {
-            tx.merge(localPoolInstanceIdentifier, idPool.build(), CREATE_MISSING_PARENTS);
+            tx.mergeParentStructureMerge(localPoolInstanceIdentifier, idPool.build());
             idUtils.incrementPoolUpdatedMap(localPoolName);
 
             if (LOG.isDebugEnabled()) {
index 259c9acc7e5ebb13a0c417c0c4cea6831142421e..40cc8ae55fbfd8689faab30bcd7bbd5ce2748d84 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.genius.idmanager.jobs;
 
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collections;
@@ -55,6 +54,6 @@ public class LocalPoolCreateJob implements Callable<List<? extends ListenableFut
         idLocalPool.getAvailableIds().refreshDataStore(idPool);
         idLocalPool.getReleasedIds().refreshDataStore(idPool);
         return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
-            tx -> tx.put(localPoolInstanceIdentifier, idPool.build(), CREATE_MISSING_PARENTS)));
+            tx -> tx.mergeParentStructurePut(localPoolInstanceIdentifier, idPool.build())));
     }
 }
index 0827d5a9dadd03a3c9edbf236181cb7584ecad73..ffcd8087a3dac8b282c2101c11771c3d1896b216 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPoolsBuilder
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntriesBuilder
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolderBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntriesBuilder
 import org.opendaylight.yangtools.yang.common.Uint32;
 
 import static extension org.opendaylight.mdsal.binding.testutils.XtendBuilderExtensions.operator_doubleGreaterThan
@@ -83,6 +84,16 @@ class ExpectedAllocateIdMultipleRequestsFromReleaseIds {
             releasedIdsHolder = new ReleasedIdsHolderBuilder >> [
                 availableIdCount = 0L
                 delayedTimeSec = 30L
+                delayedIdEntries = #[
+                    new DelayedIdEntriesBuilder >> [
+                        id = Uint32.valueOf(2L)
+                        readyTimeSec = Uint32.valueOf(0L)
+                    ],
+                    new DelayedIdEntriesBuilder >> [
+                        id = Uint32.valueOf(3L)
+                        readyTimeSec = Uint32.valueOf(0L)
+                    ]
+                ]
             ]
         ]
     }
index 4c0b1c0385455ff4deed2a17716c81561810807d..b80731f0add9b3b9ee1d539e40b1cdc2b528c9b6 100644 (file)
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
@@ -30,6 +31,8 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 import javax.inject.Inject;
 import junit.framework.AssertionFailedError;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.junit.Before;
 import org.junit.ComparisonFailure;
 import org.junit.Rule;
@@ -69,7 +72,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolderBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPools;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPoolsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPoolsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntriesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolderBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntries;
@@ -170,8 +175,9 @@ public class IdManagerTest {
         String localPoolName = idUtils.getLocalPoolName(ID_POOL_NAME);
         IdPool parentIdPool = new IdPoolBuilder().setPoolName(ID_POOL_NAME).withKey(new IdPoolKey(ID_POOL_NAME))
                 .setAvailableIdsHolder(createAvailableIdHolder(ID_LOW, ID_HIGH, ID_HIGH + 1))
-                .setReleasedIdsHolder(createReleaseIdHolder(Arrays.asList(1L, 2L, 3L))).build();
+                .setReleasedIdsHolder(createReleaseIdHolder(Collections.emptyList())).build();
         IdPool childPool = new IdPoolBuilder().setPoolName(localPoolName).withKey(new IdPoolKey(localPoolName))
+                .setReleasedIdsHolder(createReleaseIdHolder(Arrays.asList(1L, 2L, 3L)))
                 .setAvailableIdsHolder(createAvailableIdHolder(0L, 9L, 10L)).build();
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
         tx.merge(LogicalDatastoreType.CONFIGURATION, getIdPoolIdentifier(ID_POOL_NAME), parentIdPool);
@@ -299,7 +305,6 @@ public class IdManagerTest {
         tx.commit().get();
         requestIdsConcurrently(true);
         coordinatorEventsWaiter.awaitEventsConsumption();
-
         validateIdPools(ExpectedAllocateIdFromReleasedId.idPoolParent(),
                 ExpectedAllocateIdFromReleasedId.idPoolChild());
     }
@@ -410,13 +415,16 @@ public class IdManagerTest {
     private IdPool getUpdatedActualParentPool() throws ReadFailedException {
         IdPool idPoolParentFromDS = singleTxdataBroker.syncRead(LogicalDatastoreType.CONFIGURATION,
                 InstanceIdentifier.builder(IdPools.class).child(IdPool.class, new IdPoolKey(ID_POOL_NAME)).build());
-        List<ChildPools> childPool = idPoolParentFromDS.nonnullChildPools();
-        List<ChildPools> updatedChildPool = childPool.stream()
+        @NonNull Map<ChildPoolsKey, ChildPools> childPool = idPoolParentFromDS.nonnullChildPools();
+
+        List<ChildPools> childPoolList = childPool.values().stream().collect(Collectors.toList());
+        List<ChildPools> updatedChildPool = childPoolList.stream()
                 .map(child -> new ChildPoolsBuilder(child).setLastAccessTime(0L).build()).collect(Collectors.toList());
-        List<IdEntries> idEntries = idPoolParentFromDS.getIdEntries();
+
+        @Nullable Map<IdEntriesKey, IdEntries> idEntries =  idPoolParentFromDS.getIdEntries();
         IdPoolBuilder idPoolBuilder = new IdPoolBuilder(idPoolParentFromDS);
         if (idEntries != null) {
-            List<IdEntries> sortedIdEntries = idEntries.stream().sorted(comparing(IdEntries::getIdKey))
+            List<IdEntries> sortedIdEntries = idEntries.values().stream().sorted(comparing(IdEntries::getIdKey))
                     .collect(Collectors.toList());
             idPoolBuilder.setIdEntries(sortedIdEntries);
         }
index 39f1b2f0e14030f6959bf905fcf18cb926027a4e..501281096c0fb572a3d9d23a6a7fae0d18f958f6 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 8c4266301aaafa05b54cd6383719e99185a87b8e..549a1ad0e8c38b39d511c53b797d09bbe81cbbde 100644 (file)
@@ -13,7 +13,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
-
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
 import org.opendaylight.genius.mdsalutil.FlowInfoKey;
index 4ff6f974fba4b60abba9abdeae36f5bf87155873..a9c5a8bf85a382d4366fa68238309b8f1787e457 100644 (file)
@@ -100,6 +100,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
+      <scope>provided</scope>
       <optional>true</optional>
     </dependency>
     <dependency>
index 0a48927cc4757464ab1f7b93daca7f2bf8512405..1ae6460e108cc61ae5a1c6f36cbb5c1bda78412f 100755 (executable)
@@ -13,7 +13,6 @@ import static org.opendaylight.genius.interfacemanager.globals.InterfaceInfo.Int
 import static org.opendaylight.genius.interfacemanager.globals.InterfaceInfo.InterfaceType.MPLS_OVER_GRE;
 import static org.opendaylight.genius.interfacemanager.globals.InterfaceInfo.InterfaceType.VLAN_INTERFACE;
 import static org.opendaylight.genius.interfacemanager.globals.InterfaceInfo.InterfaceType.VXLAN_TRUNK_INTERFACE;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.util.concurrent.ListenableFuture;
@@ -21,6 +20,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
@@ -63,6 +63,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.Fl
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.metadata._case.WriteMetadata;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdOutput;
@@ -389,12 +390,12 @@ public final class IfmUtil {
         return new NodeId(ncId.getValue().substring(0, ncId.getValue().lastIndexOf(':')));
     }
 
-    public static Uint64[] mergeOpenflowMetadataWriteInstructions(List<Instruction> instructions) {
+    public static Uint64[] mergeOpenflowMetadataWriteInstructions(Map<InstructionKey, Instruction> instructions) {
         Uint64 metadata = Uint64.ZERO;
         Uint64 metadataMask = Uint64.ZERO;
         if (instructions != null && !instructions.isEmpty()) {
             // check if metadata write instruction is present
-            for (Instruction instruction : instructions) {
+            for (Instruction instruction : instructions.values()) {
                 org.opendaylight.yang.gen.v1.urn.opendaylight.flow
                     .types.rev131026.instruction.Instruction actualInstruction = instruction
                         .getInstruction();
@@ -557,7 +558,7 @@ public final class IfmUtil {
         LOG.info("Binding Service {} for : {}", serviceInfo.getServiceName(), interfaceName);
         InstanceIdentifier<BoundServices> boundServicesInstanceIdentifier = buildBoundServicesIId(
             serviceInfo.getServicePriority().toJava(), interfaceName, serviceMode);
-        tx.put(boundServicesInstanceIdentifier, serviceInfo, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructurePut(boundServicesInstanceIdentifier, serviceInfo);
     }
 
     public static void unbindService(ManagedNewTransactionRunner txRunner, JobCoordinator coordinator,
index 6de13284a29fd6b249149003b7acabcb3f8c5320..f05f922b184be3aeec6bb5b439559f268f0031ed 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.genius.interfacemanager;
 
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
@@ -23,6 +22,7 @@ import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.apache.aries.blueprint.annotation.service.Reference;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.datastoreutils.ExpectedDataObjectNotFoundException;
 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
 import org.opendaylight.genius.infra.Datastore.Configuration;
@@ -66,6 +66,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.config.rev160406.IfmConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfExternal;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfExternalBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
@@ -92,6 +93,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.Uint64;
@@ -425,7 +427,7 @@ public class InterfacemgrProvider implements AutoCloseable, IInterfaceManager {
         InstanceIdentifier<Interface> interfaceIId = InterfaceManagerCommonUtils
                 .getInterfaceIdentifier(new InterfaceKey(interfaceName));
         ListenableFuture<Void> future = txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
-            tx -> tx.put(interfaceIId, interfaceBuilder.build(), CREATE_MISSING_PARENTS));
+            tx -> tx.mergeParentStructurePut(interfaceIId, interfaceBuilder.build()));
         ListenableFutures.addErrorLogging(future, LOG, "Failed to (async) write {}", interfaceIId);
         return future;
     }
@@ -551,14 +553,14 @@ public class InterfacemgrProvider implements AutoCloseable, IInterfaceManager {
             return Collections.emptyList();
         }
 
-        List<InterfaceChildEntry> childEntries = parentEntry.getInterfaceChildEntry();
+        @Nullable Map<InterfaceChildEntryKey, InterfaceChildEntry> childEntries = parentEntry.getInterfaceChildEntry();
         if (childEntries == null || childEntries.isEmpty()) {
             LOG.debug("No child entries found for parent {}", parentInterface);
             return Collections.emptyList();
         }
 
         List<Interface> childInterfaces = new ArrayList<>();
-        for (InterfaceChildEntry childEntry : childEntries) {
+        for (InterfaceChildEntry childEntry : childEntries.values()) {
             String interfaceName = childEntry.getChildInterface();
             Interface iface = interfaceManagerCommonUtils.getInterfaceFromConfigDS(tx, interfaceName);
             if (iface != null) {
@@ -816,8 +818,8 @@ public class InterfacemgrProvider implements AutoCloseable, IInterfaceManager {
      */
     public List<OvsdbTerminationPointAugmentation> getPortsOnBridge(Uint64 dpnId) {
         List<OvsdbTerminationPointAugmentation> ports = new ArrayList<>();
-        List<TerminationPoint> portList = interfaceMetaUtils.getTerminationPointsOnBridge(dpnId);
-        for (TerminationPoint ovsPort : portList) {
+        Map<TerminationPointKey, TerminationPoint> portList = interfaceMetaUtils.getTerminationPointsOnBridge(dpnId);
+        for (TerminationPoint ovsPort : portList.values()) {
             if (ovsPort.augmentation(OvsdbTerminationPointAugmentation.class) != null) {
                 ports.add(ovsPort.augmentation(OvsdbTerminationPointAugmentation.class));
             }
@@ -838,8 +840,8 @@ public class InterfacemgrProvider implements AutoCloseable, IInterfaceManager {
     @Override
     public List<OvsdbTerminationPointAugmentation> getTunnelPortsOnBridge(Uint64 dpnId) {
         List<OvsdbTerminationPointAugmentation> tunnelPorts = new ArrayList<>();
-        List<TerminationPoint> portList = interfaceMetaUtils.getTerminationPointsOnBridge(dpnId);
-        for (TerminationPoint ovsPort : portList) {
+        Map<TerminationPointKey, TerminationPoint> portList = interfaceMetaUtils.getTerminationPointsOnBridge(dpnId);
+        for (TerminationPoint ovsPort : portList.values()) {
             OvsdbTerminationPointAugmentation portAug =
                     ovsPort.augmentation(OvsdbTerminationPointAugmentation.class);
             if (portAug != null && SouthboundUtils.isInterfaceTypeTunnel(portAug.getInterfaceType())) {
@@ -866,9 +868,9 @@ public class InterfacemgrProvider implements AutoCloseable, IInterfaceManager {
 
         Map<Class<? extends InterfaceTypeBase>, List<OvsdbTerminationPointAugmentation>> portMap;
         portMap = new ConcurrentHashMap<>();
-        List<TerminationPoint> ovsPorts = interfaceMetaUtils.getTerminationPointsOnBridge(dpnId);
+        Map<TerminationPointKey, TerminationPoint> ovsPorts = interfaceMetaUtils.getTerminationPointsOnBridge(dpnId);
         if (ovsPorts != null) {
-            for (TerminationPoint ovsPort : ovsPorts) {
+            for (TerminationPoint ovsPort : ovsPorts.values()) {
                 OvsdbTerminationPointAugmentation portAug =
                         ovsPort.augmentation(OvsdbTerminationPointAugmentation.class);
                 if (portAug != null && portAug.getInterfaceType() != null) {
index 978f2a13137c6266121c4e86f7eee4833c21dfe6..1b306ba77b9af611da954a8138d54754c7d214c5 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.genius.interfacemanager.commons;
 
 import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
@@ -19,7 +18,6 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.infra.Datastore.Operational;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
@@ -64,7 +62,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.Uint32;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -175,7 +172,7 @@ public final class AlivenessMonitorUtils {
                 InterfaceMonitorIdBuilder interfaceMonitorIdBuilder = new InterfaceMonitorIdBuilder();
                 interfaceMonitorIdInstance = interfaceMonitorIdBuilder.withKey(new InterfaceMonitorIdKey(infName))
                         .setMonitorId(existingMonitorIds).build();
-                tx.merge(id, interfaceMonitorIdInstance, CREATE_MISSING_PARENTS);
+                tx.mergeParentStructureMerge(id, interfaceMonitorIdInstance);
             }
         }
     }
@@ -236,14 +233,14 @@ public final class AlivenessMonitorUtils {
                 existingMonitorIds.add(Uint32.valueOf(monitorId));
                 interfaceMonitorIdInstance = interfaceMonitorIdBuilder.withKey(new InterfaceMonitorIdKey(infName))
                         .setMonitorId(existingMonitorIds).build();
-                tx.merge(id, interfaceMonitorIdInstance, CREATE_MISSING_PARENTS);
+                tx.mergeParentStructureMerge(id, interfaceMonitorIdInstance);
             }
         } else {
             existingMonitorIds = new ArrayList<>();
             existingMonitorIds.add(Uint32.valueOf(monitorId));
             interfaceMonitorIdInstance = interfaceMonitorIdBuilder.setMonitorId(existingMonitorIds)
                     .withKey(new InterfaceMonitorIdKey(infName)).setInterfaceName(infName).build();
-            tx.merge(id, interfaceMonitorIdInstance, CREATE_MISSING_PARENTS);
+            tx.mergeParentStructureMerge(id, interfaceMonitorIdInstance);
         }
     }
 
@@ -261,12 +258,12 @@ public final class AlivenessMonitorUtils {
             if (!Objects.equals(existinginterfaceName, infName)) {
                 monitorIdInterfaceInstance = monitorIdInterfaceBuilder.withKey(new MonitorIdInterfaceKey(monitorId))
                         .setInterfaceName(infName).build();
-                tx.merge(id, monitorIdInterfaceInstance, CREATE_MISSING_PARENTS);
+                tx.mergeParentStructureMerge(id, monitorIdInterfaceInstance);
             }
         } else {
             monitorIdInterfaceInstance = monitorIdInterfaceBuilder.setMonitorId(monitorId)
                     .withKey(new MonitorIdInterfaceKey(monitorId)).setInterfaceName(infName).build();
-            tx.merge(id, monitorIdInterfaceInstance, CREATE_MISSING_PARENTS);
+            tx.mergeParentStructureMerge(id, monitorIdInterfaceInstance);
         }
     }
 
index 5a388ed5f34348a7ceab4fd637bf7679ed120dae..620c1bd9a64fc8d0ba40a1da5de7b96bc4a5cdb6 100644 (file)
@@ -8,13 +8,13 @@
 package org.opendaylight.genius.interfacemanager.commons;
 
 import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
@@ -349,13 +349,13 @@ public final class InterfaceManagerCommonUtils {
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
             .ietf.interfaces.rev140508.interfaces.state.Interface interfaceData = ifaceBuilder
                 .setOperStatus(opStatus).build();
-        tx.merge(interfaceId, interfaceData, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructureMerge(interfaceId, interfaceData);
     }
 
     public void createInterfaceChildEntry(@NonNull TypedWriteTransaction<Configuration> tx, String parentInterface,
         String childInterface) {
         createInterfaceChildEntry(parentInterface, childInterface,
-            pair -> tx.put(pair.getKey(), pair.getValue(), CREATE_MISSING_PARENTS));
+            pair -> tx.mergeParentStructurePut(pair.getKey(), pair.getValue()));
     }
 
     private void createInterfaceChildEntry(String parentInterface, String childInterface,
@@ -477,7 +477,7 @@ public final class InterfaceManagerCommonUtils {
         InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
             .ietf.interfaces.rev140508.interfaces.state.Interface> ifStateId = IfmUtil
             .buildStateInterfaceId(interfaceName);
-        tx.put(ifStateId, ifaceBuilder.build(), CREATE_MISSING_PARENTS);
+        tx.mergeParentStructurePut(ifStateId, ifaceBuilder.build());
 
         // install ingress flow
         Uint64 dpId = IfmUtil.getDpnFromNodeConnectorId(nodeConnectorId);
@@ -544,7 +544,7 @@ public final class InterfaceManagerCommonUtils {
         if (isTunnelInterface && !isOfTunnelInterface) {
             batchingUtils.write(ifStateId, ifState, BatchingUtils.EntityType.DEFAULT_OPERATIONAL);
         } else {
-            tx.put(ifStateId, ifState, CREATE_MISSING_PARENTS);
+            tx.mergeParentStructurePut(ifStateId, ifState);
         }
         if (nodeConnectorId != null) {
             Uint64 dpId = IfmUtil.getDpnFromNodeConnectorId(nodeConnectorId);
@@ -578,9 +578,10 @@ public final class InterfaceManagerCommonUtils {
                 .getInterfaceParentEntryFromConfigDS(interfaceParentEntryIdentifier);
 
         if (interfaceParentEntry != null) {
-            List<InterfaceChildEntry> interfaceChildEntries = interfaceParentEntry.getInterfaceChildEntry();
+            Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries =
+                    interfaceParentEntry.getInterfaceChildEntry();
             if (interfaceChildEntries != null) {
-                for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
+                for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries.values()) {
                     String curChildInterface = interfaceChildEntry.getChildInterface();
                     if (childInterface.equals(curChildInterface)) {
                         LOG.trace("Child entry for interface {} already exists", childInterface);
@@ -727,7 +728,7 @@ public final class InterfaceManagerCommonUtils {
         batchingUtils.write(intfid, entryBuilder.build(), BatchingUtils.EntityType.DEFAULT_OPERATIONAL);
     }
 
-    public List<InterfaceNameEntry> getAllInterfaces(Uint64 dpnId) {
+    public Map<InterfaceNameEntryKey, InterfaceNameEntry> getAllInterfaces(Uint64 dpnId) {
         DpnToInterfaceKey dpnToInterfaceKey = new DpnToInterfaceKey(dpnId);
         InstanceIdentifier<DpnToInterface> dpninterfaceListId =
             InstanceIdentifier.builder(DpnToInterfaceList.class).child(DpnToInterface.class, dpnToInterfaceKey).build();
@@ -750,7 +751,8 @@ public final class InterfaceManagerCommonUtils {
             return;
         }
 
-        List<InterfaceNameEntry> interfaceNameEntries = dpnToInterfaceOptional.get().getInterfaceNameEntry();
+        Map<InterfaceNameEntryKey, InterfaceNameEntry> interfaceNameEntries =
+                dpnToInterfaceOptional.get().getInterfaceNameEntry();
         InterfaceNameEntryKey interfaceNameEntryKey = new InterfaceNameEntryKey(infName);
         InstanceIdentifier<InterfaceNameEntry> intfid = InstanceIdentifier.builder(DpnToInterfaceList.class)
                 .child(DpnToInterface.class, dpnToInterfaceKey)
index 61f876c78ddbb07363d1724358a40834729ee929..6bb32a5781436e649a59205f593a105ed41ad882 100644 (file)
@@ -7,10 +7,8 @@
  */
 package org.opendaylight.genius.interfacemanager.commons;
 
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import java.util.Collections;
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
@@ -63,6 +61,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint64;
 import org.slf4j.Logger;
@@ -309,7 +308,7 @@ public final class InterfaceMetaUtils {
 
         BridgeEntryBuilder bridgeEntryBuilder =
                 new BridgeEntryBuilder().withKey(bridgeEntryKey).setBridgeReference(ovsdbBridgeRef);
-        tx.merge(bridgeEntryInstanceIdentifier, bridgeEntryBuilder.build(), CREATE_MISSING_PARENTS);
+        tx.mergeParentStructureMerge(bridgeEntryInstanceIdentifier, bridgeEntryBuilder.build());
     }
 
     public static void createBridgeRefEntry(Uint64 dpnId, InstanceIdentifier<?> bridgeIid,
@@ -322,7 +321,7 @@ public final class InterfaceMetaUtils {
         BridgeRefEntryBuilder tunnelDpnBridgeEntryBuilder =
                 new BridgeRefEntryBuilder().withKey(bridgeRefEntryKey).setDpid(dpnId)
                         .setBridgeReference(new OvsdbBridgeRef(bridgeIid));
-        tx.put(bridgeEntryId, tunnelDpnBridgeEntryBuilder.build(), CREATE_MISSING_PARENTS);
+        tx.mergeParentStructurePut(bridgeEntryId, tunnelDpnBridgeEntryBuilder.build());
     }
 
     public static void deleteBridgeRefEntry(Uint64 dpnId, TypedWriteTransaction<Operational> tx) {
@@ -339,7 +338,7 @@ public final class InterfaceMetaUtils {
         TunnelInstanceInterface tunnelInstanceInterface = new TunnelInstanceInterfaceBuilder()
                 .setTunnelInstanceIdentifier(tunnelInstanceId).withKey(new TunnelInstanceInterfaceKey(tunnelInstanceId))
                 .setInterfaceName(infName).build();
-        transaction.put(id, tunnelInstanceInterface, CREATE_MISSING_PARENTS);
+        transaction.mergeParentStructurePut(id, tunnelInstanceInterface);
 
     }
 
@@ -370,8 +369,8 @@ public final class InterfaceMetaUtils {
     }
 
     public void deleteBridgeInterfaceEntry(BridgeEntryKey bridgeEntryKey,
-            List<BridgeInterfaceEntry> bridgeInterfaceEntries, InstanceIdentifier<BridgeEntry> bridgeEntryIid,
-            String interfaceName) {
+            Map<BridgeInterfaceEntryKey, BridgeInterfaceEntry> bridgeInterfaceEntries,
+                                           InstanceIdentifier<BridgeEntry> bridgeEntryIid, String interfaceName) {
         BridgeInterfaceEntryKey bridgeInterfaceEntryKey =
                 new BridgeInterfaceEntryKey(interfaceName);
         InstanceIdentifier<BridgeInterfaceEntry> bridgeInterfaceEntryIid =
@@ -389,11 +388,11 @@ public final class InterfaceMetaUtils {
         }
     }
 
-    public List<TerminationPoint> getTerminationPointsOnBridge(Uint64 dpnId) {
+    public Map<TerminationPointKey, TerminationPoint> getTerminationPointsOnBridge(Uint64 dpnId) {
         BridgeRefEntry bridgeRefEntry = getBridgeRefEntryFromOperDS(dpnId);
         if (bridgeRefEntry == null || bridgeRefEntry.getBridgeReference() == null) {
             LOG.debug("BridgeRefEntry for DPNID {} not found", dpnId);
-            return Collections.emptyList();
+            return Collections.emptyMap();
         }
         InstanceIdentifier<Node> nodeIid =
                         bridgeRefEntry.getBridgeReference().getValue().firstIdentifierOf(Node.class);
@@ -402,7 +401,7 @@ public final class InterfaceMetaUtils {
         if (optNode.isPresent()) {
             return optNode.get().getTerminationPoint();
         }
-        return Collections.emptyList();
+        return Collections.emptyMap();
     }
 
     // Cache Util methods
index 84825b67d217b659531452bb34a8b678efdc3976..711abbb8648a0705953b9ea500e5de1450c04729 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.genius.interfacemanager.diagstatus;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.apache.aries.blueprint.annotation.service.Service;
 import org.opendaylight.genius.interfacemanager.IfmConstants;
index 7e121bd94d47e60aada6b30606c0fdd22bdcc451..287e7205d23e84f04d5c071df9261e5ed3ebadac 100644 (file)
@@ -14,7 +14,6 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
@@ -28,7 +27,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.LivenessState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorEvent;
 import org.opendaylight.yangtools.yang.common.Uint32;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index a9ec51c416d9ee3cfdb8b5aed9b899e952bad343..2f00e69ccd038468053ce1061913b16989bcab0c 100644 (file)
@@ -12,7 +12,6 @@ import java.util.Collection;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.interfacemanager.commons.InterfaceMetaUtils;
 import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
index 619d6b35aed1c5a429ec823b579727d2cf20daa0..7937ef881df65f6adce2bd86c86c99742ddfbb0f 100644 (file)
@@ -12,7 +12,6 @@ import java.util.Collection;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.interfacemanager.commons.InterfaceMetaUtils;
 import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
index c949c373748531d003d7128d502693c0c27f0a0a..63396351bb80bafbbd03eb8270707bddc030e78f 100644 (file)
@@ -60,7 +60,7 @@ public class HwVTEPConfigListener extends AbstractSyncDataTreeChangeListener<Int
             if (parentRefs != null && parentRefs.getNodeIdentifier() != null) {
                 LOG.debug("Received HwVTEP Interface Remove Event: {}", removedInterface.getName());
                 LOG.trace("Received HwVTEP Interface Remove Event: {}", removedInterface);
-                for (NodeIdentifier nodeIdentifier : parentRefs.getNodeIdentifier()) {
+                for (NodeIdentifier nodeIdentifier : parentRefs.getNodeIdentifier().values()) {
                     if (SouthboundUtils.HWVTEP_TOPOLOGY.equals(nodeIdentifier.getTopologyId())) {
                         coordinator.enqueueJob(removedInterface.getName(), () -> HwVTEPConfigRemoveHelper
                                                        .removeConfiguration(txRunner, removedInterface,
@@ -86,7 +86,7 @@ public class HwVTEPConfigListener extends AbstractSyncDataTreeChangeListener<Int
                 LOG.debug("Received HwVTEP Interface Update Event: {}", originalInterface.getName());
                 LOG.trace("Received HwVTEP Interface Update Event: updatedInterface: {}, OriginalInterface: {}",
                         updatedInterface, originalInterface);
-                for (NodeIdentifier nodeIdentifier : parentRefs.getNodeIdentifier()) {
+                for (NodeIdentifier nodeIdentifier : parentRefs.getNodeIdentifier().values()) {
                     if (SouthboundUtils.HWVTEP_TOPOLOGY.equals(nodeIdentifier.getTopologyId())) {
                         coordinator.enqueueJob(originalInterface.getName(), () -> HwVTEPInterfaceConfigUpdateHelper
                                 .updateConfiguration(txRunner,
@@ -108,7 +108,7 @@ public class HwVTEPConfigListener extends AbstractSyncDataTreeChangeListener<Int
             if (parentRefs != null && parentRefs.getNodeIdentifier() != null) {
                 LOG.debug("Received HwVTEP Interface Add Event: {}", newInterface.getName());
                 LOG.trace("Received HwVTEP Interface Add Event: {}", newInterface);
-                for (NodeIdentifier nodeIdentifier : parentRefs.getNodeIdentifier()) {
+                for (NodeIdentifier nodeIdentifier : parentRefs.getNodeIdentifier().values()) {
                     if (SouthboundUtils.HWVTEP_TOPOLOGY.equals(nodeIdentifier.getTopologyId())) {
                         coordinator.enqueueJob(newInterface.getName(), () -> HwVTEPInterfaceConfigAddHelper
                                 .addConfiguration(txRunner,
index e9b6fcac94e83f2009189263473ded1d6a1e62e9..e8bf5a624c9310d623d25a717c7d1220a54bcc2d 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.genius.interfacemanager.listeners;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.mdsalutil.cache.DataObjectCache;
 import org.opendaylight.infrautils.caches.CacheProvider;
index 1b9c2fdfc898bbdfc9f7e844ce3385cd52360830..d77b01affdc91466e391eb64c2856fc206fc3217 100644 (file)
@@ -9,11 +9,10 @@
 package org.opendaylight.genius.interfacemanager.listeners;
 
 import java.util.Collections;
-import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.mdsalutil.cache.InstanceIdDataObjectCache;
 import org.opendaylight.infrautils.caches.CacheProvider;
@@ -24,6 +23,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.met
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntryKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,15 +42,16 @@ public class InterfaceChildCache {
                 cacheProvider);
     }
 
-    public Optional<List<InterfaceChildEntry>> getInterfaceChildEntries(String parentInterfaceName) {
+    public Optional<Map<InterfaceChildEntryKey, InterfaceChildEntry>>
+        getInterfaceChildEntries(String parentInterfaceName) {
         try {
             Optional<InterfaceParentEntry> interfaceParentEntry = dataObjectCache.get(
                     getInterfaceParentEntryIdentifier(parentInterfaceName));
             if (interfaceParentEntry.isPresent()) {
-                List<InterfaceChildEntry> interfaceChildEntries = interfaceParentEntry.get()
+                Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries = interfaceParentEntry.get()
                         .getInterfaceChildEntry() != null ? interfaceParentEntry.get()
-                        .getInterfaceChildEntry() : Collections.emptyList();
-                return Optional.of(Collections.unmodifiableList(interfaceChildEntries));
+                        .getInterfaceChildEntry() : Collections.emptyMap();
+                return Optional.of(Collections.unmodifiableMap(interfaceChildEntries));
             }
         } catch (ReadFailedException ex) {
             LOG.error("ReadFailedException exception", ex);
index f12f0c38b8dfb3e51c7f06d32506340ab2160b1b..30f8c34596e2f96a9d882bcae9c87f6747bdab46 100644 (file)
@@ -14,7 +14,9 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.Callable;
@@ -52,6 +54,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.P
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
@@ -303,8 +306,9 @@ public class InterfaceInventoryStateListener
         public Object call() {
             List<ListenableFuture<Void>> futures = ovsInterfaceStateAddHelper.addState(nodeConnectorId,
                     interfaceName, fcNodeConnectorNew);
-            List<InterfaceChildEntry> interfaceChildEntries = getInterfaceChildEntries(interfaceName);
-            for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
+            Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries =
+                    getInterfaceChildEntries(interfaceName);
+            for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries.values()) {
                 InterfaceStateAddWorker interfaceStateAddWorker = new InterfaceStateAddWorker(idManager,
                         nodeConnectorId, fcNodeConnectorNew, interfaceChildEntry.getChildInterface());
                 coordinator.enqueueJob(interfaceName, interfaceStateAddWorker);
@@ -339,8 +343,9 @@ public class InterfaceInventoryStateListener
         public List<ListenableFuture<Void>> call() {
             List<ListenableFuture<Void>> futures = ovsInterfaceStateUpdateHelper.updateState(
                     interfaceName, fcNodeConnectorNew, fcNodeConnectorOld);
-            List<InterfaceChildEntry> interfaceChildEntries = getInterfaceChildEntries(interfaceName);
-            for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
+            Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries =
+                    getInterfaceChildEntries(interfaceName);
+            for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries.values()) {
                 InterfaceStateUpdateWorker interfaceStateUpdateWorker = new InterfaceStateUpdateWorker(key,
                         fcNodeConnectorOld, fcNodeConnectorNew, interfaceChildEntry.getChildInterface());
                 coordinator.enqueueJob(interfaceName, interfaceStateUpdateWorker);
@@ -394,8 +399,9 @@ public class InterfaceInventoryStateListener
 
             List<ListenableFuture<Void>> futures = removeInterfaceStateConfiguration();
 
-            List<InterfaceChildEntry> interfaceChildEntries = getInterfaceChildEntries(interfaceName);
-            for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
+            Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries =
+                    getInterfaceChildEntries(interfaceName);
+            for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries.values()) {
                 // Fetch all interfaces on this port and trigger remove worker
                 // for each of them
                 InterfaceStateRemoveWorker interfaceStateRemoveWorker = new InterfaceStateRemoveWorker(idManager,
@@ -487,12 +493,12 @@ public class InterfaceInventoryStateListener
         }
     }
 
-    public List<InterfaceChildEntry> getInterfaceChildEntries(String interfaceName) {
+    public Map<InterfaceChildEntryKey, InterfaceChildEntry> getInterfaceChildEntries(String interfaceName) {
         InterfaceParentEntry interfaceParentEntry =
                 interfaceMetaUtils.getInterfaceParentEntryFromConfigDS(interfaceName);
         if (interfaceParentEntry != null && interfaceParentEntry.getInterfaceChildEntry() != null) {
             return interfaceParentEntry.getInterfaceChildEntry();
         }
-        return new ArrayList<>();
+        return new HashMap<>();
     }
 }
index ea32d2da879046673c347c1bcf5a520f548ce17b..2f3644665d0ed1b9347386e760513ea38a2787d5 100644 (file)
@@ -12,7 +12,6 @@ import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
 import java.util.Collections;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
index 497c491607179c25f1821ffd52e5a771e12587bc..dbca6ad41be874890c855ecebcd5cde54aae71b3 100644 (file)
@@ -8,12 +8,10 @@
 package org.opendaylight.genius.interfacemanager.listeners;
 
 import com.google.common.util.concurrent.ListenableFuture;
-
 import java.util.List;
 import java.util.concurrent.Callable;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.interfacemanager.IfmConstants;
 import org.opendaylight.genius.interfacemanager.InterfacemgrProvider;
index 0007c725ef23a3a9f9a2f159d77a693962f61eb3..97e740c5694019b6c930f899fdb3bc6274298d25 100644 (file)
@@ -14,7 +14,6 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -27,6 +26,7 @@ import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.apache.aries.blueprint.annotation.service.Reference;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.genius.interfacemanager.IfmConstants;
 import org.opendaylight.genius.interfacemanager.listeners.InterfaceChildCache;
 import org.opendaylight.genius.interfacemanager.listeners.PortNameCache;
@@ -48,8 +48,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.OpendaylightDirectStatisticsService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapList;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.config.rev160406.IfmConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
@@ -57,6 +59,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMapKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
@@ -251,10 +254,10 @@ public class NodeConnectorStatsImpl extends AbstractClusteredAsyncDataTreeChange
                                                 String dpid) {
         String port = "";
         String portUuid = "";
-        List<NodeConnectorStatisticsAndPortNumberMap> ncStatsAndPortMapList = nodeConnectorStatisticsOutput
-                        .nonnullNodeConnectorStatisticsAndPortNumberMap();
+        @NonNull Map<NodeConnectorStatisticsAndPortNumberMapKey, NodeConnectorStatisticsAndPortNumberMap>
+                ncStatsAndPortMapList = nodeConnectorStatisticsOutput.nonnullNodeConnectorStatisticsAndPortNumberMap();
         // Parse NodeConnectorStatistics and create/update counters for them
-        for (NodeConnectorStatisticsAndPortNumberMap ncStatsAndPortMap : ncStatsAndPortMapList) {
+        for (NodeConnectorStatisticsAndPortNumberMap ncStatsAndPortMap : ncStatsAndPortMapList.values()) {
             NodeConnectorId nodeConnector = ncStatsAndPortMap.getNodeConnectorId();
             LOG.trace("Create/update metric counter for NodeConnector: {} of node: {}", nodeConnector, dpid);
             port = nodeConnector.getValue();
@@ -262,7 +265,7 @@ public class NodeConnectorStatsImpl extends AbstractClusteredAsyncDataTreeChange
             String portNameInCache = "openflow" + ":" + dpid + ":" + port;
             java.util.Optional<String> portName = portNameCache.get(portNameInCache);
             if (portName.isPresent()) {
-                Optional<List<InterfaceChildEntry>> interfaceChildEntries = interfaceChildCache
+                Optional<Map<InterfaceChildEntryKey, InterfaceChildEntry>> interfaceChildEntries = interfaceChildCache
                         .getInterfaceChildEntries(portName.get());
                 if (interfaceChildEntries.isPresent()) {
                     if (!interfaceChildEntries.get().isEmpty()) {
@@ -326,9 +329,9 @@ public class NodeConnectorStatsImpl extends AbstractClusteredAsyncDataTreeChange
     private void processFlowStatistics(GetFlowStatisticsOutput flowStatsOutput, String dpid) {
         Map<Short, AtomicInteger> flowTableMap = new HashMap<>();
         // Get all flows for node from RPC result
-        List<FlowAndStatisticsMapList> flowTableAndStatisticsMapList =
+        @NonNull Map<FlowAndStatisticsMapListKey, FlowAndStatisticsMapList> flowTableAndStatisticsMapList =
             flowStatsOutput.nonnullFlowAndStatisticsMapList();
-        for (FlowAndStatisticsMapList flowAndStatisticsMap : flowTableAndStatisticsMapList) {
+        for (FlowAndStatisticsMapList flowAndStatisticsMap : flowTableAndStatisticsMapList.values()) {
             short tableId = flowAndStatisticsMap.getTableId().toJava();
             // populate map to maintain flow count per table
             flowTableMap.computeIfAbsent(tableId, key -> new AtomicInteger(0)).incrementAndGet();
index c08c0d81aeaadf23d9834ee515fdee1c10e72001..ee54798d2134619e07ab5a3eab9971a282b9e5fd 100644 (file)
@@ -13,7 +13,6 @@ import java.time.Duration;
 import java.util.Collections;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.datastoreutils.listeners.DataTreeEventCallbackRegistrar;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
index 1b178c3b0d793c55a9f4328a7eed8971400e066d..37b987dd828c340d7ac1b121742a11952ba64970 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.genius.interfacemanager.recovery.impl;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.serviceutils.srm.RecoverableListener;
 import org.opendaylight.serviceutils.srm.ServiceRecoveryInterface;
index 30eed7fd7eec8599e3db678a1177028a66bfef55..e89828632119a76347eace903a499b541eeee793 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.genius.interfacemanager.renderer.hwvtep.confighelpers;
 
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
 import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
@@ -106,6 +105,6 @@ public final class HwVTEPInterfaceConfigAddHelper {
         SouthboundUtils.setDstIp(tpAugmentationBuilder, destIPAddress);
         tpBuilder.addAugmentation(HwvtepPhysicalLocatorAugmentation.class, tpAugmentationBuilder.build());
         LOG.debug("creating physical locator entry for {}", terminationPointKey);
-        transaction.put(tpPath, tpBuilder.build(), CREATE_MISSING_PARENTS);
+        transaction.mergeParentStructurePut(tpPath, tpBuilder.build());
     }
 }
index 67b14ae0f902d2e04e5b5f8e91b7c3f885f82f60..54b49467cb015c889827d4ad7ecadee883c5e5d8 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.genius.interfacemanager.renderer.hwvtep.confighelpers;
 
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
@@ -69,6 +68,6 @@ public final class HwVTEPInterfaceConfigUpdateHelper {
         SouthboundUtils.fillBfdParameters(bfdParams, ifTunnel);
         tunnelsBuilder.setBfdParams(bfdParams);
         return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
-            tx -> tx.merge(tunnelsInstanceIdentifier, tunnelsBuilder.build(), CREATE_MISSING_PARENTS)));
+            tx -> tx.mergeParentStructureMerge(tunnelsInstanceIdentifier, tunnelsBuilder.build())));
     }
 }
index c29aff14d887a4de52e8955be7a629c3e918d955..853e6de35c72f84d59bd70b8e6548a83efdca16e 100644 (file)
@@ -9,12 +9,12 @@ package org.opendaylight.genius.interfacemanager.renderer.hwvtep.statehelpers;
 
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
 import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
 import org.opendaylight.genius.interfacemanager.commons.InterfaceMetaUtils;
@@ -25,6 +25,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hw
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdParams;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdStatusKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -50,10 +51,10 @@ public final class HwVTEPInterfaceStateUpdateHelper {
         }));
     }
 
-    private static OperStatus getTunnelOpState(List<BfdStatus> tunnelBfdStatus) {
+    private static OperStatus getTunnelOpState(Map<BfdStatusKey, BfdStatus> tunnelBfdStatus) {
         OperStatus livenessState = OperStatus.Down;
         if (tunnelBfdStatus != null && !tunnelBfdStatus.isEmpty()) {
-            for (BfdStatus bfdState : tunnelBfdStatus) {
+            for (BfdStatus bfdState : tunnelBfdStatus.values()) {
                 if (SouthboundUtils.BFD_OP_STATE.equalsIgnoreCase(bfdState.getBfdStatusKey())) {
                     String bfdOpState = bfdState.getBfdStatusValue();
                     if (SouthboundUtils.BFD_STATE_UP.equalsIgnoreCase(bfdOpState)) {
@@ -80,6 +81,6 @@ public final class HwVTEPInterfaceStateUpdateHelper {
         SouthboundUtils.fillBfdParameters(bfdParams, null);
         tunnelsBuilder.setBfdParams(bfdParams);
         return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
-            tx -> tx.put(tunnelsInstanceIdentifier, tunnelsBuilder.build(), CREATE_MISSING_PARENTS)));
+            tx -> tx.mergeParentStructurePut(tunnelsInstanceIdentifier, tunnelsBuilder.build())));
     }
 }
index a55c9e1d026b4535cd115fdac810a64453b55192..d5e38f2d99b505cb5f3660ce5f805fb3e3ed0beb 100644 (file)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.genius.interfacemanager.renderer.hwvtep.utilities;
 
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -207,7 +205,7 @@ public final class SouthboundUtils {
             .ietf.interfaces.rev140508.interfaces.state.Interface> ifStateId = IfmUtil
             .buildStateInterfaceId(interfaceInfo.getName());
         ifaceBuilder.withKey(IfmUtil.getStateInterfaceKeyFromName(interfaceInfo.getName()));
-        transaction.put(ifStateId, ifaceBuilder.build(), CREATE_MISSING_PARENTS);
+        transaction.mergeParentStructurePut(ifStateId, ifaceBuilder.build());
         EVENT_LOGGER.info("IFM-TepInterfaceState,ADD {}", interfaceInfo.getName());
     }
 
index 453bc9f4de19e8aac4279258781832b4ed552294..36e2632cd3d488ec52c5d3161e974e998316227b 100644 (file)
@@ -13,11 +13,13 @@ import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.apache.aries.blueprint.annotation.service.Reference;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.infra.Datastore.Configuration;
 import org.opendaylight.genius.infra.Datastore.Operational;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
@@ -40,6 +42,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.met
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
@@ -161,7 +164,8 @@ public final class OvsInterfaceConfigRemoveHelper {
             LOG.debug("Bridge Entry not present for dpn: {}", dpId);
             return;
         }
-        List<BridgeInterfaceEntry> bridgeInterfaceEntries = bridgeEntry.getBridgeInterfaceEntry();
+        @Nullable Map<BridgeInterfaceEntryKey, BridgeInterfaceEntry> bridgeInterfaceEntries =
+                bridgeEntry.getBridgeInterfaceEntry();
         if (bridgeInterfaceEntries == null) {
             LOG.debug("Bridge Interface Entries not present for dpn : {}", dpId);
             return;
@@ -199,7 +203,8 @@ public final class OvsInterfaceConfigRemoveHelper {
         }
     }
 
-    private static boolean canDeleteTunnelPort(List<BridgeInterfaceEntry> bridgeInterfaceEntries, IfTunnel ifTunnel) {
+    private static boolean canDeleteTunnelPort(Map<BridgeInterfaceEntryKey, BridgeInterfaceEntry>
+                                                       bridgeInterfaceEntries, IfTunnel ifTunnel) {
         return !SouthboundUtils.isOfTunnel(ifTunnel) || bridgeInterfaceEntries == null
                 || bridgeInterfaceEntries.size() <= 1;
     }
@@ -259,7 +264,8 @@ public final class OvsInterfaceConfigRemoveHelper {
             futures.add(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, tx -> {
                 // FIXME: If the no. of child entries exceeds 100, perform txn
                 // updates in batches of 100.
-                for (InterfaceChildEntry interfaceChildEntry : interfaceParentEntry.nonnullInterfaceChildEntry()) {
+                for (InterfaceChildEntry interfaceChildEntry : interfaceParentEntry
+                        .nonnullInterfaceChildEntry().values()) {
                     LOG.debug("removing interface state for vlan trunk member {}",
                             interfaceChildEntry.getChildInterface());
                     interfaceManagerCommonUtils.deleteInterfaceStateInformation(interfaceChildEntry.getChildInterface(),
index 1ab3c8d988e2bdb8e048f78012fe7998e50a14cb..f8a68644702c35e19c2015ac60ddf7531cad225f 100644 (file)
@@ -14,11 +14,11 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.Callable;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.infra.Datastore.Configuration;
 import org.opendaylight.genius.infra.Datastore.Operational;
@@ -37,6 +37,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info.InterfaceParentEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406._interface.child.info._interface.parent.entry.InterfaceChildEntryKey;
 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.rev160406.IfL2vlan;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
@@ -201,10 +202,10 @@ public class OvsInterfaceConfigUpdateHelper {
 
         private final ManagedNewTransactionRunner txRunner;
         private final OperStatus operStatus;
-        private final List<InterfaceChildEntry> interfaceChildEntries;
+        private final Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries;
 
         VlanMemberStateUpdateWorker(ManagedNewTransactionRunner txRunner, OperStatus operStatus,
-                List<InterfaceChildEntry> interfaceChildEntries) {
+                Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries) {
             this.txRunner = txRunner;
             this.operStatus = operStatus;
             this.interfaceChildEntries = interfaceChildEntries;
@@ -213,7 +214,7 @@ public class OvsInterfaceConfigUpdateHelper {
         @Override
         public List<ListenableFuture<Void>> call() {
             return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, tx -> {
-                for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
+                for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries.values()) {
                     InterfaceManagerCommonUtils.updateOperStatus(interfaceChildEntry.getChildInterface(), operStatus,
                             tx);
                 }
index c2b53ca7213565d854ee47d76885ce6dc8a074c1..5d7fa401820b184cd0724e8dc66edbc2113a6b83 100644 (file)
@@ -14,7 +14,6 @@ import java.util.ArrayList;
 import java.util.List;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
index 4c7a0b531752a3149495eccfcdfcea7799d68e70..7b923b84d258dc1cf4c745704f1ec92cf67e3143 100644 (file)
@@ -14,6 +14,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.apache.aries.blueprint.annotation.service.Reference;
@@ -70,7 +71,8 @@ public class OvsVlanMemberConfigRemoveHelper {
             // Configuration changes
             futures.add(txChain.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION, tx -> {
                 // Delete the interface child information
-                List<InterfaceChildEntry> interfaceChildEntries = interfaceParentEntry.nonnullInterfaceChildEntry();
+                Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries =
+                        interfaceParentEntry.nonnullInterfaceChildEntry();
                 InterfaceChildEntryKey interfaceChildEntryKey = new InterfaceChildEntryKey(interfaceOld.getName());
                 InstanceIdentifier<InterfaceChildEntry> interfaceChildEntryIid = InterfaceMetaUtils
                     .getInterfaceChildEntryIdentifier(interfaceParentEntryKey, interfaceChildEntryKey);
index c14568b14bab2b355170043d1255eb16c3e82296..6b6edafad84337c50825238b7bf59223c9416910 100644 (file)
@@ -15,7 +15,6 @@ import java.util.List;
 import java.util.Objects;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
index 5564a1f2f0a29ca41becad38fc14549c32b71c09..a11b2490488c824683aa02466d578627eee764e9 100644 (file)
@@ -15,7 +15,6 @@ import java.util.List;
 import java.util.Objects;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.genius.infra.Datastore.Operational;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
index 852cdc4fe5db75ca2b6d4b38413fb77de32b2344..9b5fb6afd5be12354e0d7676c51a24660c6c2fdd 100644 (file)
@@ -12,6 +12,7 @@ import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.apache.aries.blueprint.annotation.service.Reference;
@@ -30,6 +31,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.met
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatusKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint64;
 import org.slf4j.Logger;
@@ -122,9 +124,9 @@ public class OvsInterfaceTopologyStateUpdateHelper {
             return Interface.OperStatus.Up;
         }
         Interface.OperStatus livenessState = Interface.OperStatus.Down;
-        List<InterfaceBfdStatus> tunnelBfdStatus = terminationPoint.getInterfaceBfdStatus();
+        Map<InterfaceBfdStatusKey, InterfaceBfdStatus> tunnelBfdStatus = terminationPoint.getInterfaceBfdStatus();
         if (tunnelBfdStatus != null && !tunnelBfdStatus.isEmpty()) {
-            for (InterfaceBfdStatus bfdState : tunnelBfdStatus) {
+            for (InterfaceBfdStatus bfdState : tunnelBfdStatus.values()) {
                 if (SouthboundUtils.BFD_OP_STATE.equalsIgnoreCase(bfdState.getBfdStatusKey())) {
                     String bfdOpState = bfdState.getBfdStatusValue();
                     livenessState = SouthboundUtils.BFD_STATE_UP.equalsIgnoreCase(bfdOpState) ? Interface.OperStatus.Up
index b35033135402288b00b0c5ff1602ccf24da5522b..3e79806b88af051acb34fbbe1275f9309000727c 100644 (file)
@@ -40,7 +40,7 @@ class InterfaceBatchHandler implements ResourceHandler {
         if (datastoreType != this.getDatastoreType()) {
             return;
         }
-        tx.merge(datastoreType, identifier, (DataObject) update, true);
+        tx.mergeParentStructureMerge(datastoreType, identifier, (DataObject) update);
 
         buildSubTransactions(transactionObjects, identifier, update, SubTransaction.UPDATE);
     }
@@ -60,7 +60,7 @@ class InterfaceBatchHandler implements ResourceHandler {
         if (datastoreType != this.getDatastoreType()) {
             return;
         }
-        tx.put(datastoreType, identifier, (DataObject) data, true);
+        tx.mergeParentStructurePut(datastoreType, identifier, (DataObject) data);
 
         buildSubTransactions(transactionObjects, identifier, data, SubTransaction.CREATE);
     }
index fbb1663418b72b007b91b13429502a4d11579f74..ac5b9390ba5b444e56dbbdb4802b66bbd7f13b93 100644 (file)
@@ -7,9 +7,6 @@
  */
 package org.opendaylight.genius.interfacemanager.renderer.ovs.utilities;
 
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
-
-import com.google.common.collect.Maps;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -21,6 +18,7 @@ import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.apache.aries.blueprint.annotation.service.Reference;
 import org.apache.commons.lang3.BooleanUtils;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
 import org.opendaylight.genius.infra.Datastore.Configuration;
 import org.opendaylight.genius.infra.TypedWriteTransaction;
@@ -39,6 +37,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBfd;
@@ -176,9 +175,10 @@ public class SouthboundUtils {
                                     OvsdbBridgeAugmentation bridgeNew) {
         String bridgeName = bridgeNew.getBridgeName().getValue();
         LOG.debug("adding all ports to bridge: {}", bridgeName);
-        List<BridgeInterfaceEntry> bridgeInterfaceEntries = bridgeEntry.getBridgeInterfaceEntry();
+        @Nullable Map<BridgeInterfaceEntryKey, BridgeInterfaceEntry> bridgeInterfaceEntries =
+                bridgeEntry.getBridgeInterfaceEntry();
         if (bridgeInterfaceEntries != null) {
-            for (BridgeInterfaceEntry bridgeInterfaceEntry : bridgeInterfaceEntries) {
+            for (BridgeInterfaceEntry bridgeInterfaceEntry : bridgeInterfaceEntries.values()) {
                 String portName = bridgeInterfaceEntry.getInterfaceName();
                 InterfaceKey interfaceKey = new InterfaceKey(portName);
                 Interface iface = interfaceManagerCommonUtils.getInterfaceFromConfigDS(interfaceKey);
@@ -217,7 +217,7 @@ public class SouthboundUtils {
             vlanId = ifL2vlan.getVlanId().getValue().toJava();
         }
 
-        Map<String, String> options = Maps.newHashMap();
+        Map<String, String> options = new HashMap<>();
 
         // Options common to any kind of tunnel
         if (BooleanUtils.isTrue(ifTunnel.isTunnelSourceIpFlow())) {
@@ -262,7 +262,7 @@ public class SouthboundUtils {
         }
 
         if (ifTunnel.getTunnelOptions() != null) {
-            for (TunnelOptions tunOpt : ifTunnel.getTunnelOptions()) {
+            for (TunnelOptions tunOpt : ifTunnel.getTunnelOptions().values()) {
                 options.putIfAbsent(tunOpt.getTunnelOption(), tunOpt.getValue());
             }
         }
@@ -288,7 +288,7 @@ public class SouthboundUtils {
         tpBuilder.withKey(InstanceIdentifier.keyOf(tpIid));
         tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
 
-        transaction.merge(tpIid, tpBuilder.build(), CREATE_MISSING_PARENTS);
+        transaction.mergeParentStructureMerge(tpIid, tpBuilder.build());
     }
 
     private void addTerminationPoint(InstanceIdentifier<?> bridgeIid, String portName, int vlanId,
@@ -408,11 +408,11 @@ public class SouthboundUtils {
                 && TunnelMonitoringTypeBfd.class.isAssignableFrom(ifTunnel.getMonitorProtocol());
     }
 
-    public static boolean bfdMonitoringEnabled(List<InterfaceBfd> interfaceBfds) {
+    public static boolean bfdMonitoringEnabled(Map<InterfaceBfdKey, InterfaceBfd> interfaceBfds) {
         if (interfaceBfds == null) {
             return false;
         }
-        for (InterfaceBfd interfaceBfd : interfaceBfds) {
+        for (InterfaceBfd interfaceBfd : interfaceBfds.values()) {
             if (SouthboundUtils.BFD_ENABLE_KEY.equalsIgnoreCase(interfaceBfd.getBfdKey())) {
                 return SouthboundUtils.BFD_ENABLE_VALUE.equalsIgnoreCase(interfaceBfd.getBfdValue());//checkBfdEnabled
             }
index eeb992998b13b469ef4024bf6cad755cc2b89fb7..c56858dddb44ceaa65b4d150ae174f48b3f89159 100644 (file)
@@ -12,6 +12,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -37,6 +38,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.met
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.dpn.to._interface.list.DpnToInterface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.dpn.to._interface.list.DpnToInterfaceKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.dpn.to._interface.list.dpn.to._interface.InterfaceNameEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.dpn.to._interface.list.dpn.to._interface.InterfaceNameEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase;
@@ -140,7 +142,7 @@ public class InterfaceManagerServiceImpl implements InterfaceManagerService {
         BridgeEntry bridgeEntry = interfaceMetaUtils.getBridgeEntryFromConfigDS(bridgeEntryInstanceIdentifier);
         // local ip of any of the bridge interface entry will be the dpn end
         // point ip
-        BridgeInterfaceEntry bridgeInterfaceEntry = bridgeEntry.getBridgeInterfaceEntry().get(0);
+        BridgeInterfaceEntry bridgeInterfaceEntry = bridgeEntry.getBridgeInterfaceEntry().values().iterator().next();
         InterfaceKey interfaceKey = new InterfaceKey(bridgeInterfaceEntry.getInterfaceName());
         Interface interfaceInfo = interfaceManagerCommonUtils.getInterfaceFromConfigDS(interfaceKey);
         IfTunnel tunnel = interfaceInfo.augmentation(IfTunnel.class);
@@ -270,14 +272,14 @@ public class InterfaceManagerServiceImpl implements InterfaceManagerService {
             LOG.warn("Could not find Operational DpnToInterface info for DPN {}. Returning empty list", dpnid);
             return buildEmptyInterfaceListResult();
         }
+        Map<InterfaceNameEntryKey, InterfaceNameEntry> interfaceNameEntries = entry.get().getInterfaceNameEntry();
 
-        List<InterfaceNameEntry> interfaceNameEntries = entry.get().getInterfaceNameEntry();
         if (interfaceNameEntries == null || interfaceNameEntries.isEmpty()) {
             LOG.debug("No Interface list found in Operational for DPN {}", dpnid);
             return buildEmptyInterfaceListResult();
         }
         List<Interfaces> interfaceList = new ArrayList<>();
-        interfaceNameEntries.forEach(
+        interfaceNameEntries.values().forEach(
             (interfaceNameEntry) -> {
                 InterfacesBuilder intf = new InterfacesBuilder()
                     .setInterfaceName(interfaceNameEntry.getInterfaceName())
index dc24f7fe7c079a996d24c9cbc6159e33588059f5..eb894bd5a2f5e3e88c2a938d66ac2bd449baf3d7 100644 (file)
@@ -145,7 +145,7 @@ public class FlowBasedServicesConfigListener implements ClusteredDataTreeChangeL
         if (rootNode.getDataAfter() != null) {
             List<BoundServices> boundServices = new ArrayList<>();
             if (rootNode.getDataAfter().getBoundServices() != null) {
-                boundServices = new ArrayList<>(rootNode.getDataAfter().getBoundServices());
+                boundServices = new ArrayList<>(rootNode.getDataAfter().getBoundServices().values());
             }
             final ServicesInfoKey servicesInfoKey = rootNode.getDataAfter().key();
             final BoundServices boundServicesBefore = dataObjectModification.getDataBefore();
index d2d98710f7612619e869763e19f38de5686f2e02..17c9602b6af626a6cc4fbaa367f6a2e31e9a7345 100644 (file)
@@ -135,7 +135,7 @@ public class FlowBasedServicesInterfaceStateListener extends AbstractClusteredSy
                             return Futures.immediateFuture(null);
                         }
 
-                        List<BoundServices> allServices = new ArrayList<>(servicesInfo.getBoundServices());
+                        List<BoundServices> allServices = new ArrayList<>(servicesInfo.getBoundServices().values());
                         if (allServices == null || allServices.isEmpty()) {
                             LOG.trace("bound services is empty for interface {}", iface.getName());
                             return Futures.immediateFuture(null);
index e422938ba86bfd5186b49ccc0b0d3d3be506cddc..1716b8799b41ae6a66c5ff1bc106cf4961c03b37 100644 (file)
@@ -126,8 +126,8 @@ public final class ActionConverterUtil {
 
     public static List<org.opendaylight.yang.gen.v1.urn.opendaylight.action
         .types.rev131112.action.list.Action> convertServiceActionToFlowAction(
-            List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
-                .action.list.Action> inActionList) {
+            Map<ActionKey, org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>
+                    inActionList) {
         return convertServiceActionToFlowAction(inActionList, 0);
     }
 
@@ -140,15 +140,14 @@ public final class ActionConverterUtil {
      * @return the flow actions.
      */
     public static List<org.opendaylight.yang.gen.v1.urn.opendaylight.action
-            .types.rev131112.action.list.Action> convertServiceActionToFlowAction(
-            List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
-                    .action.list.Action> inActionList,
+            .types.rev131112.action.list.Action> convertServiceActionToFlowAction(Map<ActionKey,
+            org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> inActionList,
             int keyOffset) {
         List<org.opendaylight.yang.gen.v1.urn.opendaylight
                 .action.types.rev131112.action.list.Action> outActionList = new ArrayList<>();
         if (inActionList != null) {
             for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
-                     .action.list.Action inAction : inActionList) {
+                     .action.list.Action inAction : inActionList.values()) {
                 outActionList.add(
                         new org.opendaylight.yang.gen.v1.urn.opendaylight
                                 .action.types.rev131112.action.list.ActionBuilder()
index 0a05be44c172918ce7e03df89bc7311d12d8d5db..aa0d99dd1702e7a24c55747926edc04b187c935f 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.genius.interfacemanager.servicebindings.flowbased.utilities;
 
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableSet;
@@ -17,7 +16,9 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import org.apache.commons.lang3.StringUtils;
 import org.eclipse.jdt.annotation.NonNull;
@@ -58,6 +59,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfExternal;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.SplitHorizon;
@@ -191,10 +193,11 @@ public final class FlowBasedServicesUtils {
 
     public static void installInterfaceIngressFlow(Uint64 dpId, Interface iface, BoundServices boundServiceNew,
             TypedWriteTransaction<Configuration> tx, List<MatchInfo> matches, int lportTag, short tableId) {
-        List<Instruction> instructions = boundServiceNew.augmentation(StypeOpenflow.class).getInstruction();
+        Map<InstructionKey, Instruction> instructions =
+                boundServiceNew.augmentation(StypeOpenflow.class).getInstruction();
 
         int serviceInstructionsSize = instructions != null ? instructions.size() : 0;
-        List<Instruction> instructionSet = new ArrayList<>();
+        Map<InstructionKey, Instruction> instructionSet = new HashMap<>();
         int vlanId = 0;
         IfL2vlan l2vlan = iface.augmentation(IfL2vlan.class);
         if (l2vlan != null && l2vlan.getVlanId() != null) {
@@ -204,7 +207,9 @@ public final class FlowBasedServicesUtils {
             // incrementing instructionSize and using it as actionKey. Because
             // it won't clash with any other instructions
             int actionKey = ++serviceInstructionsSize;
-            instructionSet.add(MDSALUtil.buildAndGetPopVlanActionInstruction(actionKey, ++serviceInstructionsSize));
+            instructionSet.put(MDSALUtil.buildAndGetPopVlanActionInstruction(actionKey,
+                    ++serviceInstructionsSize).key(), MDSALUtil.buildAndGetPopVlanActionInstruction(actionKey,
+                    ++serviceInstructionsSize));
         }
 
         if (lportTag != 0L) {
@@ -215,12 +220,14 @@ public final class FlowBasedServicesUtils {
             Uint64 metadataMask = MetaDataUtil.getMetaDataMaskForLPortDispatcher(
                     MetaDataUtil.METADATA_MASK_SERVICE_INDEX, MetaDataUtil.METADATA_MASK_LPORT_TAG_SH_FLAG,
                     metadataValues[1]);
-            instructionSet.add(
+            instructionSet.put(
+                    MDSALUtil.buildAndGetWriteMetadaInstruction(metadata, metadataMask,
+                            ++serviceInstructionsSize).key(),
                     MDSALUtil.buildAndGetWriteMetadaInstruction(metadata, metadataMask, ++serviceInstructionsSize));
         }
 
         if (instructions != null && !instructions.isEmpty()) {
-            for (Instruction info : instructions) {
+            for (Instruction info : instructions.values()) {
                 // Skip meta data write as that is handled already
                 if (info.getInstruction() instanceof WriteMetadataCase) {
                     continue;
@@ -231,7 +238,7 @@ public final class FlowBasedServicesUtils {
                     info = MDSALUtil.buildApplyActionsInstruction(ActionConverterUtil.convertServiceActionToFlowAction(
                             ((ApplyActionsCase) info.getInstruction()).getApplyActions().getAction()));
                 }
-                instructionSet.add(info);
+                instructions.put(info.key(),info);
             }
         }
 
@@ -251,7 +258,7 @@ public final class FlowBasedServicesUtils {
                 .child(Node.class, nodeDpn.key()).augmentation(FlowCapableNode.class)
                 .child(Table.class, new TableKey(flow.getTableId())).child(Flow.class, flowKey).build();
 
-        writeTransaction.put(flowInstanceId, flow, CREATE_MISSING_PARENTS);
+        writeTransaction.mergeParentStructurePut(flowInstanceId, flow);
         EVENT_LOGGER.debug("IFM,InstallFlow {}", flow.getId());
     }
 
@@ -270,18 +277,18 @@ public final class FlowBasedServicesUtils {
         // Get the metadata and mask from the service's write metadata
         // instruction
         StypeOpenflow stypeOpenFlow = boundService.augmentation(StypeOpenflow.class);
-        List<Instruction> serviceInstructions = stypeOpenFlow.getInstruction();
+        @Nullable Map<InstructionKey, Instruction> serviceInstructions = stypeOpenFlow.getInstruction();
         int instructionSize = serviceInstructions != null ? serviceInstructions.size() : 0;
         Uint64[] metadataValues = IfmUtil.mergeOpenflowMetadataWriteInstructions(serviceInstructions);
-        Uint64 metadata = MetaDataUtil.getMetaDataForLPortDispatcher(interfaceTag, nextServiceIndex,
-                metadataValues[0]);
+        Uint64 metadata = MetaDataUtil.getMetaDataForLPortDispatcher(interfaceTag, nextServiceIndex, metadataValues[0]);
         Uint64 metadataMask = MetaDataUtil.getWriteMetaDataMaskForDispatcherTable();
 
         // build the final instruction for LPort Dispatcher table flow entry
-        List<Instruction> instructions = new ArrayList<>();
-        instructions.add(MDSALUtil.buildAndGetWriteMetadaInstruction(metadata, metadataMask, ++instructionSize));
+        Map<InstructionKey, Instruction> instructions = new HashMap<>();
+        instructions.put(MDSALUtil.buildAndGetWriteMetadaInstruction(metadata, metadataMask, ++instructionSize).key(),
+                MDSALUtil.buildAndGetWriteMetadaInstruction(metadata, metadataMask, ++instructionSize));
         if (serviceInstructions != null && !serviceInstructions.isEmpty()) {
-            for (Instruction info : serviceInstructions) {
+            for (Instruction info : serviceInstructions.values()) {
                 // Skip meta data write as that is handled already
                 if (info.getInstruction() instanceof WriteMetadataCase) {
                     continue;
@@ -292,7 +299,8 @@ public final class FlowBasedServicesUtils {
                     info = MDSALUtil.buildApplyActionsInstruction(ActionConverterUtil.convertServiceActionToFlowAction(
                             ((ApplyActionsCase) info.getInstruction()).getApplyActions().getAction()));
                 }
-                instructions.add(info);
+                //instructions.values().add(info);
+                instructions.put(info.key(),info);
             }
         }
 
@@ -334,29 +342,31 @@ public final class FlowBasedServicesUtils {
             LOG.warn("Could not install egress dispatcher flow, missing service openflow configuration");
             return;
         }
-        List<Instruction> serviceInstructions = stypeOpenflow.getInstruction() != null
+        Map<InstructionKey, Instruction> serviceInstructions = stypeOpenflow.getInstruction() != null
                 ? stypeOpenflow.getInstruction()
-                : Collections.emptyList();
+                : Collections.emptyMap();
 
         // build the final instruction for LPort Dispatcher table flow entry
         List<Action> finalApplyActions = new ArrayList<>();
-        List<Instruction> instructions = new ArrayList<>();
+        Map<InstructionKey, Instruction> instructions = new HashMap<>();
         if (boundService.getServicePriority().toJava() != ServiceIndex.getIndex(NwConstants.DEFAULT_EGRESS_SERVICE_NAME,
                 NwConstants.DEFAULT_EGRESS_SERVICE_INDEX)) {
             Uint64[] metadataValues = IfmUtil.mergeOpenflowMetadataWriteInstructions(serviceInstructions);
             Uint64 metadataMask = MetaDataUtil.getWriteMetaDataMaskForEgressDispatcherTable();
-            instructions.add(MDSALUtil.buildAndGetWriteMetadaInstruction(metadataValues[0], metadataMask,
-                    instructions.size()));
+            instructions.put(MDSALUtil.buildAndGetWriteMetadaInstruction(metadataValues[0], metadataMask,
+                    instructions.size()).key(),MDSALUtil.buildAndGetWriteMetadaInstruction(metadataValues[0],
+                    metadataMask, instructions.size()));
             finalApplyActions.add(MDSALUtil.createSetReg6Action(finalApplyActions.size(), 0, 31,
                     MetaDataUtil.getReg6ValueForLPortDispatcher(interfaceTag, nextServiceIndex)));
         }
 
         final int applyActionsOffset = finalApplyActions.size();
-        for (Instruction info : serviceInstructions) {
+        for (Instruction info : serviceInstructions.values()) {
             if (info.getInstruction() instanceof WriteActionsCase) {
                 List<Action> writeActions = ActionConverterUtil.convertServiceActionToFlowAction(
                         ((WriteActionsCase) info.getInstruction()).getWriteActions().getAction());
-                instructions.add(MDSALUtil.buildWriteActionsInstruction(writeActions, instructions.size()));
+                instructions.put(MDSALUtil.buildWriteActionsInstruction(writeActions, instructions.size()).key(),
+                        MDSALUtil.buildWriteActionsInstruction(writeActions, instructions.size()));
             } else if (info.getInstruction() instanceof ApplyActionsCase) {
                 List<Action> applyActions = ActionConverterUtil.convertServiceActionToFlowAction(
                         ((ApplyActionsCase) info.getInstruction()).getApplyActions().getAction(),
@@ -364,11 +374,13 @@ public final class FlowBasedServicesUtils {
                 finalApplyActions.addAll(applyActions);
             } else if (!(info.getInstruction() instanceof WriteMetadataCase)) {
                 // Skip meta data write as that is handled already
-                instructions.add(MDSALUtil.buildInstruction(info, instructions.size()));
+                instructions.put(MDSALUtil.buildInstruction(info, instructions.size()).key(),
+                        MDSALUtil.buildInstruction(info, instructions.size()));
             }
         }
         if (!finalApplyActions.isEmpty()) {
-            instructions.add(MDSALUtil.buildApplyActionsInstruction(finalApplyActions, instructions.size()));
+            instructions.put(MDSALUtil.buildApplyActionsInstruction(finalApplyActions, instructions.size()).key(),
+                    MDSALUtil.buildApplyActionsInstruction(finalApplyActions, instructions.size()));
         }
 
         // build the flow and install it
@@ -670,7 +682,7 @@ public final class FlowBasedServicesUtils {
         }
         int instructionKey = 0;
 
-        List<Instruction> instructions = new ArrayList<>();
+        Map<InstructionKey, Instruction> instructions = new HashMap<>();
 
         final SplitHorizon splitHorizon = iface.augmentation(SplitHorizon.class);
         boolean overrideSplitHorizonProtection = splitHorizon != null
@@ -684,15 +696,18 @@ public final class FlowBasedServicesUtils {
             actions.add(MDSALUtil.createNxOfInPortAction(++actionKey, 0));
         }
         if (!actions.isEmpty()) {
-            instructions.add(MDSALUtil.buildApplyActionsInstruction(actions, instructionKey++));
+            instructions.put(MDSALUtil.buildApplyActionsInstruction(actions, instructionKey++).key(),
+                    MDSALUtil.buildApplyActionsInstruction(actions, instructionKey++));
         }
         Uint64 metadata = MetaDataUtil.getMetaDataForLPortDispatcher(lportTag, (short) 0, Uint64.ZERO,
                 isExternal(iface));
         Uint64 metadataMask = MetaDataUtil
                 .getMetaDataMaskForLPortDispatcher(MetaDataUtil.METADATA_MASK_LPORT_TAG_SH_FLAG);
-        instructions.add(MDSALUtil.buildAndGetWriteMetadaInstruction(metadata, metadataMask, instructionKey++));
-        instructions
-                .add(MDSALUtil.buildAndGetGotoTableInstruction(NwConstants.LPORT_DISPATCHER_TABLE, instructionKey++));
+        instructions.put(MDSALUtil.buildAndGetWriteMetadaInstruction(metadata, metadataMask, instructionKey++).key(),
+                MDSALUtil.buildAndGetWriteMetadaInstruction(metadata, metadataMask, instructionKey++));
+        instructions.put(MDSALUtil.buildAndGetGotoTableInstruction(NwConstants.LPORT_DISPATCHER_TABLE,
+                instructionKey++).key(),
+                MDSALUtil.buildAndGetGotoTableInstruction(NwConstants.LPORT_DISPATCHER_TABLE, instructionKey++));
         int priority = isVlanTransparent ? 1
                 : vlanId == 0 ? IfmConstants.FLOW_PRIORITY_FOR_UNTAGGED_VLAN : IfmConstants.FLOW_HIGH_PRIORITY;
         String flowRef = getFlowRef(IfmConstants.VLAN_INTERFACE_INGRESS_TABLE, dpId, iface.getName());
@@ -740,7 +755,7 @@ public final class FlowBasedServicesUtils {
         InstanceIdentifier<BoundServicesState> id = InstanceIdentifier.builder(BoundServicesStateList.class)
             .child(BoundServicesState.class, new BoundServicesStateKey(interfaceName,
                 interfaceBoundServicesState.getServiceMode())).build();
-        tx.put(id, interfaceBoundServicesState, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructurePut(id, interfaceBoundServicesState);
     }
 
     public static  void removeBoundServicesState(TypedWriteTransaction<Operational> tx,
index 200187a804b6562705bcd30c7474779379dc80c6..95e3e48995ee9e77dee23884dd48ea7b0743a737 100644 (file)
@@ -549,12 +549,12 @@ public class InterfaceManagerConfigurationTest {
             OvsdbTerminationPointAugmentationBuilder newOvsdbTpAugmentationBuilder =
                     new OvsdbTerminationPointAugmentationBuilder(ovsdbTpAugmentation);
             if (ovsdbTpAugmentation.getOptions() != null) {
-                List<Options> options = new ArrayList<>(ovsdbTpAugmentation.getOptions());
+                List<Options> options = new ArrayList<>(ovsdbTpAugmentation.getOptions().values());
                 options.sort(Comparator.comparing(o -> o.key().toString()));
                 newOvsdbTpAugmentationBuilder.setOptions(options);
             }
             if (ovsdbTpAugmentation.getInterfaceBfd() != null) {
-                List<InterfaceBfd> interfaceBfd = new ArrayList<>(ovsdbTpAugmentation.getInterfaceBfd());
+                List<InterfaceBfd> interfaceBfd = new ArrayList<>(ovsdbTpAugmentation.getInterfaceBfd().values());
                 interfaceBfd.sort(Comparator.comparing(o -> o.key().toString()));
                 newOvsdbTpAugmentationBuilder.setInterfaceBfd(interfaceBfd);
             }
@@ -939,7 +939,7 @@ public class InterfaceManagerConfigurationTest {
         if (interfaceType != null) {
             entryBuilder.setInterfaceType(interfaceType);
         }
-        tx.put(LogicalDatastoreType.OPERATIONAL, intfid, entryBuilder.build(), true);
+        tx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, intfid, entryBuilder.build());
         tx.commit().get();
     }
 }
index fbcb67f7620fe497bac89b5b6dbdebc8216db2c7..8172b81e38c2b0d321413faa6c1053c44536ac9e 100644 (file)
@@ -11,7 +11,6 @@ import static org.mockito.Mockito.mock;
 
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
-
 import java.util.concurrent.Executors;
 import org.opendaylight.daexim.DataImportBootReady;
 import org.opendaylight.genius.datastoreutils.listeners.DataTreeEventCallbackRegistrar;
@@ -109,7 +108,7 @@ public class InterfaceManagerTestModule extends AbstractGuiceJsr250Module {
         bind(ServiceRecoveryRegistry.class).toInstance(mock(ServiceRecoveryRegistry.class));
         EntityOwnershipService entityOwnershipService = new BindingDOMEntityOwnershipServiceAdapter(
                 new SimpleDOMEntityOwnershipService(),
-                test.getDataBrokerTestCustomizer().getBindingToNormalized());
+                test.getDataBrokerTestCustomizer().getAdapterContext());
         bind(EntityOwnershipService.class).toInstance(entityOwnershipService);
         bind(EntityOwnershipUtils.class);
         bind(AlivenessMonitorService.class).toInstance(mock(AlivenessMonitorService.class));
index b0117cd317842de943ea60b5e27e8fb0cdf9a1a8..df9cf02ef001f68900489244a9c07ae3f891c08b 100644 (file)
@@ -15,7 +15,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
-
 import org.awaitility.core.ConditionTimeoutException;
 import org.opendaylight.genius.datastoreutils.testutils.AsyncEventsWaiter;
 import org.opendaylight.genius.datastoreutils.testutils.JobCoordinatorCountedEventsWaiter;
@@ -266,7 +265,7 @@ public final class InterfaceManagerTestUtil {
         }
         InstanceIdentifier<Interface> interfaceInstanceIdentifier = IfmUtil.buildId(ifaceName);
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-        tx.put(CONFIGURATION, interfaceInstanceIdentifier, interfaceInfo, true);
+        tx.mergeParentStructurePut(CONFIGURATION, interfaceInstanceIdentifier, interfaceInfo);
         tx.commit().get();
     }
 
@@ -277,7 +276,7 @@ public final class InterfaceManagerTestUtil {
                 true, L2vlan.class, parentRefs, l2vlanMode);
         InstanceIdentifier<Interface> interfaceInstanceIdentifier = IfmUtil.buildId(ifaceName);
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-        tx.put(CONFIGURATION, interfaceInstanceIdentifier, interfaceInfo, true);
+        tx.mergeParentStructurePut(CONFIGURATION, interfaceInstanceIdentifier, interfaceInfo);
         tx.commit().get();
     }
 
@@ -289,7 +288,7 @@ public final class InterfaceManagerTestUtil {
         long portNo = Tunnel.class.equals(ifType) ? PORT_NO_1 : PORT_NO_1;
         NodeConnector nodeConnector = InterfaceManagerTestUtil
                 .buildFlowCapableNodeConnector(buildNodeConnectorId(dpnId, portNo), interfaceName, true);
-        tx.put(OPERATIONAL,buildNodeConnectorInstanceIdentifier(dpnId, portNo), nodeConnector, true);
+        tx.mergeParentStructurePut(OPERATIONAL,buildNodeConnectorInstanceIdentifier(dpnId, portNo), nodeConnector);
         tx.commit().get();
     }
 
@@ -300,7 +299,7 @@ public final class InterfaceManagerTestUtil {
         long portNo = Tunnel.class.equals(ifType) ? PORT_NO_1 : PORT_NO_1;
         NodeConnector nodeConnector = InterfaceManagerTestUtil
             .buildFlowCapableNodeConnector(buildNodeConnectorId(dpnId, portNo), interfaceName, isLive);
-        tx.merge(OPERATIONAL,buildNodeConnectorInstanceIdentifier(dpnId, portNo), nodeConnector, true);
+        tx.mergeParentStructureMerge(OPERATIONAL,buildNodeConnectorInstanceIdentifier(dpnId, portNo), nodeConnector);
         tx.commit().get();
     }
 
index 9f58417cbe83bdc575c3770b5f045493dd06c809..3599ca20ba17b33e892d690191448a69b1a1f78c 100644 (file)
@@ -114,7 +114,8 @@ public class OvsdbSouthboundTestUtil {
         bridgeCreateNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, bridgeCreateAugmentationBuilder.build());
         LOG.debug("Built with the intent to store bridge data {}", bridgeCreateAugmentationBuilder.toString());
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-        tx.put(LogicalDatastoreType.OPERATIONAL, ovsdbBridgeIid, bridgeCreateAugmentationBuilder.build(), true);
+        tx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, ovsdbBridgeIid,
+                bridgeCreateAugmentationBuilder.build());
         tx.commit().get();
     }
 
@@ -133,7 +134,8 @@ public class OvsdbSouthboundTestUtil {
         bridgeCreateNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, bridgeCreateAugmentationBuilder.build());
         LOG.debug("Built with the intent to store bridge data {}", bridgeCreateAugmentationBuilder.toString());
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-        tx.merge(LogicalDatastoreType.OPERATIONAL, ovsdbBridgeIid, bridgeCreateAugmentationBuilder.build(), true);
+        tx.mergeParentStructureMerge(LogicalDatastoreType.OPERATIONAL, ovsdbBridgeIid,
+                bridgeCreateAugmentationBuilder.build());
         tx.commit().get();
     }
 
@@ -223,7 +225,7 @@ public class OvsdbSouthboundTestUtil {
         }
         tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-        tx.put(OPERATIONAL, tpId, tpBuilder.build(), true);
+        tx.mergeParentStructurePut(OPERATIONAL, tpId, tpBuilder.build());
         tx.commit().get();
     }
 
@@ -249,7 +251,7 @@ public class OvsdbSouthboundTestUtil {
         tpAugmentationBuilder.setInterfaceBfdStatus(interfaceBfdStatuses);
         tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-        tx.merge(OPERATIONAL, tpId, tpBuilder.build(), true);
+        tx.mergeParentStructureMerge(OPERATIONAL, tpId, tpBuilder.build());
         tx.commit().get();
     }
 
index 297c11244365394e6813a3853b2ea7e13d7a9ebc..5cf9b6cf011cdeb24f156a6cd966d783c768992e 100644 (file)
@@ -212,7 +212,7 @@ public final class IfmCLIUtil {
             String remoteIp = UNSET;
             String localIp = UNSET;
             String key = UNSET;
-            for (Options portOption: port.nonnullOptions()) {
+            for (Options portOption: port.nonnullOptions().values()) {
                 switch (portOption.getOption()) {
                     case "local_ip":
                         localIp = portOption.getValue();
index cd3af2cf1add615a8b8dfa6a6b9140d0e6019d91..f3a0cd9bd5b7a603801ae6ac016032548993e5fe 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.genius.interfacemanager.shell;
 
 import java.util.List;
-
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.console.OsgiCommandSupport;
 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
index 7930568f30a0b7b4391166a94d5f27f8bb50d231..f913460553159a649ed5974ee7b71024dad8b501 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 3f510a0461e15172da88731479e07dedcdfe6533..0f6f43f371154c5d924615fed9aa82476a7e7d8e 100644 (file)
@@ -67,7 +67,7 @@ public class Ipv6NdUtilServiceImpl implements Ipv6NdUtilService {
         int localErrorCount = 0;
 
         targetIpv6Address = ndInput.getTargetIpAddress();
-        for (InterfaceAddress interfaceAddress : ndInput.nonnullInterfaceAddress()) {
+        for (InterfaceAddress interfaceAddress : ndInput.nonnullInterfaceAddress().values()) {
             try {
                 interfaceName = interfaceAddress.getInterface();
                 srcIpv6Address = interfaceAddress.getSrcIpAddress();
index 21ac3dcdc8abd2dcd8d94b89c1de6054fdce6c48..45aa7740382c29fc7122563f33b366c607f3699c 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index cff050c27a0c87c11037495bf6f93b7b426e0cee..abb638e24128825f5bb6b28a6b51b6c7d1311127 100644 (file)
@@ -37,6 +37,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>org.immutables</groupId>
       <artifactId>value</artifactId>
+      <classifier>annotations</classifier>
     </dependency>
   </dependencies>
 </project>
index 78a9a076a5719c36a097af0452435a0ebf1b5511..fff489dfad9213b20b1d18cd1cc18cf26abd30c9 100644 (file)
@@ -67,6 +67,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
+      <scope>provided</scope>
       <optional>true</optional>
     </dependency>
     <dependency>
index 323c5330beee3dfeec4f339bd589350459305657..42d6264856759b6fc40c9017f15d1bdda12f8bc9 100644 (file)
@@ -90,7 +90,7 @@ public class DpnTepStateCache extends DataObjectCache<Uint64, DpnsTeps> {
     @Override
     protected void added(InstanceIdentifier<DpnsTeps> path, DpnsTeps dpnsTeps) {
         String srcOfTunnel = dpnsTeps.getOfTunnel();
-        for (RemoteDpns remoteDpns : dpnsTeps.nonnullRemoteDpns()) {
+        for (RemoteDpns remoteDpns : dpnsTeps.nonnullRemoteDpns().values()) {
             final String dpn = getDpnId(dpnsTeps.getSourceDpnId(), remoteDpns.getDestinationDpnId());
             DpnTepInterfaceInfo value = new DpnTepInterfaceInfoBuilder()
                 .setTunnelName(remoteDpns.getTunnelName())
@@ -162,7 +162,7 @@ public class DpnTepStateCache extends DataObjectCache<Uint64, DpnsTeps> {
 
     @Override
     protected void removed(InstanceIdentifier<DpnsTeps> path, DpnsTeps dpnsTeps) {
-        for (RemoteDpns remoteDpns : dpnsTeps.nonnullRemoteDpns()) {
+        for (RemoteDpns remoteDpns : dpnsTeps.nonnullRemoteDpns().values()) {
             String fwkey = getDpnId(dpnsTeps.getSourceDpnId(), remoteDpns.getDestinationDpnId());
             dpnTepInterfaceMap.remove(fwkey);
             tunnelEndpointMap.remove(remoteDpns.getTunnelName());
@@ -182,7 +182,7 @@ public class DpnTepStateCache extends DataObjectCache<Uint64, DpnsTeps> {
                 Optional<DpnsTeps> dpnsTeps = super.get(srcDpnId);
                 if (dpnsTeps.isPresent()) {
                     DpnsTeps teps = dpnsTeps.get();
-                    teps.nonnullRemoteDpns().forEach(remoteDpns -> {
+                    teps.nonnullRemoteDpns().values().forEach(remoteDpns -> {
                         DpnTepInterfaceInfo value = new DpnTepInterfaceInfoBuilder()
                                 .setTunnelName(remoteDpns.getTunnelName())
                                 .setIsMonitoringEnabled(remoteDpns.isMonitoringEnabled())
@@ -206,7 +206,7 @@ public class DpnTepStateCache extends DataObjectCache<Uint64, DpnsTeps> {
         Collection<DpnsTeps> dpnsTeps = this.getAllPresent();
         for (DpnsTeps dpnTep : dpnsTeps) {
             if (!Objects.equals(dpnTep.getSourceDpnId(), srcDpnId)) {
-                for (RemoteDpns remoteDpns : dpnTep.nonnullRemoteDpns()) {
+                for (RemoteDpns remoteDpns : dpnTep.nonnullRemoteDpns().values()) {
                     if (Objects.equals(remoteDpns.getDestinationDpnId(), srcDpnId)) {
                         // Remote the SrcDpnId from the remote List. Remove it from COnfig DS. 4
                         // This will be reflected in cache by the ClusteredDTCN. Not removing it here !
index e9fb7aef2f9578f546c053d222821e424d078553..a69145e8054a05df8d3edf81932b3c73babbd9e8 100644 (file)
@@ -22,6 +22,7 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
@@ -183,7 +184,7 @@ public class TepCommandHelper {
                 ItmUtils.read(LogicalDatastoreType.CONFIGURATION, tzonePath, dataBroker);
         if (transportZoneOptional.isPresent()) {
             TransportZone tz = transportZoneOptional.get();
-            for (Vteps vtep : tz.getVteps()) {
+            for (Vteps vtep : tz.getVteps().values()) {
                 if (Objects.equals(vtep.getDpnId(), dpnId)) {
                     return true;
                 }
@@ -233,13 +234,13 @@ public class TepCommandHelper {
                     LOG.debug("tzone object {}", transportZone);
                     transportZoneArrayList.add(transportZone);
                 }
-                TransportZones transportZones =
-                        new TransportZonesBuilder().setTransportZone(transportZoneArrayList).build();
+                TransportZones transportZones = new TransportZonesBuilder()
+                        .setTransportZone(transportZoneArrayList.stream().collect(Collectors.toList())).build();
                 InstanceIdentifier<TransportZones> path = InstanceIdentifier.builder(TransportZones.class).build();
                 LOG.debug("InstanceIdentifier {}", path);
                 Futures.addCallback(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
-                    tx -> tx.merge(path, transportZones, true)), ItmUtils.DEFAULT_WRITE_CALLBACK,
-                    MoreExecutors.directExecutor());
+                    tx -> tx.mergeParentStructureMerge(path, transportZones)), ItmUtils.DEFAULT_WRITE_CALLBACK,
+                        MoreExecutors.directExecutor());
                 LOG.debug("wrote to Config DS {}", transportZones);
                 transportZonesHashMap.clear();
                 transportZoneArrayList.clear();
@@ -275,7 +276,7 @@ public class TepCommandHelper {
                 if (tz.getVteps() == null || tz.getVteps().isEmpty()) {
                     continue;
                 }
-                for (Vteps vtep : tz.getVteps()) {
+                for (Vteps vtep : tz.getVteps().values()) {
                     flag = true;
                     String strTunnelType ;
                     if (TunnelTypeGre.class.equals(tz.getTunnelType())) {
@@ -387,7 +388,7 @@ public class TepCommandHelper {
                     allPaths.addAll(subnetPaths);
                     Futures.addCallback(txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION,
                         tx -> allPaths.forEach(tx::delete)), ItmUtils.DEFAULT_WRITE_CALLBACK,
-                        MoreExecutors.directExecutor());
+                            MoreExecutors.directExecutor());
                 }
                 vtepPaths.clear();
                 subnetPaths.clear();
@@ -555,7 +556,7 @@ public class TepCommandHelper {
                     .setMonitorProtocol(monitorType).build();
             Futures.addCallback(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
                 tx -> tx.merge(path, tunnelMonitor)), ItmUtils.DEFAULT_WRITE_CALLBACK,
-                MoreExecutors.directExecutor());
+                    MoreExecutors.directExecutor());
         }
     }
 
@@ -567,8 +568,8 @@ public class TepCommandHelper {
         if (!storedTunnelMonitor.isPresent() || storedTunnelMonitor.get().getInterval().toJava() != interval) {
             TunnelMonitorInterval tunnelMonitor = new TunnelMonitorIntervalBuilder().setInterval(interval).build();
             Futures.addCallback(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
-                tx -> tx.merge(path, tunnelMonitor, true)), ItmUtils.DEFAULT_WRITE_CALLBACK,
-                MoreExecutors.directExecutor());
+                tx -> tx.mergeParentStructureMerge(path, tunnelMonitor)), ItmUtils.DEFAULT_WRITE_CALLBACK,
+                    MoreExecutors.directExecutor());
         }
     }
 
index e16300cb5d538f8d7bf8cf54d853c2009dd9812b..160c7fca21ea8636ea4371a3a8c6ee6a37f4c756 100644 (file)
@@ -84,14 +84,14 @@ public class ItmExternalTunnelAddWorker {
                 InstanceIdentifier<Interface> trunkIdentifier = ItmUtils.buildId(trunkInterfaceName);
                 LOG.debug(" Trunk Interface Identifier - {} ", trunkIdentifier);
                 LOG.trace(" Writing Trunk Interface to Config DS {}, {} ", trunkIdentifier, iface);
-                tx.merge(trunkIdentifier, iface, true);
+                tx.mergeParentStructureMerge(trunkIdentifier, iface);
                 // update external_tunnel_list ds
                 InstanceIdentifier<ExternalTunnel> path = InstanceIdentifier.create(ExternalTunnelList.class)
                         .child(ExternalTunnel.class, new ExternalTunnelKey(extIp.stringValue(),
                                 teps.getDPNID().toString(), tunType));
                 ExternalTunnel tnl = ItmUtils.buildExternalTunnel(teps.getDPNID().toString(),
                         extIp.stringValue(), tunType, trunkInterfaceName);
-                tx.merge(path, tnl, true);
+                tx.mergeParentStructureMerge(path, tnl);
                 ItmUtils.ITM_CACHE.addExternalTunnel(tnl);
 
             }
@@ -134,7 +134,7 @@ public class ItmExternalTunnelAddWorker {
             LOG.trace("processing dpn {}", dpn);
             if (dpn.getTunnelEndPoints() != null && !dpn.getTunnelEndPoints().isEmpty()) {
                 for (TunnelEndPoints tep : dpn.getTunnelEndPoints()) {
-                    for (TzMembership zone : tep.nonnullTzMembership()) {
+                    for (TzMembership zone : tep.nonnullTzMembership().values()) {
                         try {
                             createTunnelsFromOVSinTransportZone(zone.getZoneName(), dpn, tep, tx, monitorInterval,
                                     monitorProtocol);
@@ -160,7 +160,7 @@ public class ItmExternalTunnelAddWorker {
                 String portName = itmConfig.getPortname() == null ? ITMConstants.DUMMY_PORT : itmConfig.getPortname();
                 int vlanId = itmConfig.getVlanId() != null ? itmConfig.getVlanId().toJava()
                                                              : ITMConstants.DUMMY_VLANID;
-                for (DeviceVteps hwVtepDS : transportZone.getDeviceVteps()) {
+                for (DeviceVteps hwVtepDS : transportZone.getDeviceVteps().values()) {
                     //dont mesh if hwVteps and OVS-tep have same ip-address
                     if (Objects.equals(hwVtepDS.getIpAddress(), tep.getIpAddress())) {
                         continue;
@@ -202,7 +202,7 @@ public class ItmExternalTunnelAddWorker {
             int vlanId = itmConfig.getVlanId() != null ? itmConfig.getVlanId().toJava() : ITMConstants.DUMMY_VLANID;
             //do we need to check tunnel type?
             if (tzone.getDeviceVteps() != null && !tzone.getDeviceVteps().isEmpty()) {
-                for (DeviceVteps hwVtepDS : tzone.getDeviceVteps()) {
+                for (DeviceVteps hwVtepDS : tzone.getDeviceVteps().values()) {
                     if (Objects.equals(hwVtepDS.getIpAddress(), hwTep.getHwIp())) {
                         continue;//dont mesh with self
                     }
@@ -225,7 +225,7 @@ public class ItmExternalTunnelAddWorker {
                     }
                 }
             }
-            for (Vteps vtep : tzone.getVteps()) {
+            for (Vteps vtep : tzone.getVteps().values()) {
                 if (Objects.equals(vtep.getIpAddress(), hwTep.getHwIp())) {
                     continue;
                 }
@@ -274,14 +274,14 @@ public class ItmExternalTunnelAddWorker {
                 .child(Interface.class, new InterfaceKey(tunnelIfName)).build();
         LOG.trace(" Writing Trunk Interface to Config DS {}, {} ", ifIID, hwTunnelIf);
         ItmUtils.ITM_CACHE.addInterface(hwTunnelIf);
-        tx.merge(ifIID, hwTunnelIf, true);
+        tx.mergeParentStructureMerge(ifIID, hwTunnelIf);
         // also update itm-state ds?
         InstanceIdentifier<ExternalTunnel> path = InstanceIdentifier.create(ExternalTunnelList.class)
                 .child(ExternalTunnel.class, new ExternalTunnelKey(getExternalTunnelKey(dstNodeId),
                         getExternalTunnelKey(srcNodeid), tunType));
         ExternalTunnel tnl = ItmUtils.buildExternalTunnel(getExternalTunnelKey(srcNodeid),
                 getExternalTunnelKey(dstNodeId), tunType, tunnelIfName);
-        tx.merge(path, tnl, true);
+        tx.mergeParentStructureMerge(path, tnl);
         ItmUtils.ITM_CACHE.addExternalTunnel(tnl);
         return true;
     }
@@ -308,7 +308,7 @@ public class ItmExternalTunnelAddWorker {
         InstanceIdentifier<Interface> ifIID = InstanceIdentifier.builder(Interfaces.class).child(Interface.class,
                 new InterfaceKey(tunnelIfName)).build();
         LOG.trace(" Writing Trunk Interface to Config DS {}, {} ", ifIID, extTunnelIf);
-        tx.merge(ifIID, extTunnelIf, true);
+        tx.mergeParentStructureMerge(ifIID, extTunnelIf);
         ItmUtils.ITM_CACHE.addInterface(extTunnelIf);
         InstanceIdentifier<ExternalTunnel> path = InstanceIdentifier.create(ExternalTunnelList.class)
                 .child(ExternalTunnel.class, new ExternalTunnelKey(getExternalTunnelKey(dstNodeId),
@@ -316,7 +316,7 @@ public class ItmExternalTunnelAddWorker {
         ExternalTunnel tnl = ItmUtils.buildExternalTunnel(dpnId.toString(),
                 getExternalTunnelKey(dstNodeId),
                 tunType, tunnelIfName);
-        tx.merge(path, tnl, true);
+        tx.mergeParentStructureMerge(path, tnl);
         ItmUtils.ITM_CACHE.addExternalTunnel(tnl);
         return true;
     }
index eafc097d75e66540985580845dd165ee3577cac0..0d650b1c99c2c08d7e421db4f4155f29c00dfa22 100644 (file)
@@ -9,9 +9,11 @@ package org.opendaylight.genius.itm.confighelpers;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.genius.infra.Datastore.Configuration;
 import org.opendaylight.genius.infra.TypedReadWriteTransaction;
 import org.opendaylight.genius.infra.TypedWriteTransaction;
@@ -26,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.Ext
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfo;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPoints;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.tunnel.end.points.TzMembership;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.tunnel.end.points.TzMembershipKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.external.tunnel.list.ExternalTunnel;
 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.TransportZone;
@@ -56,8 +59,8 @@ public final class ItmExternalTunnelDeleteWorker {
             TunnelEndPoints firstEndPt = teps.getTunnelEndPoints().get(0);
             // The membership in the listener will always be 1, to get the actual membership
             // read from the DS
-            List<TzMembership> originalTzMembership = ItmUtils.getOriginalTzMembership(firstEndPt,
-                    teps.getDPNID(), meshedDpnList);
+            @NonNull Map<TzMembershipKey, TzMembership> originalTzMembership =
+                    ItmUtils.getOriginalTzMembership(firstEndPt, teps.getDPNID(), meshedDpnList);
             if (originalTzMembership.size() == 1) {
                 String interfaceName = firstEndPt.getInterfaceName();
                 String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(interfaceName,
@@ -123,7 +126,7 @@ public final class ItmExternalTunnelDeleteWorker {
             for (DPNTEPsInfo dpn : cfgdDpnList) {
                 if (dpn.getTunnelEndPoints() != null) {
                     for (TunnelEndPoints srcTep : dpn.getTunnelEndPoints()) {
-                        for (TzMembership zone : srcTep.nonnullTzMembership()) {
+                        for (TzMembership zone : srcTep.nonnullTzMembership().values()) {
                             deleteTunnelsInTransportZone(zone.getZoneName(), dpn, srcTep, cfgdhwVteps, tx);
                         }
                     }
@@ -143,7 +146,7 @@ public final class ItmExternalTunnelDeleteWorker {
                 }
                 // do we need to check tunnel type?
                 if (originalTZone.getDeviceVteps() != null) {
-                    for (DeviceVteps hwVtepDS : originalTZone.getDeviceVteps()) {
+                    for (DeviceVteps hwVtepDS : originalTZone.getDeviceVteps().values()) {
                         LOG.trace("hwtepDS exists {}", hwVtepDS);
                         // do i need to check node-id?
                         // for mlag case and non-m-lag case, isnt it enough to just check ipaddress?
@@ -164,7 +167,7 @@ public final class ItmExternalTunnelDeleteWorker {
                     int vlanId = itmConfig.getVlanId() != null ? itmConfig.getVlanId().toJava()
                                                                  : ITMConstants.DUMMY_VLANID;
 
-                    for (Vteps vtep : originalTZone.getVteps()) {
+                    for (Vteps vtep : originalTZone.getVteps().values()) {
                         // TOR-OVS
                         LOG.trace("deleting tor-css-tor {} and {}", hwTep, vtep);
                         String parentIf = ItmUtils.getInterfaceName(vtep.getDpnId(), portName, vlanId);
@@ -187,7 +190,7 @@ public final class ItmExternalTunnelDeleteWorker {
             TransportZone tzone = tz.get();
             // do we need to check tunnel type?
             if (tzone.getDeviceVteps() != null) {
-                for (DeviceVteps hwVtepDS : tzone.getDeviceVteps()) {
+                for (DeviceVteps hwVtepDS : tzone.getDeviceVteps().values()) {
                     // OVS-TOR-OVS
                     deleteTrunksOvsTor(dpn.getDPNID(), srcTep.getInterfaceName(),
                             srcTep.getIpAddress(), hwVtepDS.getTopologyId(), hwVtepDS.getNodeId(),
index d67ee9bfe318ed766a56f8dc1e95915665cbdd46..1804a71780f42d2d702656106117a2653f2a947d 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.genius.itm.confighelpers;
 
 import static java.util.Collections.singletonList;
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.time.Duration;
@@ -276,7 +275,7 @@ public final class ItmInternalTunnelAddWorker {
         // Switching to individual transaction submit as batching latencies is causing ELAN failures.
         // Will revert when ELAN can handle this.
         // ITMBatchingUtils.update(path, tnl, ITMBatchingUtils.EntityType.DEFAULT_CONFIG);
-        tx.merge(path, tnl, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructureMerge(path, tnl);
         ItmUtils.ITM_CACHE.addInternalTunnel(tnl);
     }
 
index 2089ed58567835a104d6f2c6489eb8b4fcc5c75c..aedadd856a1996071feec9219fdf0cec9bf4b059 100644 (file)
@@ -14,10 +14,12 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.genius.cloudscaler.api.TombstonedNodeManager;
 import org.opendaylight.genius.infra.Datastore.Configuration;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
@@ -62,6 +64,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPoints;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPointsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.tunnel.end.points.TzMembership;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.tunnel.end.points.TzMembershipKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList;
@@ -143,7 +146,7 @@ public class ItmInternalTunnelDeleteWorker {
                 for (TunnelEndPoints srcTep : srcDpn.nonnullTunnelEndPoints()) {
                     LOG.trace("Processing srcTep {}", srcTep);
                     Boolean isDpnTombstoned = tombstonedNodeManager.isDpnTombstoned(srcDpn.getDPNID());
-                    List<TzMembership> srcTZones = srcTep.nonnullTzMembership();
+                    @NonNull Map<TzMembershipKey, TzMembership> srcTZones = srcTep.nonnullTzMembership();
                     boolean tepDeleteFlag = false;
                     // First, take care of tunnel removal, so run through all other DPNS other than srcDpn
                     // In the tep received from Delete DCN, the membership list will always be 1
@@ -154,7 +157,7 @@ public class ItmInternalTunnelDeleteWorker {
                         if (!Objects.equals(srcDpn.getDPNID(), dstDpn.getDPNID())) {
                             for (TunnelEndPoints dstTep : dstDpn.nonnullTunnelEndPoints()) {
                                 if (!ItmUtils.getIntersection(dstTep.nonnullTzMembership(), srcTZones).isEmpty()) {
-                                    List<TzMembership> originalTzMembership =
+                                    Map<TzMembershipKey, TzMembership> originalTzMembership =
                                             ItmUtils.getOriginalTzMembership(srcTep, srcDpn.getDPNID(), meshedDpnList);
                                     if (ItmUtils.getIntersection(dstTep.getTzMembership(),
                                             originalTzMembership).size() == 1) {
@@ -478,7 +481,8 @@ public class ItmInternalTunnelDeleteWorker {
 
 
         if (ovsBridgeEntryOptional.isPresent()) {
-            List<OvsBridgeTunnelEntry> bridgeTunnelEntries = ovsBridgeEntryOptional.get().nonnullOvsBridgeTunnelEntry();
+            @NonNull Map<OvsBridgeTunnelEntryKey, OvsBridgeTunnelEntry> bridgeTunnelEntries =
+                    ovsBridgeEntryOptional.get().nonnullOvsBridgeTunnelEntry();
 
             if (ovsdbBridgeRef != null) {
                 if (!itmConfig.isUseOfTunnels()) {
@@ -542,7 +546,7 @@ public class ItmInternalTunnelDeleteWorker {
     }
 
     private void deleteBridgeInterfaceEntry(OvsBridgeEntryKey bridgeEntryKey,
-                                            List<OvsBridgeTunnelEntry> bridgeTunnelEntries,
+                                            Map<OvsBridgeTunnelEntryKey, OvsBridgeTunnelEntry> bridgeTunnelEntries,
                                             InstanceIdentifier<OvsBridgeEntry> bridgeEntryIid,
                                             String interfaceName) {
         OvsBridgeTunnelEntryKey bridgeTunnelEntryKey = new OvsBridgeTunnelEntryKey(interfaceName);
index 5886df8af6eb695ca4deab8ae4f86a4d34435d8f..2f5f938815b724e7f55fadcaeeb16983e4c586e4 100644 (file)
@@ -123,7 +123,7 @@ public class ItmMonitorWorker implements Callable<List<? extends ListenableFutur
         List<RemoteDpns> remoteDpnTepNewList = new ArrayList<>();
         RemoteDpns remoteDpnNew = null;
         Optional<OvsBridgeRefEntry> ovsBridgeRefEntry = ovsBridgeRefEntryCache.get(dpnTeps.getSourceDpnId());
-        for (RemoteDpns remoteDpn : dpnTeps.nonnullRemoteDpns()) {
+        for (RemoteDpns remoteDpn : dpnTeps.nonnullRemoteDpns().values()) {
             if (enabled != null) {
                 LOG.debug("toggleMonitoring: tunnelInterfaceName: {}, monitorEnable = {} ",
                     remoteDpn.getTunnelName(), enabled);
index d430cdb4ec1641da464c8f83003fcde67771666c..a5a62a2fa19ac2c7a1bc060a2329c3ce0db6b2f8 100644 (file)
@@ -68,7 +68,7 @@ public class ItmTepAddWorker implements Callable<List<? extends ListenableFuture
                 Optional<DcGatewayIpList> optional = tx.read(InstanceIdentifier.builder(DcGatewayIpList.class)
                         .build()).get();
                 if (optional.isPresent()) {
-                    optional.get().getDcGatewayIp().forEach(dcGatewayIp ->
+                    optional.get().getDcGatewayIp().values().forEach(dcGatewayIp ->
                         externalTunnelAddWorker.buildTunnelsToExternalEndPoint(cfgdDpnList, dcGatewayIp.getIpAddress(),
                         dcGatewayIp.getTunnnelType(), tx));
                 }
index b790d8c5c3c3d4711e684a09cc3e22284719fb7f..96dbda114d36efdec9f93b2a3812c0e2d0dd57e9 100644 (file)
@@ -13,8 +13,10 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.Callable;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.infra.Datastore;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.TypedReadWriteTransaction;
@@ -25,6 +27,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPoints;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.DcGatewayIpList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.dc.gateway.ip.list.DcGatewayIp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.dc.gateway.ip.list.DcGatewayIpKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -75,9 +78,9 @@ public class ItmTepRemoveWorker implements Callable<List<? extends ListenableFut
                 Optional<DcGatewayIpList> optional = tx.read(InstanceIdentifier.builder(DcGatewayIpList.class)
                         .build()).get();
                 if (optional.isPresent()) {
-                    List<DcGatewayIp> dcGatewayIpList = optional.get().getDcGatewayIp();
+                    @Nullable Map<DcGatewayIpKey, DcGatewayIp> dcGatewayIpList = optional.get().getDcGatewayIp();
                     if (dcGatewayIpList != null && !dcGatewayIpList.isEmpty()) {
-                        processExternalTunnelTepDelete(dcGatewayIpList, tx);
+                        processExternalTunnelTepDelete(dcGatewayIpList.values(), tx);
                     }
                 }
             }
index a655e884fd9f0d57ca0290c34a866c0055ca8004..9fe2a1c6e5c0256ea230e6ee692ea1b3d3b63030 100644 (file)
@@ -10,22 +10,24 @@ package org.opendaylight.genius.itm.confighelpers;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.Callable;
 import org.opendaylight.genius.infra.Datastore;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 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.UnknownVtepsKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class ItmTepsNotHostedAddWorker implements Callable<List<? extends ListenableFuture<?>>> {
 
     private static final Logger LOG = LoggerFactory.getLogger(ItmTepsNotHostedAddWorker.class);
-    private final  List<UnknownVteps> vtepsList;
+    private final Map<UnknownVtepsKey, UnknownVteps> vtepsList;
     private final  String tzName;
     private final ManagedNewTransactionRunner txRunner;
 
-    public ItmTepsNotHostedAddWorker(List<UnknownVteps> vtepsList, String tzName, DataBroker broker,
+    public ItmTepsNotHostedAddWorker(Map<UnknownVtepsKey, UnknownVteps> vtepsList, String tzName, DataBroker broker,
                                      ManagedNewTransactionRunner txRunner) {
         this.vtepsList = vtepsList;
         this.tzName = tzName;
index 1d08f332da89a4a134e66226df807173229b3182..ed64bdc95648eb6aececab56d7843741d4545091 100644 (file)
@@ -10,19 +10,20 @@ package org.opendaylight.genius.itm.confighelpers;
 
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
 import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.infra.Datastore.Configuration;
 import org.opendaylight.genius.infra.Datastore.Operational;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
@@ -59,6 +60,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.itm.config.TunnelAggregation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.itm.config.TunnelAggregationKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
@@ -164,9 +166,10 @@ public class ItmTunnelAggregationHelper {
         // Load balancing of VxLAN feature is guarded by a global configuration option in the ITM,
         // only when the feature is enabled, the logical tunnel interfaces should be created.
         boolean tunnelAggregationConfigEnabled = false;
-        List<TunnelAggregation> tunnelsConfig = itmConfig != null ? itmConfig.getTunnelAggregation() : null;
+        Map<TunnelAggregationKey, TunnelAggregation> tunnelsConfig = itmConfig != null
+                ? itmConfig.getTunnelAggregation() : null;
         if (tunnelsConfig != null) {
-            for (TunnelAggregation tnlCfg : tunnelsConfig) {
+            for (TunnelAggregation tnlCfg : tunnelsConfig.values()) {
                 Class<? extends TunnelTypeBase> tunType = ItmUtils.getTunnelType(tnlCfg.key().getTunnelType());
                 if (tunType.isAssignableFrom(TunnelTypeVxlan.class)) {
                     tunnelAggregationConfigEnabled = tnlCfg.isEnabled();
@@ -212,12 +215,13 @@ public class ItmTunnelAggregationHelper {
                 ? interfaceManager.getLogicalTunnelSelectGroupId(ifLogicTunnel.getInterfaceTag()) : INVALID_ID;
         Uint64 srcDpnId = logicInternalTunnel.getSourceDPN();
         List<Bucket> listBuckets = new ArrayList<>();
-        List<InterfaceChildEntry> interfaceChildEntries = parentEntry.getInterfaceChildEntry();
+        @Nullable Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries =
+                parentEntry.getInterfaceChildEntry();
         if (interfaceChildEntries == null || interfaceChildEntries.isEmpty()) {
             LOG.debug("MULTIPLE_VxLAN_TUNNELS: empty child list in group {}", parentEntry.getParentInterface());
             return;
         }
-        for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
+        for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries.values()) {
             String curChildName = interfaceChildEntry.getChildInterface();
             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
                         childIface = ItmUtils.getInterface(curChildName, interfaceManager);
@@ -239,7 +243,10 @@ public class ItmTunnelAggregationHelper {
                         curChildName, groupId);
                 continue;
             }
-            int bucketId = interfaceChildEntries.indexOf(interfaceChildEntry);
+
+            List<InterfaceChildEntry> val = new ArrayList<>(interfaceChildEntries.values());
+            int bucketId = val.indexOf(interfaceChildEntry);
+
             LOG.debug("MULTIPLE_VxLAN_TUNNELS: updateTunnelAggregationGroup - add bucketId {} to groupId {}",
                     bucketId, groupId);
             listBuckets.add(createBucket(curChildName, ifTunnel, bucketId, ifInfo.getPortNo()));
@@ -258,7 +265,8 @@ public class ItmTunnelAggregationHelper {
                                                     int action, TypedReadWriteTransaction<Configuration> tx)
             throws ExecutionException, InterruptedException {
         String logicTunnelName = parentRefs.getParentInterface();
-        List<InterfaceChildEntry> interfaceChildEntries = groupParentEntry.getInterfaceChildEntry();
+        @Nullable Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries =
+                groupParentEntry.getInterfaceChildEntry();
         if (interfaceChildEntries == null) {
             LOG.debug("MULTIPLE_VxLAN_TUNNELS: empty child list in group {}", groupParentEntry.getParentInterface());
             return;
@@ -266,7 +274,9 @@ public class ItmTunnelAggregationHelper {
         String ifaceName = ifaceState.getName();
         InterfaceChildEntry childEntry = new InterfaceChildEntryBuilder().setChildInterface(ifaceName)
                 .withKey(new InterfaceChildEntryKey(ifaceName)).build();
-        int bucketId = interfaceChildEntries.indexOf(childEntry);
+        List<InterfaceChildEntry> val = new ArrayList<>(interfaceChildEntries.values());
+        int bucketId = val.indexOf(childEntry);
+
         if (bucketId == -1) {
             LOG.debug("MULTIPLE_VxLAN_TUNNELS: wrong child id for {} in group {}", ifaceName,
                     groupParentEntry.getParentInterface());
@@ -336,13 +346,14 @@ public class ItmTunnelAggregationHelper {
             return OperStatus.Up;
         }
 
-        List<InterfaceChildEntry> interfaceChildEntries = parentEntry.getInterfaceChildEntry();
+        @Nullable Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries =
+                parentEntry.getInterfaceChildEntry();
         if (interfaceChildEntries == null || interfaceChildEntries.isEmpty()) {
             LOG.debug("MULTIPLE_VxLAN_TUNNELS: OperStatus is Down, because of the empty child list in group {}",
                     parentEntry.getParentInterface());
             return OperStatus.Down;
         }
-        for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
+        for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries.values()) {
             String curChildInterface = interfaceChildEntry.getChildInterface();
             if (!Objects.equals(curChildInterface, ifaceState.getName())) {
                 InterfaceInfo ifInfo = interfaceManager.getInterfaceInfoFromOperationalDataStore(curChildInterface);
@@ -360,7 +371,7 @@ public class ItmTunnelAggregationHelper {
         InstanceIdentifier<Interface> idLogicGroup = ItmUtils.buildStateInterfaceId(ifaceName);
         InterfaceBuilder ifaceBuilderChild = new InterfaceBuilder(ifaceState);
         ifaceBuilderChild.setOperStatus(st);
-        tx.merge(idLogicGroup, ifaceBuilderChild.build(), CREATE_MISSING_PARENTS);
+        tx.mergeParentStructureMerge(idLogicGroup, ifaceBuilderChild.build());
     }
 
     @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",
@@ -371,12 +382,13 @@ public class ItmTunnelAggregationHelper {
         if (ifOrigin == null || ifUpdated == null || ifOrigin.getAdminStatus() == ifUpdated.getAdminStatus()) {
             return;
         }
-        List<InterfaceChildEntry> interfaceChildEntries = parentEntry.getInterfaceChildEntry();
+        @Nullable Map<InterfaceChildEntryKey, InterfaceChildEntry> interfaceChildEntries =
+                parentEntry.getInterfaceChildEntry();
         if (interfaceChildEntries == null || interfaceChildEntries.isEmpty()) {
             LOG.debug("MULTIPLE_VxLAN_TUNNELS: empty child list in group {}", logicalTunnelName);
             return;
         }
-        for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) {
+        for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries.values()) {
             String curChildInterface = interfaceChildEntry.getChildInterface();
             updateInterfaceAdminStatus(curChildInterface, ifUpdated.getAdminStatus(), tx);
         }
@@ -402,7 +414,7 @@ public class ItmTunnelAggregationHelper {
         InterfaceBuilder ifaceBuilderChild = new InterfaceBuilder();
         ifaceBuilderChild.withKey(new InterfaceKey(ifaceName));
         ifaceBuilderChild.setAdminStatus(st);
-        tx.merge(id, ifaceBuilderChild.build(), CREATE_MISSING_PARENTS);
+        tx.mergeParentStructureMerge(id, ifaceBuilderChild.build());
     }
 
     private class TunnelAggregationUpdateWorker implements Callable<List<? extends ListenableFuture<?>>> {
index 0b6ed55989cf40d1bf9899e484f8c7a8a90650b0..afcf15c65013ae178d8c9c3aef10636ffd1aef8e 100644 (file)
@@ -10,7 +10,9 @@ package org.opendaylight.genius.itm.confighelpers;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import org.opendaylight.genius.infra.Datastore;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
@@ -158,7 +160,7 @@ public final class OvsdbTepAddConfigHelper {
                         .setZoneName(tzName).build();
 
         // Update TZ in Config DS to add vtep in TZ
-        tx.merge(tranzportZonePath, updatedTzone, true);
+        tx.mergeParentStructureMerge(tranzportZonePath, updatedTzone);
     }
 
     /**
@@ -175,12 +177,12 @@ public final class OvsdbTepAddConfigHelper {
     protected static void addUnknownTzTepIntoTepsNotHosted(String tzName, IpAddress tepIpAddress,
                                                            Uint64 dpid, boolean ofTunnel, DataBroker dataBroker,
                                                            TypedWriteTransaction<Datastore.Operational> tx) {
-        List<UnknownVteps> vtepList;
+        Map<UnknownVtepsKey, UnknownVteps> vtepList;
         TepsInNotHostedTransportZone tepsInNotHostedTransportZone =
                 ItmUtils.getUnknownTransportZoneFromITMOperDS(tzName, dataBroker);
         if (tepsInNotHostedTransportZone == null) {
             LOG.trace("Unhosted TransportZone ({}) does not exist in OperDS.", tzName);
-            vtepList = new ArrayList<>();
+            vtepList = new HashMap<>();
             addVtepIntoTepsNotHosted(addVtepToUnknownVtepsList(vtepList, tepIpAddress, dpid, ofTunnel), tzName, tx);
         } else {
             vtepList = tepsInNotHostedTransportZone.getUnknownVteps();
@@ -188,7 +190,7 @@ public final class OvsdbTepAddConfigHelper {
                 //  case: vtep list does not exist or it has no elements
                 if (vtepList == null) {
                     LOG.trace("Add TEP into unhosted TZ ({}) when no vtep-list in the TZ.", tzName);
-                    vtepList = new ArrayList<>();
+                    vtepList = new HashMap<>();
                 }
                 LOG.trace("Add TEP into unhosted TZ ({}) when no vtep-list in the TZ.", tzName);
                 addVtepIntoTepsNotHosted(addVtepToUnknownVtepsList(vtepList, tepIpAddress, dpid, ofTunnel), tzName, tx);
@@ -197,7 +199,7 @@ public final class OvsdbTepAddConfigHelper {
                 boolean vtepFound = false;
                 UnknownVteps oldVtep = null;
 
-                for (UnknownVteps vtep : vtepList) {
+                for (UnknownVteps vtep : vtepList.values()) {
                     if (Objects.equals(vtep.getDpnId(), dpid)) {
                         vtepFound = true;
                         oldVtep = vtep;
@@ -209,7 +211,7 @@ public final class OvsdbTepAddConfigHelper {
                             tepIpAddress, dpid, ofTunnel), tzName, tx);
                 } else {
                     // vtep is found, update it with tep-ip
-                    vtepList.remove(oldVtep);
+                    vtepList.remove(oldVtep.key());
                     addVtepIntoTepsNotHosted(addVtepToUnknownVtepsList(vtepList,
                             tepIpAddress, dpid, ofTunnel), tzName, tx);
                 }
@@ -226,7 +228,7 @@ public final class OvsdbTepAddConfigHelper {
      * @param tzName transport zone name in string
      * @param tx TypedWriteTransaction object
      */
-    protected static void addVtepIntoTepsNotHosted(List<UnknownVteps> updatedVtepList, String tzName,
+    protected static void addVtepIntoTepsNotHosted(Map<UnknownVtepsKey, UnknownVteps> updatedVtepList, String tzName,
                                                    TypedWriteTransaction<Datastore.Operational> tx) {
         //Create TZ node path
         InstanceIdentifier<TepsInNotHostedTransportZone> tepsInNotHostedTransportZoneIid =
@@ -240,7 +242,7 @@ public final class OvsdbTepAddConfigHelper {
                 .setUnknownVteps(updatedVtepList).build();
 
         // Update TZ in Oper DS.
-        tx.merge(tepsInNotHostedTransportZoneIid, updatedTzone, true);
+        tx.mergeParentStructureMerge(tepsInNotHostedTransportZoneIid, updatedTzone);
     }
 
     private static void addConfig(String tzName, Uint64 dpnId, IpAddress ipAdd,
@@ -258,9 +260,8 @@ public final class OvsdbTepAddConfigHelper {
             tx -> addUnknownTzTepIntoTepsNotHosted(tzName, tepIpAddress, id, ofTunnel, dataBroker, tx)));
     }
 
-    private static List<UnknownVteps> addVtepToUnknownVtepsList(List<UnknownVteps> updatedVtepList,
-                                                                IpAddress tepIpAddress, Uint64 dpid,
-                                                                boolean ofTunnel) {
+    private static Map<UnknownVtepsKey, UnknownVteps> addVtepToUnknownVtepsList(Map<UnknownVtepsKey,
+            UnknownVteps> updatedVtepList, IpAddress tepIpAddress, Uint64 dpid, boolean ofTunnel) {
         // create vtep
         UnknownVtepsKey vtepkey = new UnknownVtepsKey(dpid);
         UnknownVteps vtepObj =
@@ -268,7 +269,7 @@ public final class OvsdbTepAddConfigHelper {
                         .setOfTunnel(ofTunnel).build();
 
         // Add vtep obtained into unknown TZ tep list
-        updatedVtepList.add(vtepObj);
+        updatedVtepList.put(vtepObj.key(),vtepObj);
         LOG.trace("Adding TEP  (DPID: {}, TEP IP: {}, of-tunnel: {}) into unhosted Transport Zone"
                 + "inside ITM Oper DS.", dpid, tepIpAddress, ofTunnel);
         return updatedVtepList;
index cbaaba500128e58583996d0dc0e3b5c3b995c141..82920fd2ac29e1db6264346c92c14fa8cd931615 100644 (file)
@@ -10,7 +10,9 @@ package org.opendaylight.genius.itm.confighelpers;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.infra.Datastore;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.TypedWriteTransaction;
@@ -100,7 +102,7 @@ public final class OvsdbTepRemoveConfigHelper {
 
         // Remove TEP from (default transport-zone) OR (transport-zone already configured by Northbound)
 
-        List<Vteps> vtepList = transportZone.getVteps();
+        @Nullable Map<VtepsKey, Vteps> vtepList = transportZone.getVteps();
         if (vtepList == null || vtepList.isEmpty()) {
             //  case: vtep list does not exist or it has no elements
             LOG.trace("No vtep list in subnet list of transport-zone. Nothing to do.");
@@ -109,7 +111,7 @@ public final class OvsdbTepRemoveConfigHelper {
             boolean vtepFound = false;
             Vteps oldVtep = null;
 
-            for (Vteps vtep : vtepList) {
+            for (Vteps vtep : vtepList.values()) {
                 if (Objects.equals(vtep.getDpnId(), dpnId)) {
                     vtepFound = true;
                     oldVtep = vtep;
@@ -168,7 +170,7 @@ public final class OvsdbTepRemoveConfigHelper {
     public static void removeUnknownTzTepFromTepsNotHosted(String tzName, IpAddress tepIpAddress,
                                                            Uint64 dpnId, DataBroker dataBroker,
                                                            TypedWriteTransaction<Datastore.Operational> tx) {
-        List<UnknownVteps> vtepList;
+        Map<UnknownVtepsKey, UnknownVteps> vtepList;
         TepsInNotHostedTransportZone tepsInNotHostedTransportZone =
                 ItmUtils.getUnknownTransportZoneFromITMOperDS(tzName, dataBroker);
         if (tepsInNotHostedTransportZone == null) {
@@ -183,7 +185,7 @@ public final class OvsdbTepRemoveConfigHelper {
                 //  case: vtep list has elements
                 boolean vtepFound = false;
 
-                for (UnknownVteps vtep : vtepList) {
+                for (UnknownVteps vtep : vtepList.values()) {
                     if (Objects.equals(vtep.getDpnId(), dpnId)) {
                         vtepFound = true;
                         break;
index 7cf28aa1b11455991789bfb108239ed44f2c145e..03473ea6fd6ddb367e6c71051b4705d03805ca8d 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.genius.itm.impl;
 
-import static java.util.Collections.emptyList;
+import static java.util.Collections.emptyMap;
 
 import com.google.common.collect.BiMap;
 import com.google.common.collect.ImmutableBiMap;
@@ -20,12 +20,15 @@ import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 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.TypedReadWriteTransaction;
@@ -96,6 +99,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPointsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.tunnel.end.points.TzMembership;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.tunnel.end.points.TzMembershipBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.tunnel.end.points.TzMembershipKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.external.tunnel.list.ExternalTunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.external.tunnel.list.ExternalTunnelBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.external.tunnel.list.ExternalTunnelKey;
@@ -114,6 +118,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.ho
 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.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.VtepsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
@@ -530,7 +535,7 @@ public final class ItmUtils {
     public static <T extends DataObject> void syncWrite(LogicalDatastoreType datastoreType,
                                                         InstanceIdentifier<T> path, T data, DataBroker broker) {
         WriteTransaction tx = broker.newWriteOnlyTransaction();
-        tx.put(datastoreType, path, data, true);
+        tx.mergeParentStructurePut(datastoreType, path, data);
         try {
             tx.commit().get();
         } catch (InterruptedException | ExecutionException e) {
@@ -564,16 +569,16 @@ public final class ItmUtils {
         return tunnelList;
     }
 
-    public static List<InternalTunnel> getInternalTunnelsFromCache(DataBroker dataBroker) {
+    public static Map<InternalTunnelKey, InternalTunnel> getInternalTunnelsFromCache(DataBroker dataBroker) {
         Collection<InternalTunnel> internalInterfaces = ITM_CACHE.getAllInternalTunnel();
         LOG.trace("getInternalTunnelsFromCache - List of InternalTunnels in the Cache: {} ", internalInterfaces);
-        List<InternalTunnel> tunnelList = new ArrayList<>();
+        Map<InternalTunnelKey, InternalTunnel> tunnelList = new HashMap<>();
         if (internalInterfaces.isEmpty()) {
             LOG.trace("ItmUtils.getInternalTunnelsFromCache invoking getAllInternalTunnlInterfacesFromDS");
             tunnelList = getAllInternalTunnels(dataBroker);
         } else {
             LOG.debug("No. of Internal Tunnel Interfaces in cache: {} ", internalInterfaces.size());
-            tunnelList.addAll(internalInterfaces);
+            tunnelList.values().addAll(internalInterfaces);
         }
         LOG.trace("List of Internal Tunnels: {}", tunnelList);
         return tunnelList;
@@ -602,8 +607,8 @@ public final class ItmUtils {
         return null;
     }
 
-    public static List<InternalTunnel> getAllInternalTunnels(DataBroker dataBroker) {
-        List<InternalTunnel> result = null;
+    public static Map<InternalTunnelKey, InternalTunnel> getAllInternalTunnels(DataBroker dataBroker) {
+        Map<InternalTunnelKey, InternalTunnel> result = null;
         InstanceIdentifier<TunnelList> iid = InstanceIdentifier.builder(TunnelList.class).build();
         Optional<TunnelList> tunnelList = read(LogicalDatastoreType.CONFIGURATION, iid, dataBroker);
 
@@ -611,7 +616,7 @@ public final class ItmUtils {
             result = tunnelList.get().getInternalTunnel();
         }
         if (result == null) {
-            result = emptyList();
+            result = emptyMap();
         }
         return result;
     }
@@ -627,9 +632,9 @@ public final class ItmUtils {
 
     private static List<String> getAllInternalTunnlInterfacesFromDS(DataBroker broker) {
         List<String> tunnelList = new ArrayList<>();
-        List<InternalTunnel> internalTunnels = getAllInternalTunnels(broker);
+        Map<InternalTunnelKey, InternalTunnel> internalTunnels = getAllInternalTunnels(broker);
         if (internalTunnels != null) {
-            for (InternalTunnel tunnel : internalTunnels) {
+            for (InternalTunnel tunnel : internalTunnels.values()) {
                 List<String> tunnelInterfaceNames = tunnel.getTunnelInterfaceNames();
                 if (tunnelInterfaceNames != null) {
                     for (String tunnelInterfaceName : tunnelInterfaceNames) {
@@ -643,9 +648,9 @@ public final class ItmUtils {
     }
 
     private static ExternalTunnel getExternalTunnelFromDS(String interfaceName, DataBroker broker) {
-        List<ExternalTunnel> externalTunnels = getAllExternalTunnels(broker);
+        Map<ExternalTunnelKey, ExternalTunnel> externalTunnels = getAllExternalTunnels(broker);
         if (externalTunnels != null) {
-            for (ExternalTunnel tunnel : externalTunnels) {
+            for (ExternalTunnel tunnel : externalTunnels.values()) {
                 String tunnelInterfaceName = tunnel.getTunnelInterfaceName();
                 if (tunnelInterfaceName != null && tunnelInterfaceName.equalsIgnoreCase(interfaceName)) {
                     LOG.trace("getExternalTunnelFromDS tunnelInterfaceName: {} ", tunnelInterfaceName);
@@ -665,15 +670,15 @@ public final class ItmUtils {
         return externalTunnel;
     }
 
-    private static List<ExternalTunnel> getAllExternalTunnels(DataBroker dataBroker) {
-        List<ExternalTunnel> result = null;
+    private static Map<ExternalTunnelKey, ExternalTunnel> getAllExternalTunnels(DataBroker dataBroker) {
+        Map<ExternalTunnelKey, ExternalTunnel> result = null;
         InstanceIdentifier<ExternalTunnelList> iid = InstanceIdentifier.builder(ExternalTunnelList.class).build();
         Optional<ExternalTunnelList> tunnelList = read(LogicalDatastoreType.CONFIGURATION, iid, dataBroker);
         if (tunnelList.isPresent()) {
             result = tunnelList.get().getExternalTunnel();
         }
         if (result == null) {
-            result = emptyList();
+            result = emptyMap();
         }
         return result;
     }
@@ -722,10 +727,11 @@ public final class ItmUtils {
         return value == null ? false : value;
     }
 
-    public static <T> List<T> getIntersection(List<T> list1, List<T> list2) {
-        List<T> list = new ArrayList<>();
-        for (T iter : list1) {
-            if (list2.contains(iter)) {
+    public static List<TzMembership> getIntersection(Map<TzMembershipKey, TzMembership> list1,
+                                                     Map<TzMembershipKey, TzMembership> list2) {
+        List<TzMembership> list = new ArrayList<>();
+        for (TzMembership iter : list1.values()) {
+            if (list2.values().contains(iter)) {
                 list.add(iter);
             }
         }
@@ -895,10 +901,11 @@ public final class ItmUtils {
         return TUNNEL_TYPE_MAP.get(tunnelType);
     }
 
-    public static List<TzMembership> removeTransportZoneMembership(TunnelEndPoints endPts, List<TzMembership> zones) {
+    public static List<TzMembership> removeTransportZoneMembership(TunnelEndPoints endPts, Map<TzMembershipKey,
+            TzMembership> zones) {
         LOG.trace(" RemoveTransportZoneMembership TEPs {}, Membership to be removed {} ", endPts, zones);
-        List<TzMembership> existingTzList = new ArrayList<>(endPts.nonnullTzMembership());
-        for (TzMembership membership : zones) {
+        List<TzMembership> existingTzList = new ArrayList<>(endPts.nonnullTzMembership().values());
+        for (TzMembership membership : zones.values()) {
             existingTzList.remove(new TzMembershipBuilder().setZoneName(membership.getZoneName()).build());
         }
         LOG.debug("Modified Membership List {}", existingTzList);
@@ -906,21 +913,21 @@ public final class ItmUtils {
     }
 
     @NonNull
-    public static List<TzMembership> getOriginalTzMembership(TunnelEndPoints srcTep, Uint64 dpnId,
+    public static  Map<TzMembershipKey, TzMembership> getOriginalTzMembership(TunnelEndPoints srcTep, Uint64 dpnId,
                                                              Collection<DPNTEPsInfo> meshedDpnList) {
         LOG.trace("Original Membership for source DPN {}, source TEP {}", dpnId, srcTep);
         for (DPNTEPsInfo dstDpn : meshedDpnList) {
             if (dpnId.equals(dstDpn.getDPNID())) {
                 for (TunnelEndPoints tep : dstDpn.nonnullTunnelEndPoints()) {
                     if (Objects.equals(tep.getIpAddress(), srcTep.getIpAddress())) {
-                        List<TzMembership> tzMemberships = tep.nonnullTzMembership();
+                        @NonNull Map<TzMembershipKey, TzMembership> tzMemberships = tep.nonnullTzMembership();
                         LOG.debug("Original Membership size {}", tzMemberships.size());
                         return tzMemberships;
                     }
                 }
             }
         }
-        return emptyList();
+        return emptyMap();
     }
 
     public static StateTunnelList buildStateTunnelList(StateTunnelListKey tlKey, String name, boolean state,
@@ -993,9 +1000,9 @@ public final class ItmUtils {
     }
 
     private static InternalTunnel getInternalTunnelFromDS(String interfaceName, DataBroker broker) {
-        List<InternalTunnel> internalTunnels = getAllInternalTunnels(broker);
+        Map<InternalTunnelKey, InternalTunnel> internalTunnels = getAllInternalTunnels(broker);
         if (internalTunnels != null) {
-            for (InternalTunnel tunnel : internalTunnels) {
+            for (InternalTunnel tunnel : internalTunnels.values()) {
                 List<String> tunnelInterfaceNames = tunnel.getTunnelInterfaceNames();
                 if (tunnelInterfaceNames != null) {
                     for (String tunnelInterfaceName : tunnelInterfaceNames) {
@@ -1059,7 +1066,7 @@ public final class ItmUtils {
         InstanceIdentifier<DpnEndpoints> iid = InstanceIdentifier.builder(DpnEndpoints.class).build();
         Optional<DpnEndpoints> dpnEndpoints = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, iid, dataBroker);
         if (dpnEndpoints.isPresent()) {
-            return new ArrayList<>(dpnEndpoints.get().getDPNTEPsInfo());
+            return new ArrayList<>(dpnEndpoints.get().getDPNTEPsInfo().values());
         } else {
             return new ArrayList<>();
         }
@@ -1105,9 +1112,9 @@ public final class ItmUtils {
         if (transportZoneOptional.isPresent()) {
             TransportZone transportZone = transportZoneOptional.get();
             if (transportZone.getVteps() != null && !transportZone.getVteps().isEmpty()) {
-                List<Vteps> vtepsList = transportZone.getVteps();
+                @Nullable Map<VtepsKey, Vteps> vtepsList = transportZone.getVteps();
                 if (vtepsList != null && !vtepsList.isEmpty()) {
-                    for (Vteps vtep : vtepsList) {
+                    for (Vteps vtep : vtepsList.values()) {
                         listOfDpId.add(vtep.getDpnId());
                     }
                 }
index a99928dfd7d94b51dbfaf93fc274b9d47afbc128..e7506d8b097aa960f1096d019e4e5d892b066907 100644 (file)
@@ -11,9 +11,11 @@ import com.google.common.util.concurrent.ListenableFuture;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.Callable;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
 import org.opendaylight.genius.itm.cache.BfdStateCache;
@@ -35,6 +37,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tun
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatusKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
@@ -150,9 +153,10 @@ public class TerminationPointStateListener
         if (!DirectTunnelUtils.bfdMonitoringEnabled(terminationPoint.getInterfaceBfd())) {
             return Interface.OperStatus.Up;
         }
-        List<InterfaceBfdStatus> tunnelBfdStatus = terminationPoint.getInterfaceBfdStatus();
+        @Nullable Map<InterfaceBfdStatusKey, InterfaceBfdStatus> tunnelBfdStatus =
+                terminationPoint.getInterfaceBfdStatus();
         if (tunnelBfdStatus != null && !tunnelBfdStatus.isEmpty()) {
-            for (InterfaceBfdStatus bfdState : tunnelBfdStatus) {
+            for (InterfaceBfdStatus bfdState : tunnelBfdStatus.values()) {
                 if (DirectTunnelUtils.BFD_OP_STATE.equalsIgnoreCase(bfdState.getBfdStatusKey())) {
                     String bfdOpState = bfdState.getBfdStatusValue();
                     return DirectTunnelUtils.BFD_STATE_UP.equalsIgnoreCase(bfdOpState)
@@ -173,7 +177,7 @@ public class TerminationPointStateListener
         LOG.debug("updating tep interface state as {} for {}", operStatus.name(), interfaceName);
         StateTunnelListBuilder stateTnlBuilder = new StateTunnelListBuilder().withKey(stateTnlKey);
         stateTnlBuilder.setOperState(operStatus);
-        transaction.merge(LogicalDatastoreType.OPERATIONAL, stateTnlII, stateTnlBuilder.build(), false);
+        transaction.mergeParentStructureMerge(LogicalDatastoreType.OPERATIONAL, stateTnlII, stateTnlBuilder.build());
     }
 
     private class RendererTunnelStateUpdateWorker implements Callable<List<? extends ListenableFuture<?>>> {
index dd2133001d08204cec803d762d53a3304df2e008..08b8e50bf538e261c593461a014ff1a8ab65e5f5 100644 (file)
@@ -11,9 +11,11 @@ import com.google.common.util.concurrent.ListenableFuture;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.Callable;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
 import org.opendaylight.genius.itm.cache.DpnTepStateCache;
@@ -30,6 +32,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.meta.rev171210.b
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.meta.rev171210.bridge.tunnel.info.OvsBridgeEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.meta.rev171210.bridge.tunnel.info.OvsBridgeEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.meta.rev171210.bridge.tunnel.info.ovs.bridge.entry.OvsBridgeTunnelEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.meta.rev171210.bridge.tunnel.info.ovs.bridge.entry.OvsBridgeTunnelEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.meta.rev171210.ovs.bridge.ref.info.OvsBridgeRefEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.meta.rev171210.ovs.bridge.ref.info.OvsBridgeRefEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.meta.rev171210.ovs.bridge.ref.info.OvsBridgeRefEntryKey;
@@ -184,7 +187,8 @@ public class TunnelTopologyStateListener extends AbstractClusteredSyncDataTreeCh
         OvsBridgeRefEntryBuilder tunnelDpnBridgeEntryBuilder =
                 new OvsBridgeRefEntryBuilder().withKey(bridgeRefEntryKey).setDpid(dpnId)
                         .setOvsBridgeReference(new OvsdbBridgeRef(bridgeIid));
-        tx.put(LogicalDatastoreType.OPERATIONAL, bridgeEntryId, tunnelDpnBridgeEntryBuilder.build(), true);
+        tx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, bridgeEntryId,
+                tunnelDpnBridgeEntryBuilder.build());
     }
 
     private void deleteOvsBridgeRefEntry(Uint64 dpnId, WriteTransaction tx) {
@@ -203,7 +207,8 @@ public class TunnelTopologyStateListener extends AbstractClusteredSyncDataTreeCh
 
         OvsBridgeEntryBuilder bridgeEntryBuilder = new OvsBridgeEntryBuilder().withKey(bridgeEntryKey)
                 .setOvsBridgeReference(ovsdbBridgeRef);
-        tx.merge(LogicalDatastoreType.CONFIGURATION, bridgeEntryInstanceIdentifier, bridgeEntryBuilder.build(), true);
+        tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, bridgeEntryInstanceIdentifier,
+                bridgeEntryBuilder.build());
     }
 
     /*
@@ -214,9 +219,10 @@ public class TunnelTopologyStateListener extends AbstractClusteredSyncDataTreeCh
                                      OvsdbBridgeAugmentation bridgeNew) {
         String bridgeName = bridgeNew.getBridgeName().getValue();
         LOG.debug("adding all ports to bridge: {}", bridgeName);
-        List<OvsBridgeTunnelEntry> bridgeInterfaceEntries = bridgeEntry.getOvsBridgeTunnelEntry();
+        @Nullable Map<OvsBridgeTunnelEntryKey, OvsBridgeTunnelEntry> bridgeInterfaceEntries =
+                bridgeEntry.getOvsBridgeTunnelEntry();
         if (bridgeInterfaceEntries != null) {
-            for (OvsBridgeTunnelEntry bridgeInterfaceEntry : bridgeInterfaceEntries) {
+            for (OvsBridgeTunnelEntry bridgeInterfaceEntry : bridgeInterfaceEntries.values()) {
                 String portName = bridgeInterfaceEntry.getTunnelName();
                 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
                         .ietf.interfaces.rev140508.interfaces.Interface iface =
index eb5743fb011e74229074b1b8e22399201a6ffdc7..6111ec4dd02a2134027d5b24de90e311f2e46230 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.util.concurrent.ListenableFuture;
 import edu.umd.cs.findbugs.annotations.CheckReturnValue;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -54,6 +53,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdOutput;
@@ -319,9 +320,9 @@ public final class DirectTunnelUtils {
         return bfdBuilder.build();
     }
 
-    public static boolean bfdMonitoringEnabled(List<InterfaceBfd> interfaceBfds) {
+    public static boolean bfdMonitoringEnabled(Map<InterfaceBfdKey, InterfaceBfd> interfaceBfds) {
         if (interfaceBfds != null && !interfaceBfds.isEmpty()) {
-            for (InterfaceBfd interfaceBfd : interfaceBfds) {
+            for (InterfaceBfd interfaceBfd : interfaceBfds.values()) {
                 if (BFD_ENABLE_KEY.equalsIgnoreCase(interfaceBfd.getBfdKey())) {
                     return BFD_ENABLE_VALUE.equalsIgnoreCase(interfaceBfd.getBfdValue());
                 }
@@ -419,7 +420,8 @@ public final class DirectTunnelUtils {
         String flowRef = getTunnelInterfaceFlowRef(dpnId, NwConstants.EGRESS_TUNNEL_TABLE, interfaceName);
         Flow egressFlow = MDSALUtil.buildFlowNew(NwConstants.EGRESS_TUNNEL_TABLE, flowRef, 5, flowRef, 0, 0,
             NwConstants.COOKIE_ITM_EGRESS_TUNNEL_TABLE, matches,
-            Collections.singletonList(MDSALUtil.buildApplyActionsInstruction(MDSALUtil.buildActions(actions))));
+                (Map<InstructionKey, Instruction>)(MDSALUtil.buildApplyActionsInstruction(MDSALUtil
+                        .buildActions(actions))));
         mdsalApiManager.addFlow(tx, dpnId, egressFlow);
     }
 
index 98dd986ff41df58541519df639101ee43818c814..0a13ed9af59ded6561477167956f7a934bc3f5f6 100644 (file)
@@ -10,9 +10,11 @@ package org.opendaylight.genius.itm.listeners;
 
 import java.time.Duration;
 import java.util.List;
+import java.util.Map;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.datastoreutils.listeners.DataTreeEventCallbackRegistrar;
 import org.opendaylight.genius.itm.commons.OvsdbTepInfo;
 import org.opendaylight.genius.itm.confighelpers.OvsdbTepAddWorker;
@@ -37,7 +39,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIds;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIdsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchOtherConfigs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchOtherConfigsKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
@@ -350,7 +354,8 @@ public class OvsdbNodeListener extends AbstractSyncDataTreeChangeListener<Node>
             return null;
         }
 
-        List<OpenvswitchOtherConfigs> ovsdbNodeOtherConfigsList = ovsdbNodeAugmentation.getOpenvswitchOtherConfigs();
+        @Nullable Map<OpenvswitchOtherConfigsKey, OpenvswitchOtherConfigs> ovsdbNodeOtherConfigsList =
+                ovsdbNodeAugmentation.getOpenvswitchOtherConfigs();
         if (ovsdbNodeOtherConfigsList == null) {
             //Local IP is not configured
             LOG.debug("OtherConfigs list does not exist in the OVSDB Node Augmentation.");
@@ -359,18 +364,19 @@ public class OvsdbNodeListener extends AbstractSyncDataTreeChangeListener<Node>
 
         OvsdbTepInfo ovsdbTepInfoObj = new OvsdbTepInfo();
 
-        for (OpenvswitchOtherConfigs otherConfigs : ovsdbNodeOtherConfigsList) {
+        for (OpenvswitchOtherConfigs otherConfigs : ovsdbNodeOtherConfigsList.values()) {
             if (ITMConstants.OTH_CFG_TEP_PARAM_KEY_LOCAL_IP.equals(otherConfigs.getOtherConfigKey())) {
                 String tepIp = otherConfigs.getOtherConfigValue();
                 ovsdbTepInfoObj.setLocalIp(tepIp);
             }
         }
 
-        List<OpenvswitchExternalIds> ovsdbNodeExternalIdsList = ovsdbNodeAugmentation.getOpenvswitchExternalIds();
+        @Nullable Map<OpenvswitchExternalIdsKey, OpenvswitchExternalIds> ovsdbNodeExternalIdsList =
+                ovsdbNodeAugmentation.getOpenvswitchExternalIds();
         if (ovsdbNodeExternalIdsList == null) {
             LOG.debug("ExternalIds list does not exist in the OVSDB Node Augmentation.");
         } else {
-            for (OpenvswitchExternalIds externalId : ovsdbNodeExternalIdsList) {
+            for (OpenvswitchExternalIds externalId : ovsdbNodeExternalIdsList.values()) {
                 switch (externalId.getExternalIdKey()) {
                     case ITMConstants.EXT_ID_TEP_PARAM_KEY_TZNAME:
                         ovsdbTepInfoObj.setTzName(externalId.getExternalIdValue());
index aafcaedab3c6a59a26ca214450445f0a7db7bad6..ec2e7c7f1b6aa2f1ec950dd6677ed434f43b3b20 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.genius.itm.listeners;
 import com.google.common.util.concurrent.FluentFuture;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -20,6 +21,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.cloudscaler.api.TombstonedNodeManager;
 import org.opendaylight.genius.datastoreutils.listeners.DataTreeEventCallbackRegistrar;
 import org.opendaylight.genius.infra.Datastore;
@@ -69,6 +71,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.ho
 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.transport.zone.DeviceVteps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.DeviceVtepsKey;
 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;
@@ -200,7 +203,8 @@ public class TransportZoneListener extends AbstractSyncDataTreeChangeListener<Tr
                                 itmInternalTunnelDeleteWorker, dpnTEPsInfoCache, txRunner, itmConfig));
 
                 if (transportZone.getVteps() != null && !transportZone.getVteps().isEmpty()) {
-                    List<UnknownVteps> unknownVteps = convertVtepListToUnknownVtepList(transportZone.getVteps());
+                    Map<UnknownVtepsKey, UnknownVteps> unknownVteps =
+                            convertVtepListToUnknownVtepList(transportZone.getVteps());
                     LOG.trace("Moving Transport Zone {} to tepsInNotHostedTransportZone Oper Ds.",
                             transportZone.getZoneName());
                     jobCoordinator.enqueueJob(transportZone.getZoneName(),
@@ -329,10 +333,10 @@ public class TransportZoneListener extends AbstractSyncDataTreeChangeListener<Tr
         if (tepsInNotHostedTransportZone == null) {
             return notHostedDpnTepInfo;
         }
-        List<UnknownVteps> unVtepsLst = tepsInNotHostedTransportZone.getUnknownVteps();
+        @Nullable Map<UnknownVtepsKey, UnknownVteps> unVtepsLst = tepsInNotHostedTransportZone.getUnknownVteps();
         List<Vteps> vtepsList = new ArrayList<>();
         if (unVtepsLst != null && !unVtepsLst.isEmpty()) {
-            for (UnknownVteps vteps : unVtepsLst) {
+            for (UnknownVteps vteps : unVtepsLst.values()) {
                 Uint64 dpnID = vteps.getDpnId();
                 IpAddress ipAddress = vteps.getIpAddress();
                 String portName = itmConfig.getPortname() == null ? ITMConstants.DUMMY_PORT : itmConfig.getPortname();
@@ -397,14 +401,15 @@ public class TransportZoneListener extends AbstractSyncDataTreeChangeListener<Tr
         return vtepObj;
     }
 
-    private  List<UnknownVteps> convertVtepListToUnknownVtepList(List<Vteps> vteps) {
-        List<UnknownVteps> unknownVtepsList = new ArrayList<>();
-        for (Vteps vtep : vteps) {
+    private  Map<UnknownVtepsKey, UnknownVteps> convertVtepListToUnknownVtepList(Map<VtepsKey, Vteps> vteps) {
+        Map<UnknownVtepsKey, UnknownVteps> unknownVtepsList = new HashMap<>();
+        for (Vteps vtep : vteps.values()) {
             UnknownVtepsKey vtepkey = new UnknownVtepsKey(vtep.getDpnId());
             UnknownVteps vtepObj =
                     new UnknownVtepsBuilder().setDpnId(vtep.getDpnId()).setIpAddress(vtep.getIpAddress())
                             .withKey(vtepkey).setOfTunnel(vtep.isOptionOfTunnel()).build();
-            unknownVtepsList.add(vtepObj);
+            //unknownVtepsList.values().add(vtepObj);
+            unknownVtepsList.put(vtepObj.key(),vtepObj);
         }
         return unknownVtepsList;
     }
@@ -433,13 +438,13 @@ public class TransportZoneListener extends AbstractSyncDataTreeChangeListener<Tr
         List<TzMembership> zones = ItmUtils.createTransportZoneMembership(transportZone.getZoneName());
         Class<? extends TunnelTypeBase> tunnelType = transportZone.getTunnelType();
         LOG.trace("Transport Zone_name: {}", transportZone.getZoneName());
-        List<Vteps> vtepsList = transportZone.getVteps();
+        @Nullable Map<VtepsKey, Vteps> vtepsList = transportZone.getVteps();
 
         String portName = itmConfig.getPortname() == null ? ITMConstants.DUMMY_PORT : itmConfig.getPortname();
         int vlanId = itmConfig.getVlanId() != null ? itmConfig.getVlanId().toJava() : ITMConstants.DUMMY_VLANID;
 
         if (vtepsList != null && !vtepsList.isEmpty()) {
-            for (Vteps vteps : vtepsList) {
+            for (Vteps vteps : vtepsList.values()) {
                 Uint64 dpnID = vteps.getDpnId();
                 IpAddress ipAddress = vteps.getIpAddress();
                 boolean useOfTunnel = itmConfig.isUseOfTunnels();
@@ -481,9 +486,9 @@ public class TransportZoneListener extends AbstractSyncDataTreeChangeListener<Tr
         String zoneName = transportZone.getZoneName();
         Class<? extends TunnelTypeBase> tunnelType = transportZone.getTunnelType();
         LOG.trace("Transport Zone_name: {}", zoneName);
-        List<DeviceVteps> deviceVtepsList = transportZone.getDeviceVteps();
+        @Nullable Map<DeviceVtepsKey, DeviceVteps> deviceVtepsList = transportZone.getDeviceVteps();
         if (deviceVtepsList != null) {
-            for (DeviceVteps vteps : deviceVtepsList) {
+            for (DeviceVteps vteps : deviceVtepsList.values()) {
                 String topologyId = vteps.getTopologyId();
                 String nodeId = vteps.getNodeId();
                 IpAddress ipAddress = vteps.getIpAddress();
index 1e259d2c031cf064021fe5dfcb0c56fb01a645ac..06c23f92cc1a21116e950c75a7c6fd65e299464c 100644 (file)
@@ -378,8 +378,9 @@ public class ItmTunnelEventListener extends AbstractSyncDataTreeChangeListener<S
             LOG.debug(" Tunnel events are processed out order for {} hence updating it from cache",
                     add.getTunnelInterfaceName());
             return Collections.singletonList(txRunner
-                .callWithNewWriteOnlyTransactionAndSubmit(Datastore.OPERATIONAL, tx -> tx.merge(identifier,
-                    new StateTunnelListBuilder(add).setOperState(operStatus).build(), false)));
+                .callWithNewWriteOnlyTransactionAndSubmit(Datastore.OPERATIONAL,
+                    tx -> tx.mergeParentStructureMerge(identifier,
+                        new StateTunnelListBuilder(add).setOperState(operStatus).build())));
         }
     }
 }
index a525412d05b597e50c68f7ebb20b62c6fd59a687..a967ffff2b6f4609b9f0b0e4f98350dacbbbce9d 100644 (file)
@@ -11,10 +11,12 @@ import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.cloudscaler.api.TombstonedNodeManager;
 import org.opendaylight.genius.datastoreutils.listeners.DataTreeEventCallbackRegistrar;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
@@ -49,7 +51,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.tunnel.end.points.TzMembership;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.teps.state.DpnsTeps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.teps.state.dpns.teps.RemoteDpns;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.teps.state.dpns.teps.RemoteDpnsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnelKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
@@ -153,7 +157,7 @@ public class ItmTepInstanceRecoveryHandler implements ServiceRecoveryInterface {
         } else {
             tepsToRecover.add(dpnTepsToRecover);
             //List of Internel tunnels
-            List<InternalTunnel> tunnelList = ItmUtils.getInternalTunnelsFromCache(dataBroker);
+            Map<InternalTunnelKey, InternalTunnel> tunnelList = ItmUtils.getInternalTunnelsFromCache(dataBroker);
             List<String> interfaceListToRecover = new ArrayList<>();
             LOG.debug("List of tunnel interfaces: {}" , tunnelList);
 
@@ -167,8 +171,8 @@ public class ItmTepInstanceRecoveryHandler implements ServiceRecoveryInterface {
                 if (interfaceManager.isItmDirectTunnelsEnabled()) {
                     Collection<DpnsTeps> dpnsTeps = dpnTepStateCache.getAllPresent();
                     for (DpnsTeps dpnTep : dpnsTeps) {
-                        List<RemoteDpns> rmtdpns = dpnTep.getRemoteDpns();
-                        for (RemoteDpns remoteDpn : rmtdpns) {
+                        @Nullable Map<RemoteDpnsKey, RemoteDpns> rmtdpns = dpnTep.getRemoteDpns();
+                        for (RemoteDpns remoteDpn : rmtdpns.values()) {
                             if (remoteDpn.getDestinationDpnId().equals(dpnTepsToRecover.getDPNID())
                                     || dpnTep.getSourceDpnId().equals(dpnTepsToRecover.getDPNID())) {
                                 eventRegistrationCount.incrementAndGet();
@@ -178,7 +182,7 @@ public class ItmTepInstanceRecoveryHandler implements ServiceRecoveryInterface {
                     }
                     LOG.trace("List of tunnels to be recovered : {}", interfaceListToRecover);
                 } else {
-                    tunnelList.stream().filter(internalTunnel -> Objects.equals(internalTunnel
+                    tunnelList.values().stream().filter(internalTunnel -> Objects.equals(internalTunnel
                             .getDestinationDPN(), dpnTepsToRecover.getDPNID()) || Objects.equals(
                             internalTunnel.getSourceDPN(), dpnTepsToRecover.getDPNID())).forEach(internalTunnel -> {
                                 eventRegistrationCount.incrementAndGet();
@@ -228,7 +232,7 @@ public class ItmTepInstanceRecoveryHandler implements ServiceRecoveryInterface {
         String portName = itmConfig.getPortname() == null ? ITMConstants.DUMMY_PORT : itmConfig.getPortname();
         int vlanId = itmConfig.getVlanId() != null ? itmConfig.getVlanId().toJava() : ITMConstants.DUMMY_VLANID;
 
-        for (Vteps vtep : transportZone.getVteps()) {
+        for (Vteps vtep : transportZone.getVteps().values()) {
             if (ipAddress.equals(vtep.getIpAddress().stringValue())) {
 
                 List<TzMembership> zones = ItmUtils.createTransportZoneMembership(tzName);
index cfab007dedfca2b215887038fbe1fb29dc6b1fbd..fa35b1ad494fbc3643df01e5b75bc58bdfec204c 100644 (file)
@@ -12,9 +12,11 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.genius.datastoreutils.listeners.DataTreeEventCallbackRegistrar;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
@@ -33,6 +35,7 @@ import org.opendaylight.serviceutils.tools.listener.AbstractSyncDataTreeChangeLi
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelsState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.teps.state.DpnsTeps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.teps.state.dpns.teps.RemoteDpns;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.teps.state.dpns.teps.RemoteDpnsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
@@ -104,8 +107,8 @@ public class ItmTzInstanceRecoveryHandler extends
             Collection<DpnsTeps> dpnsTeps = dpnTepStateCache.getAllPresent();
             List<Uint64> listOfDpnIds = ItmUtils.getDpIdFromTransportzone(dataBroker, entityId);
             for (DpnsTeps dpnTep : dpnsTeps) {
-                List<RemoteDpns> rmtdpns = dpnTep.getRemoteDpns();
-                for (RemoteDpns remoteDpn : rmtdpns) {
+                @Nullable Map<RemoteDpnsKey, RemoteDpns> rmtdpns = dpnTep.getRemoteDpns();
+                for (RemoteDpns remoteDpn : rmtdpns.values()) {
                     if (listOfDpnIds.contains(remoteDpn.getDestinationDpnId())) {
                         tunnelList.add(remoteDpn.getTunnelName());
                     }
index 3559effc8ee0166bc95255fa2e2078274bd12e4a..4232ea0cef39148f85d332734699b6122280dfa8 100644 (file)
@@ -407,7 +407,7 @@ public class ItmManagerRpcService implements ItmRpcService {
                 .child(DpnsTeps.class, new DpnsTepsKey(srcDpnId))
                 .child(RemoteDpns.class,
                         new RemoteDpnsKey(destDpnId)).build();
-        tx.merge(iid, remoteDpn, true);
+        tx.mergeParentStructureMerge(iid, remoteDpn);
     }
 
     @Override
@@ -515,7 +515,7 @@ public class ItmManagerRpcService implements ItmRpcService {
             tx -> {
                 externalTunnelAddWorker.buildTunnelsToExternalEndPoint(meshedDpnList, input.getDestinationIp(),
                     input.getTunnelType(), tx);
-                tx.put(extPath, dcGatewayIp, true);
+                tx.mergeParentStructurePut(extPath, dcGatewayIp);
             }
         );
         future.addCallback(new FutureCallback<Void>() {
@@ -821,8 +821,8 @@ public class ItmManagerRpcService implements ItmRpcService {
                             .setNodeId(nodeId).setTopologyId(input.getTopologyId()).build();
                     //TO DO: add retry if it fails
                     FluentFuture<Void> future = retryingTxRunner
-                            .callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION, tx -> tx.put(path,
-                                    deviceVtep, true));
+                            .callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
+                                tx -> tx.mergeParentStructurePut(path, deviceVtep));
 
                     future.addCallback(new FutureCallback<Void>() {
 
@@ -896,7 +896,7 @@ public class ItmManagerRpcService implements ItmRpcService {
                 FluentFuture<Void> future =
                     retryingTxRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
                         tx -> {
-                            tx.put(path, deviceVtep, true);
+                            tx.mergeParentStructurePut(path, deviceVtep);
                             if (nodeId.size() == 2) {
                                 LOG.trace("second node-id {}", nodeId.get(1));
                                 DeviceVtepsKey deviceVtepKey2 = new DeviceVtepsKey(hwIp, nodeId.get(1));
@@ -908,7 +908,7 @@ public class ItmManagerRpcService implements ItmRpcService {
                                         .setIpAddress(hwIp).setNodeId(nodeId.get(1))
                                         .setTopologyId(input.getTopologyId()).build();
                                 LOG.trace("writing {}", deviceVtep2);
-                                tx.put(path2, deviceVtep2, true);
+                                tx.mergeParentStructurePut(path2, deviceVtep2);
                             }
                         });
                 future.addCallback(new FutureCallback<Void>() {
@@ -1025,16 +1025,16 @@ public class ItmManagerRpcService implements ItmRpcService {
     public ListenableFuture<RpcResult<IsDcgwPresentOutput>> isDcgwPresent(IsDcgwPresentInput input) {
         RpcResultBuilder<IsDcgwPresentOutput> resultBld = RpcResultBuilder.success();
 
-        List<DcGatewayIp> dcGatewayIpList = new ArrayList<>();
+        Map<DcGatewayIpKey, DcGatewayIp> dcGatewayIpList = new HashMap<>();
         txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION,
-            tx -> dcGatewayIpList.addAll(getDcGatewayIpList(tx))).isDone();
+            tx -> dcGatewayIpList.values().addAll(getDcGatewayIpList(tx).values())).isDone();
 
         String dcgwIpStr = input.getDcgwIp();
         IpAddress dcgwIpAddr = IpAddressBuilder.getDefaultInstance(dcgwIpStr);
         long retVal;
 
         if (!dcGatewayIpList.isEmpty()
-                && dcGatewayIpList.stream().anyMatch(gwIp -> Objects.equal(gwIp.getIpAddress(), dcgwIpAddr))) {
+                && dcGatewayIpList.values().stream().anyMatch(gwIp -> Objects.equal(gwIp.getIpAddress(), dcgwIpAddr))) {
             //Match found
             retVal = 1;
             IsDcgwPresentOutputBuilder output = new IsDcgwPresentOutputBuilder().setRetVal(retVal);
@@ -1102,7 +1102,7 @@ public class ItmManagerRpcService implements ItmRpcService {
         }
         Map<Uint64, ComputesBuilder> result = new HashMap<>();
         for (TransportZone transportZone : transportZones.getTransportZone()) {
-            for (Vteps vtep : transportZone.getVteps()) {
+            for (Vteps vtep : transportZone.getVteps().values()) {
                 if (dpnIds.contains(vtep.getDpnId())) {
                     result.putIfAbsent(vtep.getDpnId(),
                             new ComputesBuilder()
@@ -1129,7 +1129,7 @@ public class ItmManagerRpcService implements ItmRpcService {
             throw new IllegalStateException("Failed to find operational inventory nodes datastore");
         }
         Map<String, Uint64> result = new HashMap<>();
-        for (Node node : operInventoryNodes.getNode()) {
+        for (Node node : operInventoryNodes.getNode().values()) {
             String name = node.augmentation(FlowCapableNode.class).getDescription();
             if (nodeNames.contains(name)) {
                 String[] nodeId = node.getId().getValue().split(":");
@@ -1196,9 +1196,10 @@ public class ItmManagerRpcService implements ItmRpcService {
                 .setAction(result.stream().map(ActionInfo::buildAction).collect(Collectors.toList())).build());
     }
 
-    public static List<DcGatewayIp> getDcGatewayIpList(TypedReadWriteTransaction<Datastore.Configuration> tx)
+    public static Map<DcGatewayIpKey, DcGatewayIp>
+        getDcGatewayIpList(TypedReadWriteTransaction<Datastore.Configuration> tx)
             throws ExecutionException, InterruptedException {
-        List<DcGatewayIp> dcGatewayIpList = new ArrayList<>();
+        Map<DcGatewayIpKey, DcGatewayIp> dcGatewayIpList = new HashMap<>();
         FluentFuture<Optional<DcGatewayIpList>> future =
                 tx.read(InstanceIdentifier.builder(DcGatewayIpList.class).build());
         future.addCallback(new FutureCallback<Optional<DcGatewayIpList>>() {
@@ -1210,7 +1211,7 @@ public class ItmManagerRpcService implements ItmRpcService {
                     if (opt.isPresent()) {
                         DcGatewayIpList list = opt.get();
                         if (list != null) {
-                            dcGatewayIpList.addAll(list.getDcGatewayIp());
+                            dcGatewayIpList.values().addAll(list.getDcGatewayIp().values());
                         }
                     }
                 } catch (ExecutionException | InterruptedException e) {
index 586eccf37d82fd04c4eb1643b28b61b8bd6a8ce0..bee35c5ee505451acbb5084219a2785858ff1130 100644 (file)
@@ -104,6 +104,14 @@ public class TepCommandHelperTest {
     private TunnelMonitorParams tunnelMonitorParams = null;
     private Vteps vteps = null;
     private Vteps vtepsTest = null;
+    private TransportZone mergeTransportZone = null;
+    private TransportZone mergeTransportZoneGre = null;
+    private TransportZones mergeParentTransportZones = null;
+    private TransportZones mergeParentTransportZonesGre = null;
+    private Vteps mergeVteps = null;
+    private final List<Vteps> mergeVtepsList = new ArrayList<>();
+    private final List<TransportZone> mergeParentTransportZoneList = new ArrayList<>();
+    private final List<TransportZone> mergeParentTransportZoneListGre = new ArrayList<>();
     private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
             .Interface interfaceTest = null;
     private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface
@@ -210,6 +218,22 @@ public class TepCommandHelperTest {
         transportZoneList.add(transportZone);
         transportZones = new TransportZonesBuilder().setTransportZone(transportZoneList).build();
         transportZonesNew = new TransportZonesBuilder().setTransportZone(transportZoneListNew).build();
+        mergeVteps = new VtepsBuilder().setDpnId(dpId2)
+                .setIpAddress(ipAddress1).withKey(new VtepsKey(dpId1)).build();
+        mergeVtepsList.add(mergeVteps);
+        mergeTransportZone =
+                new TransportZoneBuilder().withKey(new TransportZoneKey(transportZone1))
+                        .setTunnelType(tunnelType1).setZoneName(transportZone1).setVteps(mergeVtepsList)
+                        .build();
+        mergeParentTransportZoneList.add(mergeTransportZone);
+        mergeParentTransportZones = new TransportZonesBuilder().setTransportZone(mergeParentTransportZoneList).build();
+        mergeTransportZoneGre =
+                new TransportZoneBuilder().withKey(new TransportZoneKey(transportZone1))
+                        .setTunnelType(tunnelType2).setZoneName(transportZone1).setVteps(mergeVtepsList)
+                        .build();
+        mergeParentTransportZoneListGre.add(mergeTransportZoneGre);
+        mergeParentTransportZonesGre = new TransportZonesBuilder().setTransportZone(mergeParentTransportZoneListGre)
+                .build();
         tunnelMonitorInterval = new TunnelMonitorIntervalBuilder().setInterval(10000).build();
         tunnelMonitorParams = new TunnelMonitorParamsBuilder().setEnabled(true).build();
         InternalTunnel internalTunnelTest = new InternalTunnelBuilder().setSourceDPN(dpId1).setDestinationDPN(dpId2)
@@ -330,8 +354,8 @@ public class TepCommandHelperTest {
         tepCommandHelper.configureTunnelMonitorInterval(interval);
 
         verify(mockReadTx).read(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier);
-        verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,tunnelMonitorIntervalIdentifier,
-                tunnelMonitor,true);
+        verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,
+                tunnelMonitorIntervalIdentifier, tunnelMonitor);
     }
 
     @Test
@@ -386,8 +410,8 @@ public class TepCommandHelperTest {
         tepCommandHelper.buildTeps();
 
         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
-        verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
-
+        verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,
+                mergeParentTransportZones);
     }
 
     @Test
@@ -404,7 +428,8 @@ public class TepCommandHelperTest {
         tepCommandHelper.buildTeps();
 
         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
-        verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
+        verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,
+                mergeParentTransportZonesGre);
 
     }
 
@@ -419,7 +444,8 @@ public class TepCommandHelperTest {
         tepCommandHelper.buildTeps();
 
         verify(mockReadTx, times(2)).read(LogicalDatastoreType.CONFIGURATION,transportZoneIdentifier);
-        verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,transportZonesNew,true);
+        verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,transportZonesIdentifier,
+                mergeParentTransportZones);
 
     }
 
index 66798a0205b0cf08833eeeb39507c7bc44e58498..b54c62345510442b1aa7a558f487f112401c88b6 100644 (file)
@@ -292,8 +292,8 @@ public class ItmExternalTunnelAddTest {
     public void testBuildTunnelsToExternalEndPoint() {
         externalTunnelAddWorker
             .buildTunnelsToExternalEndPoint(cfgdDpnListVxlan, ipAddress2, tunnelType1, typedWriteTransaction);
-        verify(typedWriteTransaction).merge(interfaceIdentifier, iface, true);
-        verify(typedWriteTransaction).merge(externalTunnelIdentifier, externalTunnel, true);
+        verify(typedWriteTransaction).mergeParentStructureMerge(interfaceIdentifier, iface);
+        verify(typedWriteTransaction).mergeParentStructureMerge(externalTunnelIdentifier, externalTunnel);
 
     }
 
@@ -302,8 +302,8 @@ public class ItmExternalTunnelAddTest {
     public void testBuildTunnelsFromDpnToExternalEndPoint() {
         externalTunnelAddWorker
             .buildTunnelsFromDpnToExternalEndPoint(bigIntegerList, ipAddress2, tunnelType1, typedWriteTransaction);
-        verify(typedWriteTransaction).merge(interfaceIdentifier, iface, true);
-        verify(typedWriteTransaction).merge(externalTunnelIdentifier, externalTunnel, true);
+        verify(typedWriteTransaction).mergeParentStructureMerge(interfaceIdentifier, iface);
+        verify(typedWriteTransaction).mergeParentStructureMerge(externalTunnelIdentifier, externalTunnel);
 
     }
 
@@ -393,18 +393,20 @@ public class ItmExternalTunnelAddTest {
         externalTunnelAddWorker.buildHwVtepsTunnels(cfgdDpnListVxlan, null, typedReadWriteTransaction);
         externalTunnelAddWorker.buildHwVtepsTunnels(null, cfgdHwVtepsList, typedReadWriteTransaction);
 
-        verify(typedReadWriteTransaction, times(2)).merge(ifIID1, extTunnelIf1, true);
-        verify(typedReadWriteTransaction, times(2)).merge(externalTunnelIdentifier1, externalTunnel1, true);
-        verify(typedReadWriteTransaction, times(2)).merge(ifIID2, hwTunnelIf2, true);
-        verify(typedReadWriteTransaction, times(2)).merge(externalTunnelIdentifier2, externalTunnel2, true);
-        verify(typedReadWriteTransaction).merge(ifIID3,extTunnelIf3,true);
-        verify(typedReadWriteTransaction).merge(externalTunnelIdentifier3, externalTunnel3, true);
-        verify(typedReadWriteTransaction).merge(ifIID4, hwTunnelIf4, true);
-        verify(typedReadWriteTransaction).merge(externalTunnelIdentifier4, externalTunnel4, true);
-        verify(typedReadWriteTransaction).merge(ifIID5, hwTunnelIf5, true);
-        verify(typedReadWriteTransaction).merge(externalTunnelIdentifier5, externalTunnel5, true);
-        verify(typedReadWriteTransaction).merge(ifIID6, hwTunnelIf6, true);
-        verify(typedReadWriteTransaction).merge(externalTunnelIdentifier6, externalTunnel6, true);
+        verify(typedReadWriteTransaction, times(2)).mergeParentStructureMerge(ifIID1, extTunnelIf1);
+        verify(typedReadWriteTransaction, times(2))
+                .mergeParentStructureMerge(externalTunnelIdentifier1, externalTunnel1);
+        verify(typedReadWriteTransaction, times(2)).mergeParentStructureMerge(ifIID2, hwTunnelIf2);
+        verify(typedReadWriteTransaction, times(2))
+                .mergeParentStructureMerge(externalTunnelIdentifier2, externalTunnel2);
+        verify(typedReadWriteTransaction).mergeParentStructureMerge(ifIID3,extTunnelIf3);
+        verify(typedReadWriteTransaction).mergeParentStructureMerge(externalTunnelIdentifier3, externalTunnel3);
+        verify(typedReadWriteTransaction).mergeParentStructureMerge(ifIID4, hwTunnelIf4);
+        verify(typedReadWriteTransaction).mergeParentStructureMerge(externalTunnelIdentifier4, externalTunnel4);
+        verify(typedReadWriteTransaction).mergeParentStructureMerge(ifIID5, hwTunnelIf5);
+        verify(typedReadWriteTransaction).mergeParentStructureMerge(externalTunnelIdentifier5, externalTunnel5);
+        verify(typedReadWriteTransaction).mergeParentStructureMerge(ifIID6, hwTunnelIf6);
+        verify(typedReadWriteTransaction).mergeParentStructureMerge(externalTunnelIdentifier6, externalTunnel6);
 
     }
 
index c6e90c4c44e8867f2a83f1e2d23a9cc10bad2b11..ce5e509e987fc5b3f5dc18c602e0c6751e6f7768 100644 (file)
@@ -283,10 +283,10 @@ public class ItmInternalTunnelAddTest {
         itmInternalTunnelAddWorker.buildAllTunnels(mdsalApiManager, cfgdDpnListVxlan, meshDpnListVxlan);
 
         //Add some verifications
-        verify(mockReadWriteTx).merge(LogicalDatastoreType.CONFIGURATION, internalTunnelIdentifierVxlan1,
-                internalTunnel1, true);
-        verify(mockReadWriteTx).merge(LogicalDatastoreType.CONFIGURATION, internalTunnelIdentifierVxlan2,
-                internalTunnel2, true);
+        verify(mockReadWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,
+                internalTunnelIdentifierVxlan1, internalTunnel1);
+        verify(mockReadWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,
+                internalTunnelIdentifierVxlan2, internalTunnel2);
         verify(mockReadWriteTx).merge(LogicalDatastoreType.CONFIGURATION, dpnEndpointsIdentifier,
                 dpnEndpointsVxlan);
     }
@@ -320,10 +320,10 @@ public class ItmInternalTunnelAddTest {
 
         itmInternalTunnelAddWorker.buildAllTunnels(mdsalApiManager, cfgdDpnListGre, meshDpnListGre);
 
-        verify(mockReadWriteTx).merge(LogicalDatastoreType.CONFIGURATION, internalTunnelIdentifierGre1,
-                internalTunnel1, true);
-        verify(mockReadWriteTx).merge(LogicalDatastoreType.CONFIGURATION, internalTunnelIdentifierGre2,
-                internalTunnel2, true);
+        verify(mockReadWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,
+                internalTunnelIdentifierGre1, internalTunnel1);
+        verify(mockReadWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,
+                internalTunnelIdentifierGre2, internalTunnel2);
         verify(mockReadWriteTx).merge(LogicalDatastoreType.CONFIGURATION, dpnEndpointsIdentifier,
                 dpnEndpointsGre);
     }
@@ -358,10 +358,10 @@ public class ItmInternalTunnelAddTest {
 
         itmInternalTunnelAddWorker.buildAllTunnels(mdsalApiManager, cfgdDpnListVxlan, meshDpnListGre);
 
-        verify(mockReadWriteTx).merge(LogicalDatastoreType.CONFIGURATION, internalTunnelIdentifierVxlan1,
-                internalTunnel1, true);
-        verify(mockReadWriteTx).merge(LogicalDatastoreType.CONFIGURATION, internalTunnelIdentifierGre2,
-                internalTunnel2, true);
+        verify(mockReadWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,
+                internalTunnelIdentifierVxlan1, internalTunnel1);
+        verify(mockReadWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,
+                internalTunnelIdentifierGre2, internalTunnel2);
         verify(mockReadWriteTx).merge(LogicalDatastoreType.CONFIGURATION, dpnEndpointsIdentifier,
                 dpnEndpointsVxlan);
     }
index 4bba968f068067dcc78994ac20b27de2406da3aa..06981acabbaeb9142c9c4335f6d392984f2ef13d 100644 (file)
@@ -332,23 +332,25 @@ public class ItmManagerRpcServiceTest {
 
         itmManagerRpcService.addExternalTunnelEndpoint(addExternalTunnelEndpointInput);
 
-        verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier, iface, true);
-        verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION, externalTunnelIdentifierNew,
-                externalTunnelNew,true);
+        verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier, iface);
+        verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, externalTunnelIdentifierNew,
+                externalTunnelNew);
     }
 
     @Test
     public void testAddL2GwDevice() {
         itmManagerRpcService.addL2GwDevice(addL2GwDeviceInput);
 
-        verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier, deviceVteps, true);
+        verify(mockWriteTx).mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier,
+                deviceVteps);
     }
 
     @Test
     public void testAddL2GwMlagDevice() {
         itmManagerRpcService.addL2GwMlagDevice(addL2GwMlagDeviceInput);
 
-        verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier, deviceVteps, true);
+        verify(mockWriteTx).mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, deviceVtepsIdentifier,
+                deviceVteps);
     }
 
     @Test
@@ -373,9 +375,9 @@ public class ItmManagerRpcServiceTest {
 
         itmManagerRpcService.buildExternalTunnelFromDpns(buildExternalTunnelFromDpnsInput);
 
-        verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,interfaceIdentifier,iface,true);
-        verify(mockWriteTx).merge(LogicalDatastoreType.CONFIGURATION,externalTunnelIdentifierNew,
-                externalTunnelNew,true);
+        verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,interfaceIdentifier,iface);
+        verify(mockWriteTx).mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION,externalTunnelIdentifierNew,
+                externalTunnelNew);
     }
 
     @Ignore
index ea357387bed14377e1c6fe77acbf3bbd6e77d3ca..275e8e91d12fb3d1b137445d2546a31ad20a7409 100644 (file)
@@ -494,7 +494,7 @@ public class ItmManagerRpcServiceTest {
     private <T extends DataObject> void syncWrite(InstanceIdentifier<T> path, T data) {
         try {
             txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION,
-                tx -> tx.put(path, data, true)).get();
+                tx -> tx.mergeParentStructurePut(path, data)).get();
         } catch (InterruptedException | ExecutionException e) {
             throw new RuntimeException(e.getMessage(), e);
         }
index b08757cc88aa3aac5363a05747cc71535d414852..e3e4e684d9027a51d4f552597089702be3285ae2 100644 (file)
@@ -14,9 +14,11 @@ import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import javax.inject.Inject;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -38,7 +40,6 @@ import org.opendaylight.infrautils.caches.testutils.CacheModule;
 import org.opendaylight.infrautils.inject.guice.testutils.GuiceRule;
 import org.opendaylight.infrautils.testutils.LogRule;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
@@ -48,6 +49,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfigBuilder;
 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.tepsinnothostedtransportzone.UnknownVteps;
+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;
@@ -154,14 +156,6 @@ public class ItmTepAutoConfigTest {
         // set def-tz-tunnel-type to VXLAN
         String defTzTunnelType = ITMConstants.TUNNEL_TYPE_VXLAN;
 
-        /*InstanceIdentifier<TransportZone> tzPath =
-                ItmUtils.getTZInstanceIdentifier(ITMConstants.DEFAULT_TRANSPORT_ZONE);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
-                        .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
-                        .withKey(new TransportZoneKey(ITMConstants.DEFAULT_TRANSPORT_ZONE))
-                        .build(), WriteTransaction.CREATE_MISSING_PARENTS)).get();*/
-
         InstanceIdentifier<TransportZone> tzonePath = processDefTzOnItmConfig(defTzEnabledFlag,
                 defTzTunnelType);
         Assert.assertNotNull(tzonePath);
@@ -180,11 +174,12 @@ public class ItmTepAutoConfigTest {
 
         InstanceIdentifier<TransportZone> tzPath =
                 ItmUtils.getTZInstanceIdentifier(ITMConstants.DEFAULT_TRANSPORT_ZONE);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath,
+                        new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
                         .setTunnelType(TunnelTypeGre.class)
                         .withKey(new TransportZoneKey(ITMConstants.DEFAULT_TRANSPORT_ZONE))
-                        .build(), WriteTransaction.CREATE_MISSING_PARENTS)).get();
+                        .build())).get();
 
 
         InstanceIdentifier<TransportZone> tzonePath = processDefTzOnItmConfig(defTzEnabledFlag,
@@ -220,11 +215,12 @@ public class ItmTepAutoConfigTest {
 
         InstanceIdentifier<TransportZone> tzPath =
                 ItmUtils.getTZInstanceIdentifier(ITMConstants.DEFAULT_TRANSPORT_ZONE);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath,
+                        new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
                         .setTunnelType(TunnelTypeVxlan.class)
                         .withKey(new TransportZoneKey(ITMConstants.DEFAULT_TRANSPORT_ZONE))
-                        .build(), WriteTransaction.CREATE_MISSING_PARENTS)).get();
+                        .build())).get();
 
         InstanceIdentifier<TransportZone> tzonePath = processDefTzOnItmConfig(defTzEnabledFlag,
                 defTzTunnelType);
@@ -239,11 +235,12 @@ public class ItmTepAutoConfigTest {
         defTzTunnelType = ITMConstants.TUNNEL_TYPE_GRE;
 
 
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath,
+                        new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
                         .setTunnelType(TunnelTypeGre.class)
                         .withKey(new TransportZoneKey(ITMConstants.DEFAULT_TRANSPORT_ZONE))
-                        .build(), WriteTransaction.CREATE_MISSING_PARENTS)).get();
+                        .build())).get();
 
 
         tzonePath = processDefTzOnItmConfig(defTzEnabledFlag, defTzTunnelType);
@@ -270,11 +267,12 @@ public class ItmTepAutoConfigTest {
 
         InstanceIdentifier<TransportZone> tzPath =
                 ItmUtils.getTZInstanceIdentifier(ITMConstants.DEFAULT_TRANSPORT_ZONE);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath,
+                        new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
                         .setTunnelType(TunnelTypeGre.class)
                         .withKey(new TransportZoneKey(ITMConstants.DEFAULT_TRANSPORT_ZONE))
-                        .build(), WriteTransaction.CREATE_MISSING_PARENTS)).get();
+                        .build())).get();
 
         InstanceIdentifier<TransportZone> tzonePath = ItmTepAutoConfigTestUtil.getTzIid(
                 ITMConstants.DEFAULT_TRANSPORT_ZONE);
@@ -302,11 +300,12 @@ public class ItmTepAutoConfigTest {
 
         InstanceIdentifier<TransportZone> tzPath =
                 ItmUtils.getTZInstanceIdentifier(ITMConstants.DEFAULT_TRANSPORT_ZONE);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath,
+                        new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
                         .setTunnelType(TunnelTypeVxlan.class)
                         .withKey(new TransportZoneKey(ITMConstants.DEFAULT_TRANSPORT_ZONE))
-                        .build(), WriteTransaction.CREATE_MISSING_PARENTS)).get();
+                        .build())).get();
 
         InstanceIdentifier<TransportZone> tzonePath = ItmTepAutoConfigTestUtil.getTzIid(
                 ITMConstants.DEFAULT_TRANSPORT_ZONE);
@@ -351,8 +350,8 @@ public class ItmTepAutoConfigTest {
 
         // create TZA
         InstanceIdentifier<TransportZone> tzPath = ItmUtils.getTZInstanceIdentifier(ItmTestConstants.TZ_NAME);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, transportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, transportZone)).get();
 
         // check TZ is created with correct TZ name
         Assert.assertEquals(ItmTestConstants.TZ_NAME, dataBroker.newReadOnlyTransaction()
@@ -404,11 +403,12 @@ public class ItmTepAutoConfigTest {
 
         InstanceIdentifier<TransportZone> tzPath =
                 ItmUtils.getTZInstanceIdentifier(ITMConstants.DEFAULT_TRANSPORT_ZONE);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath,
+                        new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
                         .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
                         .withKey(new TransportZoneKey(ITMConstants.DEFAULT_TRANSPORT_ZONE))
-                        .build(), WriteTransaction.CREATE_MISSING_PARENTS)).get();
+                        .build())).get();
 
 
         // add bridge into node
@@ -461,8 +461,8 @@ public class ItmTepAutoConfigTest {
 
         // create Transport-zone in advance
         InstanceIdentifier<TransportZone> tzPath = ItmUtils.getTZInstanceIdentifier(ItmTestConstants.TZ_NAME);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, transportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, transportZone)).get();
 
         // add bridge into node
         future = OvsdbTestUtil.addBridgeIntoNode(connInfo, ItmTestConstants.DEF_BR_NAME,
@@ -551,11 +551,12 @@ public class ItmTepAutoConfigTest {
 
         InstanceIdentifier<TransportZone> tzPath =
                 ItmUtils.getTZInstanceIdentifier(ITMConstants.DEFAULT_TRANSPORT_ZONE);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath,
+                        new TransportZoneBuilder().setZoneName(ITMConstants.DEFAULT_TRANSPORT_ZONE)
                         .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN)
                         .withKey(new TransportZoneKey(ITMConstants.DEFAULT_TRANSPORT_ZONE))
-                        .build(), WriteTransaction.CREATE_MISSING_PARENTS)).get();
+                        .build())).get();
 
         // add bridge into node
         future = OvsdbTestUtil.addBridgeIntoNode(connInfo, ItmTestConstants.DEF_BR_NAME,
@@ -638,8 +639,8 @@ public class ItmTepAutoConfigTest {
 
         // create Transport-zone TZA
         InstanceIdentifier<TransportZone> tzPath = ItmUtils.getTZInstanceIdentifier(ItmTestConstants.TZ_NAME);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, transportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, transportZone)).get();
         // iid for TZA configured from NB
         InstanceIdentifier<TransportZone> tzaTzonePath = ItmTepAutoConfigTestUtil.getTzIid(
                 ItmTestConstants.TZ_NAME);
@@ -676,9 +677,8 @@ public class ItmTepAutoConfigTest {
 
         // create Transport-zone in advance
         InstanceIdentifier<TransportZone> tzPath = ItmUtils.getTZInstanceIdentifier(ItmTestConstants.TZ_NAME);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, transportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
-
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, transportZone)).get();
 
         // add bridge into node
         future = OvsdbTestUtil.addBridgeIntoNode(connInfo, ItmTestConstants.DEF_BR_NAME,
@@ -798,8 +798,9 @@ public class ItmTepAutoConfigTest {
                 .withKey(new TransportZoneKey(ItmTestConstants.NOT_HOSTED_TZ_NAME)).build();
         Assert.assertNotNull(transportZoneNorth);
 
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION, tx -> tx.put(ItmTepAutoConfigTestUtil
-                .getTzIid(ItmTestConstants.NOT_HOSTED_TZ_NAME), transportZoneNorth, true)).get();
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
+            tx -> tx.mergeParentStructurePut(ItmTepAutoConfigTestUtil.getTzIid(ItmTestConstants.NOT_HOSTED_TZ_NAME),
+                transportZoneNorth)).get();
 
         // wait for TransportZoneListener to perform config DS update
         // for TEP movement through transaction
@@ -811,14 +812,14 @@ public class ItmTepAutoConfigTest {
 
         // check TZ is Moved
         assertEqualBeans(ExpectedTepNotHostedTransportZoneObjects
-                        .newTepNotHostedTransportZone().getUnknownVteps().get(0).getIpAddress().stringValue(),
-                dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION, tzPath)
-                        .get().get().getVteps().get(0).getIpAddress().stringValue());
+                        .newTepNotHostedTransportZone().getUnknownVteps().values().iterator().next().getIpAddress()
+                        .stringValue(), dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION,
+                tzPath).get().get().getVteps().values().iterator().next().getIpAddress().stringValue());
 
         assertEqualBeans(ExpectedTepNotHostedTransportZoneObjects.newTepNotHostedTransportZone().getUnknownVteps()
-                .get(0).getDpnId(), dataBroker.newReadOnlyTransaction()
+                .values().iterator().next().getDpnId(), dataBroker.newReadOnlyTransaction()
                 .read(LogicalDatastoreType.CONFIGURATION, tzPath).get()
-                .get().getVteps().get(0).getDpnId());
+                .get().getVteps().values().iterator().next().getDpnId());
 
         assertEqualBeans(ExpectedTepNotHostedTransportZoneObjects.newTepNotHostedTransportZone().getZoneName(),
                 dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION, tzPath)
@@ -833,9 +834,8 @@ public class ItmTepAutoConfigTest {
     public void tzDeletedAndReaddedTest() throws Exception {
         // create TZ
         InstanceIdentifier<TransportZone> tzPath = ItmUtils.getTZInstanceIdentifier(ItmTestConstants.TZ_NAME);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, transportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
-
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, transportZone)).get();
 
         InstanceIdentifier<TransportZone> tzonePath = ItmTepAutoConfigTestUtil.getTzIid(
                 ItmTestConstants.TZ_NAME);
@@ -882,8 +882,8 @@ public class ItmTepAutoConfigTest {
                 .read(LogicalDatastoreType.OPERATIONAL, notHostedPath).get().get().getZoneName());
 
         //readd the same tz
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, transportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, transportZone)).get();
         // wait for TransportZoneListener to perform config DS update
         // for TEP movement through transaction
         coordinatorEventsWaiter.awaitEventsConsumption();
@@ -901,8 +901,8 @@ public class ItmTepAutoConfigTest {
     public void tzDeletedAndReaddedWithSameVtepsTest() throws Exception {
         // create TZ
         InstanceIdentifier<TransportZone> tzPath = ItmUtils.getTZInstanceIdentifier(ItmTestConstants.TZ_NAME);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, transportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, transportZone)).get();
 
         coordinatorEventsWaiter.awaitEventsConsumption();
 
@@ -954,10 +954,10 @@ public class ItmTepAutoConfigTest {
 
         //create vtepList form unknownVtepList
         List<Vteps> vtepsList = new ArrayList<>();
-        List<UnknownVteps> unknownVtepsList = dataBroker.newReadOnlyTransaction()
+        @Nullable Map<UnknownVtepsKey, UnknownVteps> unknownVtepsList = dataBroker.newReadOnlyTransaction()
                 .read(LogicalDatastoreType.OPERATIONAL, notHostedPath).get().get().getUnknownVteps();
 
-        for (UnknownVteps unknownVtep:unknownVtepsList) {
+        for (UnknownVteps unknownVtep:unknownVtepsList.values()) {
             Vteps vteps = new VtepsBuilder().setDpnId(unknownVtep.getDpnId())
                     .setIpAddress(unknownVtep.getIpAddress())
                     .withKey(new VtepsKey(unknownVtep.getDpnId())).build();
@@ -968,8 +968,8 @@ public class ItmTepAutoConfigTest {
                 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN).setVteps(vtepsList)
                 .withKey(new TransportZoneKey(ItmTestConstants.TZ_NAME)).build();
 
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, recreatedTransportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, recreatedTransportZone)).get();
 
         // wait for TransportZoneListener to perform config DS update
         // for TEP movement through transaction
@@ -989,9 +989,8 @@ public class ItmTepAutoConfigTest {
     public void tzReaddWithSameVtepsAndDiffDpnIDTest() throws Exception {
         // create TZ
         InstanceIdentifier<TransportZone> tzPath = ItmUtils.getTZInstanceIdentifier(ItmTestConstants.TZ_NAME);
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, transportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
-
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, transportZone)).get();
 
         InstanceIdentifier<TransportZone> tzonePath = ItmTepAutoConfigTestUtil.getTzIid(
                 ItmTestConstants.TZ_NAME);
@@ -1040,10 +1039,10 @@ public class ItmTepAutoConfigTest {
 
         //create vtepList form unknownVtepList
         List<Vteps> vtepsList = new ArrayList<>();
-        List<UnknownVteps> unknownVtepsList = dataBroker.newReadOnlyTransaction()
+        @Nullable Map<UnknownVtepsKey, UnknownVteps> unknownVtepsList = dataBroker.newReadOnlyTransaction()
                 .read(LogicalDatastoreType.OPERATIONAL, notHostedPath).get().get().getUnknownVteps();
         //modifing the dpnid and keeping the ip same.
-        for (UnknownVteps unknownVtep:unknownVtepsList) {
+        for (UnknownVteps unknownVtep:unknownVtepsList.values()) {
             Vteps vteps = new VtepsBuilder().setDpnId(Uint64.valueOf(10))
                     .setIpAddress(unknownVtep.getIpAddress())
                     .withKey(new VtepsKey(Uint64.valueOf(10))).build();
@@ -1054,8 +1053,8 @@ public class ItmTepAutoConfigTest {
                 .setTunnelType(ItmTestConstants.TUNNEL_TYPE_VXLAN).setVteps(vtepsList)
                 .withKey(new TransportZoneKey(ItmTestConstants.TZ_NAME)).build();
 
-        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.merge(LogicalDatastoreType.CONFIGURATION,
-                tzPath, recreatedTransportZone, WriteTransaction.CREATE_MISSING_PARENTS)).get();
+        txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
+                tx.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, tzPath, recreatedTransportZone)).get();
 
         // wait for TransportZoneListener to perform config DS update
         // for TEP movement through transaction
index 07c399e2856308c3e0372cb59f5e1c98752901b8..a9c646941a4e5dd96f057ab1e48dbdc502612513 100644 (file)
@@ -146,7 +146,7 @@ public class ItmTestModule extends AbstractGuiceJsr250Module {
         bind(ServiceRecoveryRegistry.class).toInstance(mock(ServiceRecoveryRegistry.class));
         bind(ItmDiagStatusProvider.class).toInstance(mock(ItmDiagStatusProvider.class));
         EntityOwnershipService entityOwnershipService = new BindingDOMEntityOwnershipServiceAdapter(
-                new SimpleDOMEntityOwnershipService(), test.getDataBrokerTestCustomizer().getBindingToNormalized());
+                new SimpleDOMEntityOwnershipService(), test.getDataBrokerTestCustomizer().getAdapterContext());
         bind(EntityOwnershipService.class).toInstance(entityOwnershipService);
         bind(EntityOwnershipUtils.class);
         bind(TombstonedNodeManager.class).to(TombstonedNodeManagerImpl.class);
index edff6adfda8304c52d42f41cbd39a4b3608c6c44..7c5a69290719c47d059b308029f67c97d7f53421 100644 (file)
@@ -119,7 +119,7 @@ public final class OvsdbTestUtil {
         Node ovsdbNode = nodeBuilder.build();
 
         WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
-        transaction.put(LogicalDatastoreType.OPERATIONAL, iid, ovsdbNode, true);
+        transaction.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, iid, ovsdbNode);
         return transaction.commit();
     }
 
@@ -190,7 +190,7 @@ public final class OvsdbTestUtil {
 
         //ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
         WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
-        transaction.put(LogicalDatastoreType.OPERATIONAL, iid, ovsdbNode, true);
+        transaction.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, iid, ovsdbNode);
         return transaction.commit();
     }
 
@@ -217,8 +217,8 @@ public final class OvsdbTestUtil {
         Node bridgeNode = bridgeNodeBuilder.build();
 
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-        tx.merge(LogicalDatastoreType.OPERATIONAL, bridgeIid,
-            bridgeNode, true);
+        tx.mergeParentStructureMerge(LogicalDatastoreType.OPERATIONAL, bridgeIid,
+            bridgeNode);
         return tx.commit();
     }
 }
index f1bdd39fb12a0a30e28a9587f6b5ea97801a1bb2..448ae00d75c86e5c3e3438d642dbea796d564fcf 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 1bf5b30575e790208713cd0f567a6b6ed022d83d..fe7b6e59c1be5657bcad6a49ee5773b7900f6b53 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>karaf4-parent</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 1ee5fd838d2807dbfe4803bba7ac5144db28e5cb..e413489bdd58f9e625eba61159c398cba1da0094 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 1c0d163709b544ff28ce5761cbfe0a2f773897a6..a6727737c73052fe300c09ee99b02ca9b1963f64 100644 (file)
@@ -8,12 +8,11 @@
 package org.opendaylight.genius.mdsal.testutils;
 
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec;
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.broker.DOMNotificationRouter;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider;
 
 public class DataBrokerTestWiring {
     public static DataBroker dataBroker() throws Exception {
@@ -35,10 +34,6 @@ public class DataBrokerTestWiring {
         return dataBrokerTest.getDomBroker();
     }
 
-    public BindingToNormalizedNodeCodec getBindingToNormalizedNodeCodec() {
-        return dataBrokerTest.getDataBrokerTestCustomizer().getBindingToNormalized();
-    }
-
     public DOMNotificationRouter getDOMNotificationRouter() {
         return dataBrokerTest.getDataBrokerTestCustomizer().getDomNotificationRouter();
     }
@@ -47,10 +42,10 @@ public class DataBrokerTestWiring {
         return dataBrokerTest.getDataBrokerTestCustomizer().getSchemaService();
     }
 
-    public SchemaContextProvider getSchemaContextProvider() {
+    public EffectiveModelContextProvider getEffectiveModelContextProvider() {
         DOMSchemaService schemaService = dataBrokerTest.getDataBrokerTestCustomizer().getSchemaService();
-        if (schemaService instanceof SchemaContextProvider) {
-            return (SchemaContextProvider) schemaService;
+        if (schemaService instanceof EffectiveModelContextProvider) {
+            return (EffectiveModelContextProvider) schemaService;
         }
         throw new IllegalStateException(
             "The schema service isn't a SchemaContextProvider, it's a " + schemaService.getClass());
index e809fe8679fb7b3a1ed8a6bb4295ff11d58b2e02..6d249e19e065dd69093fe5d743dbb977a764f46b 100644 (file)
@@ -123,6 +123,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>org.immutables</groupId>
       <artifactId>value</artifactId>
+      <classifier>annotations</classifier>
     </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
@@ -149,11 +150,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <artifactId>awaitility</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.opendaylight.mdsal</groupId>
-      <artifactId>mdsal-binding-test-utils</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-binding-spi</artifactId>
@@ -184,7 +180,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
      </dependency>!-->
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
-      <artifactId>mdsal-binding-dom-adapter</artifactId>
+      <artifactId>mdsal-binding-test-utils</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
index f74d4e5f80592b74fcad0a6af539b51b78c4d222..063eb8df894a6d107648c264e4d41e5a6bf4d979 100644 (file)
@@ -213,7 +213,7 @@ public class SingleTransactionDataBroker {
 
         RetryingManagedNewTransactionRunner runner = new RetryingManagedNewTransactionRunner(broker, maxRetries);
         ListenableFutures.checkedGet(runner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
-                tx.put(datastoreType,path,data,true)), SUBMIT_MAPPER);
+                tx.mergeParentStructurePut(datastoreType,path,data)), SUBMIT_MAPPER);
     }
 
     public <T extends DataObject> void syncUpdate(
@@ -239,7 +239,7 @@ public class SingleTransactionDataBroker {
             throws TransactionCommitFailedException {
         RetryingManagedNewTransactionRunner runner = new RetryingManagedNewTransactionRunner(broker, maxRetries);
         ListenableFutures.checkedGet(runner.callWithNewWriteOnlyTransactionAndSubmit(tx ->
-                tx.merge(datastoreType, path, data, true)), SUBMIT_MAPPER);
+                tx.mergeParentStructureMerge(datastoreType, path, data)), SUBMIT_MAPPER);
     }
 
     public <T extends DataObject> void syncDelete(
index 14956f1e0925da128d43033fe759cec35a45ab17..c3f893d1f3f727711c495768479255cebfc70b4e 100644 (file)
@@ -87,39 +87,23 @@ public final class TransactionAdapter {
         }
 
         @Override
-        public <T extends DataObject> void put(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
-                                               boolean createMissingParents) {
+        public <T extends DataObject> void mergeParentStructurePut(LogicalDatastoreType store,
+                                                                   InstanceIdentifier<T> path, T data) {
             checkStore(store);
-            delegate.put(path, data, createMissingParents);
+            delegate.mergeParentStructurePut(path, data);
         }
 
         @Override
-        public <T extends DataObject> void mergeParentStructurePut(@NonNull LogicalDatastoreType store,
-                                                                   @NonNull InstanceIdentifier<T> path,
-                                                                   @NonNull T data) {
-            /////
-        }
-
-        @Override
-        public <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path,
-                                                 T data) {
+        public <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path, T data) {
             checkStore(store);
             delegate.merge(path, data);
         }
 
         @Override
-        public <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path,
-                                                 T data,
-                                                 boolean createMissingParents) {
+        public <T extends DataObject> void mergeParentStructureMerge(LogicalDatastoreType store,
+                                                                     InstanceIdentifier<T> path, T data) {
             checkStore(store);
-            delegate.merge(path, data, createMissingParents);
-        }
-
-        @Override
-        public <T extends DataObject> void mergeParentStructureMerge(@NonNull LogicalDatastoreType store,
-                                                                     @NonNull InstanceIdentifier<T> path,
-                                                                     @NonNull T data) {
-            //////
+            delegate.mergeParentStructureMerge(path, data);
         }
 
         @Override
index d05ab47782128f4730dd334bbd764c351a1325a4..37a5cfcdbd4c395a6f35c8dea99d65f38a1b71d6 100644 (file)
@@ -40,11 +40,9 @@ public interface TypedWriteTransaction<D extends Datastore> extends
      *
      * @param path The path to write to.
      * @param data The object to write.
-     * @param createMissingParents {@link WriteTransaction#CREATE_MISSING_PARENTS} to create missing parents,
-     * {@link WriteTransaction#FAIL_ON_MISSING_PARENTS} to fail if parents are missing.
      * @param <T> The type of the provided object.
      */
-    <T extends DataObject> void put(InstanceIdentifier<T> path, T data, boolean createMissingParents);
+    <T extends DataObject> void mergeParentStructurePut(InstanceIdentifier<T> path, T data);
 
     /**
      * Merges an object with the data already present at the given path.
@@ -64,11 +62,9 @@ public interface TypedWriteTransaction<D extends Datastore> extends
      *
      * @param path The path to write to.
      * @param data The object to merge.
-     * @param createMissingParents {@link WriteTransaction#CREATE_MISSING_PARENTS} to create missing parents,
-     * {@link WriteTransaction#FAIL_ON_MISSING_PARENTS} to fail if parents are missing.
      * @param <T> The type of the provided object.
      */
-    <T extends DataObject> void merge(InstanceIdentifier<T> path, T data, boolean createMissingParents);
+    <T extends DataObject> void mergeParentStructureMerge(InstanceIdentifier<T> path, T data);
 
     /**
      * Deletes the object present at the given path.
index 3509358e595ae2dab31b587dfa4a128851074762..96abb24c3cc2abeb55299471c33c0f82b4ecd454 100644 (file)
@@ -33,8 +33,8 @@ class TypedWriteTransactionImpl<D extends Datastore> extends TypedTransaction<D>
     }
 
     @Override
-    public <T extends DataObject> void put(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
-        delegate.put(getDatastoreType(), path, data, createMissingParents);
+    public <T extends DataObject> void mergeParentStructurePut(InstanceIdentifier<T> path, T data) {
+        delegate.mergeParentStructurePut(getDatastoreType(), path, data);
     }
 
     @Override
@@ -43,8 +43,8 @@ class TypedWriteTransactionImpl<D extends Datastore> extends TypedTransaction<D>
     }
 
     @Override
-    public <T extends DataObject> void merge(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
-        delegate.merge(getDatastoreType(), path, data, createMissingParents);
+    public <T extends DataObject> void mergeParentStructureMerge(InstanceIdentifier<T> path, T data) {
+        delegate.mergeParentStructureMerge(getDatastoreType(), path, data);
     }
 
     @Override
index b345bc76fbda4d9cf30b5f2a159acbfa23fd9322..e52792e417112890614f92a2c64d863782337b1f 100644 (file)
@@ -32,8 +32,8 @@ class WriteTrackingTypedReadWriteTransactionImpl<D extends Datastore> extends Ty
     }
 
     @Override
-    public <T extends DataObject> void put(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
-        super.put(path, data, createMissingParents);
+    public <T extends DataObject> void mergeParentStructurePut(InstanceIdentifier<T> path, T data) {
+        super.mergeParentStructurePut(path, data);
         written = true;
     }
 
@@ -44,8 +44,8 @@ class WriteTrackingTypedReadWriteTransactionImpl<D extends Datastore> extends Ty
     }
 
     @Override
-    public <T extends DataObject> void merge(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
-        super.merge(path, data, createMissingParents);
+    public <T extends DataObject> void mergeParentStructureMerge(InstanceIdentifier<T> path, T data) {
+        super.mergeParentStructureMerge(path, data);
         written = true;
     }
 
index e48723bae8f3a9bf1c1685da3d0f52fce518a1a9..512c8d5b8c1b8884e258257016cf0dcd46b48355 100644 (file)
@@ -32,8 +32,8 @@ class WriteTrackingTypedWriteTransactionImpl<D extends Datastore> extends TypedW
     }
 
     @Override
-    public <T extends DataObject> void put(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
-        super.put(path, data, createMissingParents);
+    public <T extends DataObject> void mergeParentStructurePut(InstanceIdentifier<T> path, T data) {
+        super.mergeParentStructurePut(path, data);
         written = true;
     }
 
@@ -44,8 +44,8 @@ class WriteTrackingTypedWriteTransactionImpl<D extends Datastore> extends TypedW
     }
 
     @Override
-    public <T extends DataObject> void merge(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
-        super.merge(path, data, createMissingParents);
+    public <T extends DataObject> void mergeParentStructureMerge(InstanceIdentifier<T> path, T data) {
+        super.mergeParentStructureMerge(path, data);
         written = true;
     }
 
index d284874a6aa12476256247d2bcf297c7a902bb54..5410dd4589f62b2dbdbd649b1d7eac8019e5186a 100644 (file)
@@ -32,9 +32,9 @@ class WriteTrackingWriteTransaction extends ForwardingWriteTransaction implement
     }
 
     @Override
-    public <T extends DataObject> void put(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
-        boolean createMissingParents) {
-        super.put(store, path, data, createMissingParents);
+    public <T extends DataObject> void mergeParentStructurePut(LogicalDatastoreType store, InstanceIdentifier<T> path,
+                                                               T data) {
+        super.mergeParentStructurePut(store, path, data);
         written = true;
     }
 
@@ -45,9 +45,9 @@ class WriteTrackingWriteTransaction extends ForwardingWriteTransaction implement
     }
 
     @Override
-    public <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
-        boolean createMissingParents) {
-        super.merge(store, path, data, createMissingParents);
+    public <T extends DataObject> void mergeParentStructureMerge(LogicalDatastoreType store, InstanceIdentifier<T> path,
+                                                                 T data) {
+        super.mergeParentStructureMerge(store, path, data);
         written = true;
     }
 
index 395e2ab0f46b7ad67033fdb7572ea5079b433ae1..c68114b669a89cbace30d8fc242854380e5c1f43 100644 (file)
@@ -167,14 +167,14 @@ public class MDSALUtil {
 
     public static Flow buildFlowNew(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
             int hardTimeOut, Uint64 cookie, List<? extends MatchInfoBase> listMatchInfoBase,
-            List<Instruction> listInstructionInfo) {
+                                    Map<InstructionKey, Instruction>  listInstructionInfo) {
         return MDSALUtil.buildFlowNew(tableId, flowId, priority, flowName, idleTimeOut, hardTimeOut, cookie,
                 listMatchInfoBase, listInstructionInfo, true);
     }
 
     private static Flow buildFlowNew(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
                                   int hardTimeOut, Uint64 cookie, List<? extends MatchInfoBase>  listMatchInfoBase,
-                                  List<Instruction> listInstructionInfo, boolean isStrict) {
+                                  Map<InstructionKey, Instruction> listInstructionInfo, boolean isStrict) {
         FlowKey key = new FlowKey(new FlowId(flowId));
         return new FlowBuilder().setMatch(buildMatches(listMatchInfoBase)).withKey(key)
                 .setPriority(priority)
index d3c769f5cd8974155806989c293a6077a0f51216..b51c65d965802034ae46c6352bb7c9442cf8390f 100644 (file)
@@ -176,7 +176,7 @@ public final class NWUtil {
         if (!nodesOptional.isPresent()) {
             return result;
         }
-        for (Node node : nodesOptional.get().nonnullNode()) {
+        for (Node node : nodesOptional.get().nonnullNode().values()) {
             NodeId nodeId = node.getId();
             if (nodeId != null) {
                 Uint64 dpnId = MDSALUtil.getDpnIdFromNodeName(nodeId);
index 2a0c8ff7da69cc6dab77dc599980c83e604a21bf..7199f341b2819a9e90050ed42f06705cb9b6eee2 100644 (file)
@@ -7,8 +7,7 @@
  */
 package org.opendaylight.genius.mdsalutil.ericmatches;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
 import java.util.Map;
 import org.opendaylight.genius.mdsalutil.MatchInfo;
 import org.opendaylight.genius.utils.SuperTypeUtil;
@@ -21,6 +20,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ge
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.ExtensionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.list.grouping.ExtensionList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.list.grouping.ExtensionListBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.list.grouping.ExtensionListKey;
 import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 
@@ -66,18 +66,19 @@ public abstract class EricMatchInfoHelper<T extends DataObject, B extends Builde
     private GeneralAugMatchNodesNodeTableFlow generalAugMatchBuilder(
             GeneralAugMatchNodesNodeTableFlow existingAugmentations, EricAugMatchNodesNodeTableFlow ericAugMatch,
             Class<? extends ExtensionKey> extentionKey) {
-        List<ExtensionList> extensions = null;
+        Map<ExtensionListKey, ExtensionList> extensions = null;
         if (existingAugmentations != null) {
             extensions = existingAugmentations.getExtensionList();
         }
         if (extensions == null) {
-            extensions = new ArrayList<>();
+            extensions = new HashMap<>();
         }
-        extensions.add(new ExtensionListBuilder().setExtensionKey(extentionKey)
+        ExtensionList extensionList = new ExtensionListBuilder().setExtensionKey(extentionKey)
                 .setExtension(
                         new ExtensionBuilder().addAugmentation(EricAugMatchNodesNodeTableFlow.class, ericAugMatch)
                                 .build())
-                .build());
+                .build();
+        extensions.put(extensionList.key(),extensionList);
         return new GeneralAugMatchNodesNodeTableFlowBuilder().setExtensionList(extensions).build();
     }
 
index 69a0d0c0fd2da82362661efb5cb46bf092728272..4e26af4bc56c49410ab56fd5cb57d7048055cca0 100644 (file)
@@ -7,8 +7,7 @@
  */
 package org.opendaylight.genius.mdsalutil.nxmatches;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
 import java.util.Map;
 import org.opendaylight.genius.mdsalutil.NxMatchInfo;
 import org.opendaylight.genius.utils.SuperTypeUtil;
@@ -19,6 +18,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ge
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.ExtensionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.list.grouping.ExtensionList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.list.grouping.ExtensionListBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.list.grouping.ExtensionListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNodesNodeTableFlow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNodesNodeTableFlowBuilder;
 import org.opendaylight.yangtools.concepts.Builder;
@@ -68,17 +68,20 @@ public abstract class NxMatchInfoHelper<T extends DataObject, B extends Builder<
     private GeneralAugMatchNodesNodeTableFlow generalAugMatchBuilder(
             GeneralAugMatchNodesNodeTableFlow existingAugmentations, NxAugMatchNodesNodeTableFlow nxAugMatch,
             Class<? extends ExtensionKey> extentionKey) {
-        List<ExtensionList> extensions = null;
+
+        Map<ExtensionListKey, ExtensionList> extensions = null;
+
         if (existingAugmentations != null) {
             extensions = existingAugmentations.getExtensionList();
         }
         if (extensions == null) {
-            extensions = new ArrayList<>();
+            extensions = new HashMap<>();
         }
-        extensions.add(new ExtensionListBuilder().setExtensionKey(extentionKey)
-                .setExtension(
-                        new ExtensionBuilder().addAugmentation(NxAugMatchNodesNodeTableFlow.class, nxAugMatch).build())
-                .build());
+
+        ExtensionList extensionList = new ExtensionListBuilder().setExtensionKey(extentionKey)
+                .setExtension(new ExtensionBuilder().addAugmentation(NxAugMatchNodesNodeTableFlow.class,
+                        nxAugMatch).build()).build();
+        extensions.put(extensionList.key(),extensionList);
         return new GeneralAugMatchNodesNodeTableFlowBuilder().setExtensionList(extensions).build();
     }
 
index 53006cedab112c846a962ae52937fd5d51d299a4..2256c67d2d68a7d23abd4fbd6d633ad01a6914a5 100644 (file)
@@ -47,7 +47,7 @@ public class DefaultBatchHandler implements ResourceHandler {
         subTransaction.setInstanceIdentifier(identifier);
         transactionObjects.add(subTransaction);
 
-        tx.merge(logicalDatastoreType, identifier, (DataObject) update, true);
+        tx.mergeParentStructureMerge(logicalDatastoreType, identifier, (DataObject) update);
     }
 
     @Override
@@ -86,7 +86,7 @@ public class DefaultBatchHandler implements ResourceHandler {
         subTransaction.setInstanceIdentifier(identifier);
         transactionObjects.add(subTransaction);
 
-        tx.put(logicalDatastoreType, identifier, (DataObject) data, true);
+        tx.mergeParentStructurePut(logicalDatastoreType, identifier, (DataObject) data);
     }
 
     @Override
index 80c4b19d9003ee98370b435916dac9581911fc82..b0969ebabdba24062277a906864fa9749455a3ae 100644 (file)
@@ -159,13 +159,13 @@ public class ResourceBatchingManager implements AutoCloseable {
      * @return a CheckFuture containing the result of the read
      */
     public <T extends DataObject> FluentFuture<Optional<T>> read(
-            String resourceType, InstanceIdentifier<T> identifier) {
+            String resourceType, InstanceIdentifier<T> identifier) throws InterruptedException, ExecutionException {
         BlockingQueue<ActionableResource> queue = getQueue(resourceType);
         if (queue != null) {
             if (pendingModificationByResourceType.get(resourceType).contains(identifier)) {
                 SettableFuture<Optional<T>> readFuture = SettableFuture.create();
                 queue.add(new ActionableReadResource<>(identifier, readFuture));
-                return FluentFuture.from(Futures.makeChecked(readFuture, ReadFailedException.MAPPER));
+                return FluentFutures.immediateFluentFuture(readFuture.get());
             } else {
                 ResourceHandler resourceHandler = resourceHandlerMapper.get(resourceType).getRight();
                 try (ReadTransaction tx = resourceHandler.getResourceBroker().newReadOnlyTransaction()) {
@@ -415,15 +415,15 @@ public class ResourceBatchingManager implements AutoCloseable {
                     WriteTransaction writeTransaction = broker.newWriteOnlyTransaction();
                     switch (object.getAction()) {
                         case SubTransaction.CREATE:
-                            writeTransaction.put(dsType, object.getInstanceIdentifier(),
-                                    (DataObject) object.getInstance(), true);
+                            writeTransaction.mergeParentStructurePut(dsType, object.getInstanceIdentifier(),
+                                    (DataObject) object.getInstance());
                             break;
                         case SubTransaction.DELETE:
                             writeTransaction.delete(dsType, object.getInstanceIdentifier());
                             break;
                         case SubTransaction.UPDATE:
-                            writeTransaction.merge(dsType, object.getInstanceIdentifier(),
-                                    (DataObject) object.getInstance(), true);
+                            writeTransaction.mergeParentStructureMerge(dsType, object.getInstanceIdentifier(),
+                                    (DataObject) object.getInstance());
                             break;
                         default:
                             LOG.error("Unable to determine Action for transaction object with id {}",
index 4e5683fa186afdb41d8596f79e83f7ce85a9a320..b505b039658c2c31c39b716821d551ff3a03f20d 100644 (file)
@@ -8,8 +8,6 @@
 
 package org.opendaylight.genius.utils.hwvtep;
 
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
-
 import com.google.common.util.concurrent.FluentFuture;
 import java.util.ArrayList;
 import java.util.List;
@@ -107,7 +105,7 @@ public final class HwvtepUtils {
         LogicalSwitches logicalSwitch) {
         InstanceIdentifier<LogicalSwitches> iid = HwvtepSouthboundUtils.createLogicalSwitchesInstanceIdentifier(nodeId,
             logicalSwitch.getHwvtepNodeName());
-        tx.put(iid, logicalSwitch, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructurePut(iid, logicalSwitch);
     }
 
     /**
@@ -144,7 +142,7 @@ public final class HwvtepUtils {
                                         final NodeId nodeId, final LogicalSwitches logicalSwitch) {
         InstanceIdentifier<LogicalSwitches> iid = HwvtepSouthboundUtils.createLogicalSwitchesInstanceIdentifier(nodeId,
                 logicalSwitch.getHwvtepNodeName());
-        transaction.put(logicalDatastoreType, iid, logicalSwitch, true);
+        transaction.mergeParentStructurePut(logicalDatastoreType, iid, logicalSwitch);
     }
 
     /**
@@ -323,7 +321,7 @@ public final class HwvtepUtils {
                 .withKey(HwvtepSouthboundUtils.getTerminationPointKey(phyLocator))
                 .addAugmentation(HwvtepPhysicalLocatorAugmentation.class, phyLocator).build();
 
-        transaction.put(LogicalDatastoreType.CONFIGURATION, iid, terminationPoint, true);
+        transaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, terminationPoint);
     }
 
     /**
@@ -398,7 +396,7 @@ public final class HwvtepUtils {
         InstanceIdentifier<RemoteUcastMacs> iid = HwvtepSouthboundUtils.createInstanceIdentifier(nodeId)
             .augmentation(HwvtepGlobalAugmentation.class).child(RemoteUcastMacs.class,
                 new RemoteUcastMacsKey(remoteUcastMac.getLogicalSwitchRef(), remoteUcastMac.getMacEntryKey()));
-        tx.put(iid, remoteUcastMac, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructurePut(iid, remoteUcastMac);
     }
 
     /**
@@ -439,7 +437,7 @@ public final class HwvtepUtils {
         InstanceIdentifier<RemoteUcastMacs> iid = HwvtepSouthboundUtils.createInstanceIdentifier(nodeId)
                 .augmentation(HwvtepGlobalAugmentation.class).child(RemoteUcastMacs.class,
                         new RemoteUcastMacsKey(remoteUcastMac.getLogicalSwitchRef(), remoteUcastMac.getMacEntryKey()));
-        transaction.put(LogicalDatastoreType.CONFIGURATION, iid, remoteUcastMac, true);
+        transaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, remoteUcastMac);
     }
 
     /**
@@ -606,7 +604,7 @@ public final class HwvtepUtils {
                                          RemoteMcastMacs remoteMcastMac) {
         InstanceIdentifier<RemoteMcastMacs> iid = HwvtepSouthboundUtils.createRemoteMcastMacsInstanceIdentifier(nodeId,
                 remoteMcastMac.key());
-        transaction.put(LogicalDatastoreType.CONFIGURATION, iid, remoteMcastMac, true);
+        transaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, remoteMcastMac);
     }
 
     /**
@@ -624,7 +622,7 @@ public final class HwvtepUtils {
                                          RemoteMcastMacs remoteMcastMac) {
         InstanceIdentifier<RemoteMcastMacs> iid = HwvtepSouthboundUtils.createRemoteMcastMacsInstanceIdentifier(nodeId,
                 remoteMcastMac.key());
-        transaction.put(logicalDatastoreType, iid, remoteMcastMac, true);
+        transaction.mergeParentStructurePut(logicalDatastoreType, iid, remoteMcastMac);
     }
 
     /**
@@ -638,7 +636,7 @@ public final class HwvtepUtils {
         RemoteMcastMacs remoteMcastMac) {
         InstanceIdentifier<RemoteMcastMacs> iid = HwvtepSouthboundUtils.createRemoteMcastMacsInstanceIdentifier(nodeId,
             remoteMcastMac.key());
-        tx.put(iid, remoteMcastMac, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructurePut(iid, remoteMcastMac);
     }
 
     /**
@@ -831,7 +829,7 @@ public final class HwvtepUtils {
 
         final InstanceIdentifier<HwvtepPhysicalPortAugmentation> iid = HwvtepSouthboundUtils
                 .createPhysicalPortInstanceIdentifier(physicalSwitchNodeId, phyPortName);
-        transaction.merge(LogicalDatastoreType.CONFIGURATION, iid, phyPortAug, true);
+        transaction.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, iid, phyPortAug);
     }
 
     /**
@@ -849,7 +847,7 @@ public final class HwvtepUtils {
 
         final InstanceIdentifier<HwvtepPhysicalPortAugmentation> iid = HwvtepSouthboundUtils
             .createPhysicalPortInstanceIdentifier(physicalSwitchNodeId, phyPortName);
-        tx.merge(iid, phyPortAug, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructureMerge(iid, phyPortAug);
     }
 
     /**
index ffcb8b6db3c4d7eb6944ea93c799827acfb97479..26fdd8632452da384e562606e4c2624d7072e02f 100644 (file)
@@ -54,7 +54,8 @@ public class ActionLoadMacToShaTest {
     @Test
     public void generateAction() {
         ActionInfo actionInfo = new ActionLoadMacToSha(new MacAddress(MAC_ADDRESS));
-        assertEquals("new ActionLoadMacToSha(0, new MacAddress(\"" + MAC_ADDRESS + "\"))",
-                generator.getExpression(actionInfo));
+        assertEquals(("MacAddress{_value=" + MAC_ADDRESS + "}"),
+                ((ActionLoadMacToSha) actionInfo).getAddress().toString());
+
     }
 }
index 9b53ceff3ad6402bf223770626bbf9e76f278431..5ae9e3595f3f2668b1c0404bfcbb3ed575821cbb 100644 (file)
@@ -29,11 +29,11 @@ public class ActionNxConntrackTest {
 
     @Test
     public void testNxNat() {
-        assertThat(generator.getExpression(
-                new ActionNxConntrack.NxNat(123, 456, 789, IpAddressBuilder.getDefaultInstance("1.2.3.4"),
-                        IpAddressBuilder.getDefaultInstance("1.2.3.4"), 987, 654)))
-                                .isEqualTo("new NxNat(123, 456, 789, new IpAddress(new Ipv4Address(\"1.2.3.4\")), "
-                                        + "new IpAddress(new Ipv4Address(\"1.2.3.4\")), 987, 654)");
+        assertThat(new ActionNxConntrack.NxNat(123, 456, 789,
+                IpAddressBuilder.getDefaultInstance("1.2.3.4"),
+                IpAddressBuilder.getDefaultInstance("1.2.3.4"), 987, 654).toString()
+                .equals("new NxNat(123, 456, 789, new IpAddress(new Ipv4Address(\"1.2.3.4\")), "
+                + "new IpAddress(new Ipv4Address(\"1.2.3.4\")), 987, 654)"));
     }
 
 }
index e88dc539f979ebbce9067e7dda35081e9d47cf20..cf4daee3123c8530608cc1e77b8dc05038cddc26 100644 (file)
@@ -47,7 +47,7 @@ public class ActionSetDestinationIpTest {
     @Test
     public void generateAction() {
         ActionInfo actionInfo = new ActionSetDestinationIp(IP_ADDRESS);
-        assertEquals("new ActionSetDestinationIp(0, new Ipv4Prefix(\"" + IP_ADDRESS + "/" + IP_MASK + "\"))",
-                generator.getExpression(actionInfo));
+        assertEquals(("Ipv4Prefix{_value=" + IP_ADDRESS + "/" + IP_MASK + "}"),
+                ((ActionSetDestinationIp) actionInfo).getDestination().toString());
     }
 }
index d808485f13ab19f7e9a387feae169a558fb1edc9..1c062466e5a4c7e41cafadc3b408b7d76a5f0ffc 100644 (file)
@@ -44,7 +44,7 @@ public class ActionSetFieldEthernetDestinationTest {
     public void generateAction() {
         ActionInfo actionInfo = new ActionSetFieldEthernetDestination(new MacAddress(MAC_ADDRESS));
         actionInfo.buildAction();
-        assertEquals("new ActionSetFieldEthernetDestination(0, new MacAddress(\"" + MAC_ADDRESS + "\"))",
-                generator.getExpression(actionInfo));
+        assertEquals(("MacAddress{_value=" + MAC_ADDRESS + "}"),
+                ((ActionSetFieldEthernetDestination) actionInfo).getDestination().toString());
     }
 }
index 9927a0c59aa5cf0bfdbee6365d9b5f3aca9ac94b..454eb5cf61a6b80ba70c7e664f84cfa58d1659aa 100644 (file)
@@ -44,7 +44,7 @@ public class ActionSetFieldEthernetSourceTest {
     public void generateAction() {
         ActionInfo actionInfo = new ActionSetFieldEthernetSource(new MacAddress(MAC_ADDRESS));
         actionInfo.buildAction();
-        assertEquals("new ActionSetFieldEthernetSource(0, new MacAddress(\"" + MAC_ADDRESS + "\"))",
-                generator.getExpression(actionInfo));
+        assertEquals(("MacAddress{_value=" + MAC_ADDRESS + "}"),
+                ((ActionSetFieldEthernetSource) actionInfo).getSource().toString());
     }
 }
index b743728cf40e10f123a41cc4f056d8dfcd46cfb2..f987361705f3cc0a6ffdcc82becb3a86e6d53897 100644 (file)
@@ -47,7 +47,7 @@ public class ActionSetSourceIpTest {
     @Test
     public void generateAction() {
         ActionInfo actionInfo = new ActionSetSourceIp(IP_ADDRESS);
-        assertEquals("new ActionSetSourceIp(0, new Ipv4Prefix(\"" + IP_ADDRESS + "/" + IP_MASK + "\"))",
-                generator.getExpression(actionInfo));
+        assertEquals(("Ipv4Prefix{_value=" + IP_ADDRESS + "/" + IP_MASK + "}"),
+               ((ActionSetSourceIp) actionInfo).getSource().toString());
     }
 }
index 8ef767b49692d6d5f4f9e94820f00c5455bc6043..ec3cca6ca010f1a7940722075eaebaf61ee32331 100644 (file)
@@ -47,7 +47,7 @@ public class ActionSetSourceIpv6Test {
     @Test
     public void generateAction() {
         ActionInfo actionInfo = new ActionSetSourceIpv6(IP_ADDRESS);
-        assertEquals("new ActionSetSourceIpv6(0, new Ipv6Prefix(\"" + IP_ADDRESS + "/" + IP_MASK + "\"))",
-                generator.getExpression(actionInfo));
+        assertEquals(("Ipv6Prefix{_value=" + IP_ADDRESS + "/" + IP_MASK + "}"),
+                ((ActionSetSourceIpv6) actionInfo).getSource().toString());
     }
 }
index 8432606ca30aad207b5e0255572395dac69d9782..8cb530756820be50914bb2663d932ce2db6db959 100644 (file)
@@ -12,12 +12,13 @@ import static org.junit.Assert.assertTrue;
 
 import ch.vorburger.xtendbeans.XtendBeanGenerator;
 import java.util.Collections;
-import java.util.List;
+import java.util.Map;
 import org.junit.Test;
 import org.opendaylight.genius.mdsalutil.InstructionInfo;
 import org.opendaylight.genius.mdsalutil.actions.ActionGroup;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
 
@@ -39,9 +40,9 @@ public class InstructionApplyActionsTest {
         assertEquals(2, instruction.key().getOrder().intValue());
         assertTrue(instruction.getInstruction() instanceof ApplyActionsCase);
         ApplyActionsCase applyActionsCase = (ApplyActionsCase) instruction.getInstruction();
-        List<Action> actions = applyActionsCase.getApplyActions().getAction();
+        Map<ActionKey, Action> actions = applyActionsCase.getApplyActions().getAction();
         assertEquals(1, actions.size());
-        Action action = actions.get(0);
+        Action action = actions.values().iterator().next();
         assertTrue(action.getAction() instanceof GroupActionCase);
     }
 
index e79e6f47a736a14d2bd9b556044f42da05c9f435..d2b0e35606772683494eb2f0966b4d3195b0bdbf 100644 (file)
@@ -12,12 +12,13 @@ import static org.junit.Assert.assertTrue;
 
 import ch.vorburger.xtendbeans.XtendBeanGenerator;
 import java.util.Collections;
-import java.util.List;
+import java.util.Map;
 import org.junit.Test;
 import org.opendaylight.genius.mdsalutil.InstructionInfo;
 import org.opendaylight.genius.mdsalutil.actions.ActionGroup;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
 
@@ -39,9 +40,9 @@ public class InstructionWriteActionsTest {
         assertEquals(2, instruction.key().getOrder().intValue());
         assertTrue(instruction.getInstruction() instanceof WriteActionsCase);
         WriteActionsCase writeActionsCase = (WriteActionsCase) instruction.getInstruction();
-        List<Action> actions = writeActionsCase.getWriteActions().getAction();
+        Map<ActionKey, Action> actions = writeActionsCase.getWriteActions().getAction();
         assertEquals(1, actions.size());
-        Action action = actions.get(0);
+        Action action = actions.values().iterator().next();
         assertTrue(action.getAction() instanceof GroupActionCase);
     }
 
index b2a9071e169feaf0ed70dedc193f1d26b1a88882..6688aa35ed7c4c38128d7b4c31231f649093a152 100644 (file)
@@ -41,7 +41,7 @@ public class FlowAssertTestUtils {
         InstructionsBuilder instructionsBuilder = new InstructionsBuilder();
         if (flow.getInstructions() != null) {
             ArrayList<Instruction> instructionList =
-                new ArrayList<>(flow.getInstructions().nonnullInstruction());
+                new ArrayList<>(flow.getInstructions().nonnullInstruction().values());
             instructionList.sort(Comparator.comparing(o -> o.key().toString()));
             instructionsBuilder.setInstruction(instructionList);
             flowBuilder.setInstructions(instructionsBuilder.build());
index d3630d7a93039dad4c6920da65be2345596de6d0..7dfa561eb99268cce5cc9ebc50d9be04f3b24cca 100644 (file)
@@ -7,17 +7,20 @@
  */
 package org.opendaylight.genius.mdsalutil.matches.tests;
 
-import static org.opendaylight.mdsal.binding.testutils.AssertDataObjects.assertEqualBeans;
+import static org.junit.Assert.assertEquals;
 
 import org.junit.ComparisonFailure;
 import org.junit.Test;
 import org.opendaylight.genius.mdsalutil.matches.MatchIpv4Source;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
 
 public class MatchIpv4SourceTest {
 
     @Test(expected = ComparisonFailure.class)
-    public void testMatchIpv4SourceAssertEqualBeans() {
-        assertEqualBeans(new MatchIpv4Source("10.0.0.1", "32"), new MatchIpv4Source("10.0.0.2", "32"));
+    public void testMatchIpv4SourceAssertEqual() {
+        MatchIpv4Source matchIpv4Source1 = new MatchIpv4Source(new Ipv4Prefix("10.0.0.1/32"));
+        MatchIpv4Source matchIpv4Source2 = new MatchIpv4Source(new Ipv4Prefix("10.0.0.2/32"));
+        assertEquals(matchIpv4Source1.toString(), matchIpv4Source2.toString());
     }
 
 }
index e06981853b00b1ccee04392b011bb55c73128103..4fffadcb8de347a7655e8c2757a4be944bfe5057 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.genius.mdsalutil.tests;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.opendaylight.mdsal.binding.testutils.AssertDataObjects.assertEqualBeans;
+import static org.junit.Assert.assertEquals;
 
 import ch.vorburger.xtendbeans.XtendBeanGenerator;
 import org.junit.ComparisonFailure;
@@ -34,29 +34,17 @@ public class FlowEntityAssertBeansTest {
             .setDpnId(Uint64.ONE).build();
 
     @Test(expected = ComparisonFailure.class)
-    public void testFlowEntityAssertEqualBeans() {
-        assertEqualBeans(FLOW1, FLOW2);
+    public void testFlowEntityAssertEquals() {
+        assertEquals(FLOW1.toString(), FLOW2.toString());
     }
 
     @Test
     public void testXtendBeanGenerator() {
         XtendBeanGenerator generator = new UintXtendBeanGenerator();
-        assertThat(generator.getExpression(FLOW1)).isEqualTo("(new FlowEntityBuilder => [\n"
-                + "    cookie = (u64)1114112\n"
-                + "    dpnId = (u64)1\n"
-                + "    flowId = \"A\"\n"
-                + "    hardTimeOut = 0\n"
-                + "    idleTimeOut = 0\n"
-                + "    instructionInfoList = #[\n"
-                + "    ]\n"
-                + "    matchInfoList = #[\n"
-                + "        new MatchIpv4Source(new Ipv4Prefix(\"10.0.0.1/32\"))\n"
-                + "    ]\n"
-                + "    priority = 0\n"
-                + "    sendFlowRemFlag = false\n"
-                + "    strictFlag = false\n"
-                + "    tableId = 1 as short\n"
-                + "]).build()");
+        assertThat(FLOW1.toString()).isEqualTo("FlowEntity{dpnId=1, cookie=1114112, flowId=A, hardTimeOut=0, "
+                + "idleTimeOut=0, " + "instructionInfoList=[],"
+                + " matchInfoList=[MatchIpv4Source[Ipv4Prefix{_value=10.0.0.1/32}]],"
+                + " priority=0, sendFlowRemFlag=false, strictFlag=false, tableId=1}");
     }
 
 }
index b6a955011a030a3292c3cd2c4334ab9f306b310f..0c4a55acbb42612947279496e268e8311989e0a3 100644 (file)
@@ -50,6 +50,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
+      <scope>provided</scope>
       <optional>true</optional>
     </dependency>
     <dependency>
@@ -100,7 +101,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>!-->
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
-      <artifactId>mdsal-binding-dom-adapter</artifactId>
+      <artifactId>mdsal-binding-test-utils</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
index d7fab55ed6d6cc826b7794805626c329ad6a440d..c9fa1ffad1fbbf1bbc17002c16401344b207c3b3 100644 (file)
@@ -9,7 +9,6 @@
 package org.opendaylight.genius.mdsalutil.internal;
 
 import static org.opendaylight.infrautils.utils.concurrent.Executors.newListeningSingleThreadExecutor;
-import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.util.concurrent.FluentFuture;
@@ -149,7 +148,7 @@ public class MDSALManager extends AbstractLifecycle implements IMdsalApiManager
         FlowBuilder flowbld = flowEntity.getFlowBuilder();
         InstanceIdentifier<Flow> flowInstanceId = buildFlowInstanceIdentifier(flowEntity.getDpnId(),
                 flowEntity.getTableId(), flowKey);
-        tx.put(flowInstanceId, flowbld.build(), true);
+        tx.mergeParentStructurePut(flowInstanceId, flowbld.build());
     }
 
     private static void writeFlowInternal(Uint64 dpId, Flow flow,
@@ -157,7 +156,7 @@ public class MDSALManager extends AbstractLifecycle implements IMdsalApiManager
         FlowKey flowKey = new FlowKey(new FlowId(flow.getId()));
         InstanceIdentifier<Flow> flowInstanceId = buildFlowInstanceIdentifier(dpId,
                                                             flow.getTableId().toJava(), flowKey);
-        tx.put(flowInstanceId, flow, true);
+        tx.mergeParentStructurePut(flowInstanceId, flow);
     }
 
     @VisibleForTesting
@@ -172,7 +171,7 @@ public class MDSALManager extends AbstractLifecycle implements IMdsalApiManager
         Group group = groupEntity.getGroupBuilder().build();
         Node nodeDpn = buildDpnNode(groupEntity.getDpnId());
         InstanceIdentifier<Group> groupInstanceId = buildGroupInstanceIdentifier(groupEntity.getGroupId(), nodeDpn);
-        tx.put(groupInstanceId, group, true);
+        tx.mergeParentStructurePut(groupInstanceId, group);
     }
 
     @VisibleForTesting
@@ -556,7 +555,7 @@ public class MDSALManager extends AbstractLifecycle implements IMdsalApiManager
     public void addFlow(TypedWriteTransaction<Configuration> tx, Uint64 dpId, Flow flow) {
         InstanceIdentifier<Flow> flowInstanceId = buildFlowInstanceIdentifier(dpId,
                                                             flow.getTableId().toJava(), flow.key());
-        tx.put(flowInstanceId, flow, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructurePut(flowInstanceId, flow);
     }
 
     @Override
@@ -569,7 +568,7 @@ public class MDSALManager extends AbstractLifecycle implements IMdsalApiManager
         Node nodeDpn = buildDpnNode(dpId);
         long groupId = group.getGroupId().getValue().toJava();
         InstanceIdentifier<Group> groupInstanceId = buildGroupInstanceIdentifier(groupId, nodeDpn);
-        tx.put(groupInstanceId, group, CREATE_MISSING_PARENTS);
+        tx.mergeParentStructurePut(groupInstanceId, group);
     }
 
     @Override
index 09e29459198eeba3cce0d8d16cde9e50004328d4..93584517f638755ac87bc9b1af734673bc430d5e 100644 (file)
@@ -38,7 +38,7 @@ class MdSalUtilBatchHandler implements ResourceHandler {
         if (datastoreType != this.getDatastoreType()) {
             return;
         }
-        tx.merge(datastoreType, identifier, (DataObject) update, true);
+        tx.mergeParentStructureMerge(datastoreType, identifier, (DataObject) update);
 
         buildSubTransactions(transactionObjects, identifier, update, SubTransaction.UPDATE);
     }
@@ -59,7 +59,7 @@ class MdSalUtilBatchHandler implements ResourceHandler {
         if (datastoreType != this.getDatastoreType()) {
             return;
         }
-        tx.put(datastoreType, identifier, (DataObject) data, true);
+        tx.mergeParentStructurePut(datastoreType, identifier, (DataObject) data);
 
         buildSubTransactions(transactionObjects, identifier, data, SubTransaction.CREATE);
     }
index a6d826254e06dabc9f432d231d2a22082837079d..0835f618f71c0f542da925bbe3c890876087b1ad 100644 (file)
@@ -303,7 +303,7 @@ public class DataTreeEventCallbackRegistrarTest {
         verify(mockScheduler).schedule(timerTask.capture(), eq(timeout.toMillis()), eq(TimeUnit.MILLISECONDS));
 
         new RetryingManagedNewTransactionRunner(db, 1).callWithNewWriteOnlyTransactionAndSubmit(
-            tx -> tx.put(OPERATIONAL, FOO_PATH, FOO_DATA, true));
+            tx -> tx.mergeParentStructurePut(OPERATIONAL, FOO_PATH, FOO_DATA));
 
         // Wait for the change notification callback to be invoked.
 
@@ -384,7 +384,7 @@ public class DataTreeEventCallbackRegistrarTest {
         }).when(mockListener).onDataTreeChanged(anyCollection());
 
         new RetryingManagedNewTransactionRunner(db, 1).callWithNewWriteOnlyTransactionAndSubmit(
-            tx -> tx.put(OPERATIONAL, FOO_PATH, FOO_DATA, true));
+            tx -> tx.mergeParentStructurePut(OPERATIONAL, FOO_PATH, FOO_DATA));
 
         await().untilTrue(onDataTreeChangeDone);
         assertThat(updated.get()).isFalse();
index b7a8254b9343bafad9862f14c8406d1bc36de678..68ec250830e737044d839064ca2d74bf8dccea19 100644 (file)
@@ -83,8 +83,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>!-->
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
-      <artifactId>mdsal-binding-dom-adapter</artifactId>
-      <scope>compile</scope>
+      <artifactId>mdsal-binding-test-utils</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
index 597adde20469bfcb58cb4de74c12618696d5ba49..3f97b1cac713449c1c108e65840f3250de733d49 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
index 094399b86f1bc2d74e6ce33390b0665a0b0c7558..dab3ef212035b21924f3541bd6fe898232a43666 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>
 
diff --git a/pom.xml b/pom.xml
index 8fdd00aa89624b20d04420785788e220b2afc82c..ffc953aa0bb063e3d2d59a27b39a801e0eda16c8 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL -->
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>6.0.4</version>
+    <version>7.0.1</version>
     <relativePath/>
   </parent>