From 8a228e4974b9e6909df0a4aa7866eadfee9e438c Mon Sep 17 00:00:00 2001 From: Nidhi Adhvaryu Date: Wed, 6 May 2020 15:51:48 +0530 Subject: [PATCH] MRI version bump for Aluminium 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 Signed-off-by: Nidhi Adhvaryu Signed-off-by: Apurba Mukherjee Change-Id: I508ba70555f52da12439a3963d642fc60cfe7775 --- .../alivenessmonitor-impl/pom.xml | 1 + .../internal/AlivenessMonitor.java | 18 +-- .../internal/HwVtepTunnelsStateHandler.java | 55 +++++--- .../AlivenessProtocolHandlerRegistryImpl.java | 1 - alivenessmonitor/pom.xml | 2 +- .../genius/arputil/internal/ArpUtilImpl.java | 17 +-- .../test/TestOdlInterfaceRpcService.java | 1 - .../test/TestPacketProcessingService.java | 1 - arputil/pom.xml | 2 +- artifacts/pom.xml | 2 +- .../rpcservice/CloudscalerRpcServiceImpl.java | 6 +- .../rpcservice/ComputeNodeManager.java | 2 +- cloudscaler/pom.xml | 2 +- commons/binding-parent/pom.xml | 16 ++- commons/checkstyle/pom.xml | 2 +- commons/pom.xml | 2 +- commons/quality-parent/pom.xml | 8 +- .../fcapsapplication-impl/pom.xml | 1 + fcapsapplication/pom.xml | 2 +- fcapsmanager/pom.xml | 2 +- features/genius-features/pom.xml | 2 +- features/odl-genius-api/pom.xml | 4 +- .../src/main/feature/feature.xml | 2 +- features/odl-genius-fcaps-application/pom.xml | 2 +- features/odl-genius-fcaps-framework/pom.xml | 2 +- features/odl-genius-rest/pom.xml | 2 +- features/odl-genius/pom.xml | 2 +- features/pom.xml | 2 +- idmanager/idmanager-impl/pom.xml | 1 + .../genius/idmanager/IdManager.java | 35 +++-- .../genius/idmanager/IdUtils.java | 4 +- .../idmanager/jobs/IdHolderSyncJob.java | 3 +- .../idmanager/jobs/LocalPoolCreateJob.java | 3 +- ...cateIdMultipleRequestsFromReleaseIds.xtend | 11 ++ .../genius/idmanager/test/IdManagerTest.java | 20 ++- idmanager/pom.xml | 2 +- .../globals/InterfaceServiceUtil.java | 1 - .../interfacemanager-impl/pom.xml | 1 + .../genius/interfacemanager/IfmUtil.java | 9 +- .../InterfacemgrProvider.java | 22 +-- .../commons/AlivenessMonitorUtils.java | 13 +- .../commons/InterfaceManagerCommonUtils.java | 20 +-- .../commons/InterfaceMetaUtils.java | 19 ++- .../diagstatus/IfmDiagStatusProvider.java | 1 - .../AlivenessMonitorListenerImpl.java | 2 - .../CacheBridgeEntryConfigListener.java | 1 - .../CacheBridgeRefEntryListener.java | 1 - .../listeners/HwVTEPConfigListener.java | 6 +- .../listeners/IfIndexInterfaceCache.java | 1 - .../listeners/InterfaceChildCache.java | 13 +- .../InterfaceInventoryStateListener.java | 22 +-- .../listeners/InterfaceStateListener.java | 1 - .../TerminationPointStateListener.java | 2 - .../pmcounters/NodeConnectorStatsImpl.java | 17 ++- .../InterfaceInstanceRecoveryHandler.java | 1 - .../impl/InterfaceServiceRecoveryHandler.java | 1 - .../HwVTEPInterfaceConfigAddHelper.java | 3 +- .../HwVTEPInterfaceConfigUpdateHelper.java | 3 +- .../HwVTEPInterfaceStateUpdateHelper.java | 9 +- .../hwvtep/utilities/SouthboundUtils.java | 4 +- .../OvsInterfaceConfigRemoveHelper.java | 12 +- .../OvsInterfaceConfigUpdateHelper.java | 9 +- .../OvsVlanMemberConfigAddHelper.java | 1 - .../OvsVlanMemberConfigRemoveHelper.java | 4 +- .../OvsVlanMemberConfigUpdateHelper.java | 1 - .../OvsInterfaceStateUpdateHelper.java | 1 - ...OvsInterfaceTopologyStateUpdateHelper.java | 6 +- .../ovs/utilities/InterfaceBatchHandler.java | 4 +- .../ovs/utilities/SouthboundUtils.java | 20 +-- .../InterfaceManagerServiceImpl.java | 8 +- .../FlowBasedServicesConfigListener.java | 2 +- ...owBasedServicesInterfaceStateListener.java | 2 +- .../utilities/ActionConverterUtil.java | 11 +- .../utilities/FlowBasedServicesUtils.java | 75 ++++++----- .../InterfaceManagerConfigurationTest.java | 6 +- .../test/InterfaceManagerTestModule.java | 3 +- .../test/InterfaceManagerTestUtil.java | 9 +- .../test/OvsdbSouthboundTestUtil.java | 10 +- .../interfacemanager/shell/IfmCLIUtil.java | 2 +- .../interfacemanager/shell/ShowVlan.java | 1 - interfacemanager/pom.xml | 2 +- .../ipv6util/nd/Ipv6NdUtilServiceImpl.java | 2 +- ipv6util/pom.xml | 2 +- itm/itm-api/pom.xml | 1 + itm/itm-impl/pom.xml | 1 + .../genius/itm/cache/DpnTepStateCache.java | 8 +- .../genius/itm/cli/TepCommandHelper.java | 21 +-- .../ItmExternalTunnelAddWorker.java | 20 +-- .../ItmExternalTunnelDeleteWorker.java | 15 ++- .../ItmInternalTunnelAddWorker.java | 3 +- .../ItmInternalTunnelDeleteWorker.java | 12 +- .../itm/confighelpers/ItmMonitorWorker.java | 2 +- .../itm/confighelpers/ItmTepAddWorker.java | 2 +- .../itm/confighelpers/ItmTepRemoveWorker.java | 7 +- .../ItmTepsNotHostedAddWorker.java | 6 +- .../ItmTunnelAggregationHelper.java | 40 ++++-- .../OvsdbTepAddConfigHelper.java | 25 ++-- .../OvsdbTepRemoveConfigHelper.java | 10 +- .../genius/itm/impl/ItmUtils.java | 67 ++++----- .../TerminationPointStateListener.java | 10 +- .../TunnelTopologyStateListener.java | 14 +- .../ovs/utilities/DirectTunnelUtils.java | 10 +- .../itm/listeners/OvsdbNodeListener.java | 14 +- .../itm/listeners/TransportZoneListener.java | 27 ++-- .../monitoring/ItmTunnelEventListener.java | 5 +- .../impl/ItmTepInstanceRecoveryHandler.java | 14 +- .../impl/ItmTzInstanceRecoveryHandler.java | 7 +- .../genius/itm/rpc/ItmManagerRpcService.java | 29 ++-- .../genius/itm/cli/TepCommandHelperTest.java | 38 +++++- .../itm/impl/ItmExternalTunnelAddTest.java | 34 ++--- .../itm/impl/ItmInternalTunnelAddTest.java | 24 ++-- .../itm/impl/ItmManagerRpcServiceTest.java | 18 +-- .../itm/tests/ItmManagerRpcServiceTest.java | 2 +- .../itm/tests/ItmTepAutoConfigTest.java | 127 +++++++++--------- .../genius/itm/tests/ItmTestModule.java | 2 +- .../genius/itm/tests/OvsdbTestUtil.java | 8 +- itm/pom.xml | 2 +- karaf/pom.xml | 2 +- lockmanager/pom.xml | 2 +- .../mdsal/testutils/DataBrokerTestWiring.java | 13 +- mdsalutil/mdsalutil-api/pom.xml | 8 +- .../SingleTransactionDataBroker.java | 4 +- .../genius/infra/TransactionAdapter.java | 30 +---- .../genius/infra/TypedWriteTransaction.java | 8 +- .../infra/TypedWriteTransactionImpl.java | 8 +- ...TrackingTypedReadWriteTransactionImpl.java | 8 +- ...riteTrackingTypedWriteTransactionImpl.java | 8 +- .../infra/WriteTrackingWriteTransaction.java | 12 +- .../genius/mdsalutil/MDSALUtil.java | 4 +- .../opendaylight/genius/mdsalutil/NWUtil.java | 2 +- .../ericmatches/EricMatchInfoHelper.java | 13 +- .../nxmatches/NxMatchInfoHelper.java | 19 +-- .../utils/batching/DefaultBatchHandler.java | 4 +- .../batching/ResourceBatchingManager.java | 12 +- .../genius/utils/hwvtep/HwvtepUtils.java | 22 ++- .../actions/ActionLoadMacToShaTest.java | 5 +- .../actions/ActionNxConntrackTest.java | 10 +- .../actions/ActionSetDestinationIpTest.java | 4 +- ...ActionSetFieldEthernetDestinationTest.java | 4 +- .../ActionSetFieldEthernetSourceTest.java | 4 +- .../actions/ActionSetSourceIpTest.java | 4 +- .../actions/ActionSetSourceIpv6Test.java | 4 +- .../InstructionApplyActionsTest.java | 7 +- .../InstructionWriteActionsTest.java | 7 +- .../testutils/FlowAssertTestUtils.java | 2 +- .../matches/tests/MatchIpv4SourceTest.java | 9 +- .../tests/FlowEntityAssertBeansTest.java | 26 +--- mdsalutil/mdsalutil-impl/pom.xml | 3 +- .../mdsalutil/internal/MDSALManager.java | 11 +- .../internal/MdSalUtilBatchHandler.java | 4 +- .../DataTreeEventCallbackRegistrarTest.java | 4 +- mdsalutil/mdsalutil-testutils/pom.xml | 4 +- mdsalutil/pom.xml | 2 +- networkutils/pom.xml | 2 +- pom.xml | 2 +- 155 files changed, 833 insertions(+), 695 deletions(-) diff --git a/alivenessmonitor/alivenessmonitor-impl/pom.xml b/alivenessmonitor/alivenessmonitor-impl/pom.xml index e85706193..2a39fcb1e 100644 --- a/alivenessmonitor/alivenessmonitor-impl/pom.xml +++ b/alivenessmonitor/alivenessmonitor-impl/pom.xml @@ -69,6 +69,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject + provided true diff --git a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java index e838dde35..02405b89c 100644 --- a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java +++ b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java @@ -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() { @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() { @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 { diff --git a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/HwVtepTunnelsStateHandler.java b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/HwVtepTunnelsStateHandler.java index 1beacb7ae..6ed5dfb32 100644 --- a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/HwVtepTunnelsStateHandler.java +++ b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/HwVtepTunnelsStateHandler.java @@ -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 instanceIdentifier, @NonNull Tunnels oldTunnelInfo, @NonNull Tunnels updatedTunnelInfo) { - List oldBfdStatus = oldTunnelInfo.getBfdStatus(); - List newBfdStatus = updatedTunnelInfo.getBfdStatus(); + @Nullable Map oldBfdStatus = oldTunnelInfo.getBfdStatus(); + @Nullable Map 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 tunnelBfdStatus) { + private LivenessState getTunnelOpState(Map 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 tunnelBfdParams = tunnel.getBfdParams(); + @Nullable Map tunnelBfdParams = tunnel.getBfdParams(); if (tunnelBfdParams == null || tunnelBfdParams.isEmpty()) { LOG.debug("there is no bfd params available for the tunnel {}", tunnel); return; } - Iterator tunnelBfdParamsIterator = tunnelBfdParams.iterator(); + Iterator 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 = ""; String tunnelLocalIpAddress = ""; String tunnelRemoteMacAddress = ""; - List bfdParams = new ArrayList<>(); + Map bfdParams = new HashMap<>(); fillBfdParams(bfdParams, profile); List bfdLocalConfigs = new ArrayList<>(); fillBfdLocalConfigs(bfdLocalConfigs, tunnelLocalMacAddress, tunnelLocalIpAddress); @@ -319,21 +322,35 @@ public class HwVtepTunnelsStateHandler extends AbstractSyncDataTreeChangeListene .setBfdLocalConfigValue(value).build(); } - private void fillBfdParams(List bfdParams, MonitorProfile profile) { + private void fillBfdParams(Map 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, boolean isEnabled) { - bfdParams.add(getBfdParams(AlivenessMonitorConstants.BFD_PARAM_ENABLE, Boolean.toString(isEnabled))); + private void setBfdParamForEnable(Map 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) { diff --git a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/protocols/impl/AlivenessProtocolHandlerRegistryImpl.java b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/protocols/impl/AlivenessProtocolHandlerRegistryImpl.java index e659f2192..33d462df7 100644 --- a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/protocols/impl/AlivenessProtocolHandlerRegistryImpl.java +++ b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/protocols/impl/AlivenessProtocolHandlerRegistryImpl.java @@ -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; diff --git a/alivenessmonitor/pom.xml b/alivenessmonitor/pom.xml index 56563aaeb..ff83f64f9 100644 --- a/alivenessmonitor/pom.xml +++ b/alivenessmonitor/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/arputil/arputil-impl/src/main/java/org/opendaylight/genius/arputil/internal/ArpUtilImpl.java b/arputil/arputil-impl/src/main/java/org/opendaylight/genius/arputil/internal/ArpUtilImpl.java index a3b31affe..788f69f9c 100644 --- a/arputil/arputil-impl/src/main/java/org/opendaylight/genius/arputil/internal/ArpUtilImpl.java +++ b/arputil/arputil-impl/src/main/java/org/opendaylight/genius/arputil/internal/ArpUtilImpl.java @@ -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 actions = getEgressAction(interfaceName); + Map 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> sendPacketOutWithActions( - Uint64 dpnId, byte[] payload, NodeConnectorRef ref, List actions) { + Uint64 dpnId, byte[] payload, NodeConnectorRef ref, Map 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 getEgressAction(String interfaceName) { - List actions = new ArrayList<>(); + private Map getEgressAction(String interfaceName) { + Map 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 actions = getEgressAction(interfaceName); + Map 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), diff --git a/arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestOdlInterfaceRpcService.java b/arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestOdlInterfaceRpcService.java index 5d29af167..23bf56859 100644 --- a/arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestOdlInterfaceRpcService.java +++ b/arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestOdlInterfaceRpcService.java @@ -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; diff --git a/arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestPacketProcessingService.java b/arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestPacketProcessingService.java index 350e69a0a..aeb9a0cfb 100644 --- a/arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestPacketProcessingService.java +++ b/arputil/arputil-impl/src/test/java/org/opendaylight/genius/arputil/test/TestPacketProcessingService.java @@ -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; diff --git a/arputil/pom.xml b/arputil/pom.xml index 55d437155..53aad2be5 100644 --- a/arputil/pom.xml +++ b/arputil/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/artifacts/pom.xml b/artifacts/pom.xml index e5b28f65b..a33173412 100644 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/CloudscalerRpcServiceImpl.java b/cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/CloudscalerRpcServiceImpl.java index 2ba9a2ba3..9209942f1 100644 --- a/cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/CloudscalerRpcServiceImpl.java +++ b/cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/CloudscalerRpcServiceImpl.java @@ -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 dpnVtepIid = InstanceIdentifier .create(TransportZones.class) diff --git a/cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/ComputeNodeManager.java b/cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/ComputeNodeManager.java index e30a19e8e..086d3a812 100644 --- a/cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/ComputeNodeManager.java +++ b/cloudscaler/impl/src/main/java/org/opendaylight/genius/cloudscaler/rpcservice/ComputeNodeManager.java @@ -107,7 +107,7 @@ public class ComputeNodeManager { OvsdbBridgeAugmentation bridgeAugmentation = node.augmentation(OvsdbBridgeAugmentation.class); if (bridgeAugmentation != null && bridgeAugmentation.getBridgeOtherConfigs() != null) { Uint64 datapathid = getDpnIdFromBridge(bridgeAugmentation); - Optional otherConfigOptional = bridgeAugmentation.getBridgeOtherConfigs() + Optional otherConfigOptional = bridgeAugmentation.getBridgeOtherConfigs().values() .stream() .filter(otherConfig -> otherConfig.getBridgeOtherConfigKey().equals("dp-desc")) .findFirst(); diff --git a/cloudscaler/pom.xml b/cloudscaler/pom.xml index c4ecf6572..634132b0a 100644 --- a/cloudscaler/pom.xml +++ b/cloudscaler/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/commons/binding-parent/pom.xml b/commons/binding-parent/pom.xml index b815d3a65..4f04a1e5d 100644 --- a/commons/binding-parent/pom.xml +++ b/commons/binding-parent/pom.xml @@ -10,7 +10,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal binding-parent - 5.0.9 + 6.0.0 @@ -33,8 +33,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.controller - mdsal-artifacts - 1.11.0 + controller-artifacts + 2.0.0 pom import @@ -45,6 +45,16 @@ and is available at http://www.eclipse.org/legal/epl-v10.html pom import + + com.mycila.guice.extensions + mycila-guice-jsr250 + 4.0.rc1 + + + com.google.inject + guice + 4.2.2 + org.opendaylight.serviceutils serviceutils-artifacts diff --git a/commons/checkstyle/pom.xml b/commons/checkstyle/pom.xml index 8214ab586..06cf97fbd 100644 --- a/commons/checkstyle/pom.xml +++ b/commons/checkstyle/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent - 6.0.4 + 7.0.1 diff --git a/commons/pom.xml b/commons/pom.xml index 6bd70877f..31b2be949 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/commons/quality-parent/pom.xml b/commons/quality-parent/pom.xml index 88b12e51f..dbd79e05a 100644 --- a/commons/quality-parent/pom.xml +++ b/commons/quality-parent/pom.xml @@ -29,21 +29,21 @@ org.opendaylight.yangtools yangtools-artifacts - 4.0.6 + 5.0.1 pom import org.opendaylight.controller - mdsal-artifacts - 1.11.0 + controller-artifacts + 2.0.0 pom import org.opendaylight.mdsal mdsal-artifacts - 5.0.9 + 6.0.0 pom import diff --git a/fcapsapplication/fcapsapplication-impl/pom.xml b/fcapsapplication/fcapsapplication-impl/pom.xml index 5c1eb7f20..847edeec9 100644 --- a/fcapsapplication/fcapsapplication-impl/pom.xml +++ b/fcapsapplication/fcapsapplication-impl/pom.xml @@ -48,6 +48,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject + provided true diff --git a/fcapsapplication/pom.xml b/fcapsapplication/pom.xml index 36de3bf64..aac128a6f 100644 --- a/fcapsapplication/pom.xml +++ b/fcapsapplication/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/fcapsmanager/pom.xml b/fcapsmanager/pom.xml index c72fd9cb0..0f9b0ad90 100644 --- a/fcapsmanager/pom.xml +++ b/fcapsmanager/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/genius-features/pom.xml b/features/genius-features/pom.xml index b9144e8c2..0015d6d93 100644 --- a/features/genius-features/pom.xml +++ b/features/genius-features/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent feature-repo-parent - 6.0.4 + 7.0.1 diff --git a/features/odl-genius-api/pom.xml b/features/odl-genius-api/pom.xml index de84c05cf..3bb5f3e47 100644 --- a/features/odl-genius-api/pom.xml +++ b/features/odl-genius-api/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 @@ -27,7 +27,7 @@ org.opendaylight.mdsal mdsal-artifacts - 5.0.9 + 6.0.0 import pom diff --git a/features/odl-genius-api/src/main/feature/feature.xml b/features/odl-genius-api/src/main/feature/feature.xml index 68914ceb4..1cb84b8d6 100644 --- a/features/odl-genius-api/src/main/feature/feature.xml +++ b/features/odl-genius-api/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-apache-commons-net + odl-apache-commons-net diff --git a/features/odl-genius-fcaps-application/pom.xml b/features/odl-genius-fcaps-application/pom.xml index a4402f050..a0bebf668 100644 --- a/features/odl-genius-fcaps-application/pom.xml +++ b/features/odl-genius-fcaps-application/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/features/odl-genius-fcaps-framework/pom.xml b/features/odl-genius-fcaps-framework/pom.xml index 43336bd6a..420ee220b 100644 --- a/features/odl-genius-fcaps-framework/pom.xml +++ b/features/odl-genius-fcaps-framework/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/features/odl-genius-rest/pom.xml b/features/odl-genius-rest/pom.xml index 09c532e97..def7b2ff2 100644 --- a/features/odl-genius-rest/pom.xml +++ b/features/odl-genius-rest/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/features/odl-genius/pom.xml b/features/odl-genius/pom.xml index a01a8c43b..00e0d3831 100644 --- a/features/odl-genius/pom.xml +++ b/features/odl-genius/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/features/pom.xml b/features/pom.xml index 819e5e637..24ad747da 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/idmanager/idmanager-impl/pom.xml b/idmanager/idmanager-impl/pom.xml index 870c45e27..6c4eac7f7 100644 --- a/idmanager/idmanager-impl/pom.xml +++ b/idmanager/idmanager-impl/pom.xml @@ -49,6 +49,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject + provided true diff --git a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdManager.java b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdManager.java index 302d885b1..9c43f90ee 100644 --- a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdManager.java +++ b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdManager.java @@ -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 idPoolToBeDeleted = idUtils.getIdPoolInstance(poolName); synchronized (poolName) { IdPool idPool = singleTxDB.syncRead(LogicalDatastoreType.CONFIGURATION, idPoolToBeDeleted); - List childPoolList = idPool.getChildPools(); + //List childPoolList = idPool.getChildPools(); + + + @Nullable Map 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 childPoolsList = parentIdPool.nonnullChildPools(); + @Nullable Map 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 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 parentIdPoolInstanceIdentifier = idUtils.getIdPoolInstance(parentPoolName); IdPool parentIdPool = singleTxDB.syncRead(LogicalDatastoreType.CONFIGURATION, parentIdPoolInstanceIdentifier); - List idEntries = parentIdPool.getIdEntries(); + @Nullable Map 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 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()) { diff --git a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdUtils.java b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdUtils.java index 1fefd680d..3b08f2fb1 100644 --- a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdUtils.java +++ b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdUtils.java @@ -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 childPoolInstanceIdentifier = getChildPoolsInstanceIdentifier(poolName, localPoolName); - tx.merge(childPoolInstanceIdentifier, childPool, CREATE_MISSING_PARENTS); + tx.mergeParentStructureMerge(childPoolInstanceIdentifier, childPool); } public void incrementPoolUpdatedMap(String localPoolName) { diff --git a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/IdHolderSyncJob.java b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/IdHolderSyncJob.java index c8c3876ce..c81deee33 100644 --- a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/IdHolderSyncJob.java +++ b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/IdHolderSyncJob.java @@ -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 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()) { diff --git a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/LocalPoolCreateJob.java b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/LocalPoolCreateJob.java index 259c9acc7..40cc8ae55 100644 --- a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/LocalPoolCreateJob.java +++ b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/jobs/LocalPoolCreateJob.java @@ -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 tx.put(localPoolInstanceIdentifier, idPool.build(), CREATE_MISSING_PARENTS))); + tx -> tx.mergeParentStructurePut(localPoolInstanceIdentifier, idPool.build()))); } } diff --git a/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/ExpectedAllocateIdMultipleRequestsFromReleaseIds.xtend b/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/ExpectedAllocateIdMultipleRequestsFromReleaseIds.xtend index 0827d5a9d..ffcd8087a 100644 --- a/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/ExpectedAllocateIdMultipleRequestsFromReleaseIds.xtend +++ b/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/ExpectedAllocateIdMultipleRequestsFromReleaseIds.xtend @@ -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) + ] + ] ] ] } diff --git a/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/IdManagerTest.java b/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/IdManagerTest.java index 4c0b1c038..b80731f0a 100644 --- a/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/IdManagerTest.java +++ b/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/IdManagerTest.java @@ -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 childPool = idPoolParentFromDS.nonnullChildPools(); - List updatedChildPool = childPool.stream() + @NonNull Map childPool = idPoolParentFromDS.nonnullChildPools(); + + List childPoolList = childPool.values().stream().collect(Collectors.toList()); + List updatedChildPool = childPoolList.stream() .map(child -> new ChildPoolsBuilder(child).setLastAccessTime(0L).build()).collect(Collectors.toList()); - List idEntries = idPoolParentFromDS.getIdEntries(); + + @Nullable Map idEntries = idPoolParentFromDS.getIdEntries(); IdPoolBuilder idPoolBuilder = new IdPoolBuilder(idPoolParentFromDS); if (idEntries != null) { - List sortedIdEntries = idEntries.stream().sorted(comparing(IdEntries::getIdKey)) + List sortedIdEntries = idEntries.values().stream().sorted(comparing(IdEntries::getIdKey)) .collect(Collectors.toList()); idPoolBuilder.setIdEntries(sortedIdEntries); } diff --git a/idmanager/pom.xml b/idmanager/pom.xml index 39f1b2f0e..501281096 100644 --- a/idmanager/pom.xml +++ b/idmanager/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/interfacemanager/interfacemanager-api/src/main/java/org/opendaylight/genius/interfacemanager/globals/InterfaceServiceUtil.java b/interfacemanager/interfacemanager-api/src/main/java/org/opendaylight/genius/interfacemanager/globals/InterfaceServiceUtil.java index 8c4266301..549a1ad0e 100644 --- a/interfacemanager/interfacemanager-api/src/main/java/org/opendaylight/genius/interfacemanager/globals/InterfaceServiceUtil.java +++ b/interfacemanager/interfacemanager-api/src/main/java/org/opendaylight/genius/interfacemanager/globals/InterfaceServiceUtil.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/pom.xml b/interfacemanager/interfacemanager-impl/pom.xml index 4ff6f974f..a9c5a8bf8 100644 --- a/interfacemanager/interfacemanager-impl/pom.xml +++ b/interfacemanager/interfacemanager-impl/pom.xml @@ -100,6 +100,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject + provided true diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java index 0a48927cc..1ae6460e1 100755 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java @@ -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 instructions) { + public static Uint64[] mergeOpenflowMetadataWriteInstructions(Map 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 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, diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/InterfacemgrProvider.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/InterfacemgrProvider.java index 6de13284a..f05f922b1 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/InterfacemgrProvider.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/InterfacemgrProvider.java @@ -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 interfaceIId = InterfaceManagerCommonUtils .getInterfaceIdentifier(new InterfaceKey(interfaceName)); ListenableFuture 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 childEntries = parentEntry.getInterfaceChildEntry(); + @Nullable Map childEntries = parentEntry.getInterfaceChildEntry(); if (childEntries == null || childEntries.isEmpty()) { LOG.debug("No child entries found for parent {}", parentInterface); return Collections.emptyList(); } List 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 getPortsOnBridge(Uint64 dpnId) { List ports = new ArrayList<>(); - List portList = interfaceMetaUtils.getTerminationPointsOnBridge(dpnId); - for (TerminationPoint ovsPort : portList) { + Map 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 getTunnelPortsOnBridge(Uint64 dpnId) { List tunnelPorts = new ArrayList<>(); - List portList = interfaceMetaUtils.getTerminationPointsOnBridge(dpnId); - for (TerminationPoint ovsPort : portList) { + Map 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, List> portMap; portMap = new ConcurrentHashMap<>(); - List ovsPorts = interfaceMetaUtils.getTerminationPointsOnBridge(dpnId); + Map 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) { diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/AlivenessMonitorUtils.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/AlivenessMonitorUtils.java index 978f2a131..1b306ba77 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/AlivenessMonitorUtils.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/AlivenessMonitorUtils.java @@ -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); } } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceManagerCommonUtils.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceManagerCommonUtils.java index 5a388ed5f..620c1bd9a 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceManagerCommonUtils.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceManagerCommonUtils.java @@ -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 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 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 interfaceChildEntries = interfaceParentEntry.getInterfaceChildEntry(); + Map 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 getAllInterfaces(Uint64 dpnId) { + public Map getAllInterfaces(Uint64 dpnId) { DpnToInterfaceKey dpnToInterfaceKey = new DpnToInterfaceKey(dpnId); InstanceIdentifier dpninterfaceListId = InstanceIdentifier.builder(DpnToInterfaceList.class).child(DpnToInterface.class, dpnToInterfaceKey).build(); @@ -750,7 +751,8 @@ public final class InterfaceManagerCommonUtils { return; } - List interfaceNameEntries = dpnToInterfaceOptional.get().getInterfaceNameEntry(); + Map interfaceNameEntries = + dpnToInterfaceOptional.get().getInterfaceNameEntry(); InterfaceNameEntryKey interfaceNameEntryKey = new InterfaceNameEntryKey(infName); InstanceIdentifier intfid = InstanceIdentifier.builder(DpnToInterfaceList.class) .child(DpnToInterface.class, dpnToInterfaceKey) diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceMetaUtils.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceMetaUtils.java index 61f876c78..6bb32a578 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceMetaUtils.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/commons/InterfaceMetaUtils.java @@ -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 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 bridgeInterfaceEntries, InstanceIdentifier bridgeEntryIid, - String interfaceName) { + Map bridgeInterfaceEntries, + InstanceIdentifier bridgeEntryIid, String interfaceName) { BridgeInterfaceEntryKey bridgeInterfaceEntryKey = new BridgeInterfaceEntryKey(interfaceName); InstanceIdentifier bridgeInterfaceEntryIid = @@ -389,11 +388,11 @@ public final class InterfaceMetaUtils { } } - public List getTerminationPointsOnBridge(Uint64 dpnId) { + public Map 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 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 diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/diagstatus/IfmDiagStatusProvider.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/diagstatus/IfmDiagStatusProvider.java index 84825b67d..711abbb86 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/diagstatus/IfmDiagStatusProvider.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/diagstatus/IfmDiagStatusProvider.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/AlivenessMonitorListenerImpl.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/AlivenessMonitorListenerImpl.java index 7e121bd94..287e7205d 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/AlivenessMonitorListenerImpl.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/AlivenessMonitorListenerImpl.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeEntryConfigListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeEntryConfigListener.java index a9ec51c41..2f00e69cc 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeEntryConfigListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeEntryConfigListener.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeRefEntryListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeRefEntryListener.java index 619d6b35a..7937ef881 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeRefEntryListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/CacheBridgeRefEntryListener.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/HwVTEPConfigListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/HwVTEPConfigListener.java index c949c3737..63396351b 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/HwVTEPConfigListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/HwVTEPConfigListener.java @@ -60,7 +60,7 @@ public class HwVTEPConfigListener extends AbstractSyncDataTreeChangeListener HwVTEPConfigRemoveHelper .removeConfiguration(txRunner, removedInterface, @@ -86,7 +86,7 @@ public class HwVTEPConfigListener extends AbstractSyncDataTreeChangeListener HwVTEPInterfaceConfigUpdateHelper .updateConfiguration(txRunner, @@ -108,7 +108,7 @@ public class HwVTEPConfigListener extends AbstractSyncDataTreeChangeListener HwVTEPInterfaceConfigAddHelper .addConfiguration(txRunner, diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/IfIndexInterfaceCache.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/IfIndexInterfaceCache.java index e9b6fcac9..e8bf5a624 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/IfIndexInterfaceCache.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/IfIndexInterfaceCache.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceChildCache.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceChildCache.java index 1b9c2fdfc..d77b01aff 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceChildCache.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceChildCache.java @@ -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> getInterfaceChildEntries(String parentInterfaceName) { + public Optional> + getInterfaceChildEntries(String parentInterfaceName) { try { Optional interfaceParentEntry = dataObjectCache.get( getInterfaceParentEntryIdentifier(parentInterfaceName)); if (interfaceParentEntry.isPresent()) { - List interfaceChildEntries = interfaceParentEntry.get() + Map 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); diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceInventoryStateListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceInventoryStateListener.java index f12f0c38b..30f8c3459 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceInventoryStateListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceInventoryStateListener.java @@ -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> futures = ovsInterfaceStateAddHelper.addState(nodeConnectorId, interfaceName, fcNodeConnectorNew); - List interfaceChildEntries = getInterfaceChildEntries(interfaceName); - for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) { + Map 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> call() { List> futures = ovsInterfaceStateUpdateHelper.updateState( interfaceName, fcNodeConnectorNew, fcNodeConnectorOld); - List interfaceChildEntries = getInterfaceChildEntries(interfaceName); - for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) { + Map 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> futures = removeInterfaceStateConfiguration(); - List interfaceChildEntries = getInterfaceChildEntries(interfaceName); - for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) { + Map 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 getInterfaceChildEntries(String interfaceName) { + public Map getInterfaceChildEntries(String interfaceName) { InterfaceParentEntry interfaceParentEntry = interfaceMetaUtils.getInterfaceParentEntryFromConfigDS(interfaceName); if (interfaceParentEntry != null && interfaceParentEntry.getInterfaceChildEntry() != null) { return interfaceParentEntry.getInterfaceChildEntry(); } - return new ArrayList<>(); + return new HashMap<>(); } } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceStateListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceStateListener.java index ea32d2da8..2f3644665 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceStateListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceStateListener.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/TerminationPointStateListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/TerminationPointStateListener.java index 497c49160..dbca6ad41 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/TerminationPointStateListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/TerminationPointStateListener.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/pmcounters/NodeConnectorStatsImpl.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/pmcounters/NodeConnectorStatsImpl.java index 0007c725e..97e740c56 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/pmcounters/NodeConnectorStatsImpl.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/pmcounters/NodeConnectorStatsImpl.java @@ -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 ncStatsAndPortMapList = nodeConnectorStatisticsOutput - .nonnullNodeConnectorStatisticsAndPortNumberMap(); + @NonNull Map + 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 portName = portNameCache.get(portNameInCache); if (portName.isPresent()) { - Optional> interfaceChildEntries = interfaceChildCache + Optional> 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 flowTableMap = new HashMap<>(); // Get all flows for node from RPC result - List flowTableAndStatisticsMapList = + @NonNull Map 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(); diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceInstanceRecoveryHandler.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceInstanceRecoveryHandler.java index c08c0d81a..ee54798d2 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceInstanceRecoveryHandler.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceInstanceRecoveryHandler.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceServiceRecoveryHandler.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceServiceRecoveryHandler.java index 1b178c3b0..37b987dd8 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceServiceRecoveryHandler.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/recovery/impl/InterfaceServiceRecoveryHandler.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigAddHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigAddHelper.java index 30eed7fd7..e89828632 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigAddHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigAddHelper.java @@ -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()); } } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigUpdateHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigUpdateHelper.java index 67b14ae0f..54b49467c 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigUpdateHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/confighelpers/HwVTEPInterfaceConfigUpdateHelper.java @@ -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()))); } } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/statehelpers/HwVTEPInterfaceStateUpdateHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/statehelpers/HwVTEPInterfaceStateUpdateHelper.java index c29aff14d..853e6de35 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/statehelpers/HwVTEPInterfaceStateUpdateHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/statehelpers/HwVTEPInterfaceStateUpdateHelper.java @@ -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 tunnelBfdStatus) { + private static OperStatus getTunnelOpState(Map 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()))); } } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/utilities/SouthboundUtils.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/utilities/SouthboundUtils.java index a55c9e1d0..d5e38f2d9 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/utilities/SouthboundUtils.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/hwvtep/utilities/SouthboundUtils.java @@ -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()); } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java index 453bc9f4d..36e2632cd 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java @@ -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 bridgeInterfaceEntries = bridgeEntry.getBridgeInterfaceEntry(); + @Nullable Map 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 bridgeInterfaceEntries, IfTunnel ifTunnel) { + private static boolean canDeleteTunnelPort(Map + 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(), diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java index 1ab3c8d98..f8a686447 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java @@ -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 interfaceChildEntries; + private final Map interfaceChildEntries; VlanMemberStateUpdateWorker(ManagedNewTransactionRunner txRunner, OperStatus operStatus, - List interfaceChildEntries) { + Map interfaceChildEntries) { this.txRunner = txRunner; this.operStatus = operStatus; this.interfaceChildEntries = interfaceChildEntries; @@ -213,7 +214,7 @@ public class OvsInterfaceConfigUpdateHelper { @Override public List> call() { return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, tx -> { - for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) { + for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries.values()) { InterfaceManagerCommonUtils.updateOperStatus(interfaceChildEntry.getChildInterface(), operStatus, tx); } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigAddHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigAddHelper.java index c2b53ca72..5d7fa4018 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigAddHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigAddHelper.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigRemoveHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigRemoveHelper.java index 4c7a0b531..7b923b84d 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigRemoveHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigRemoveHelper.java @@ -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 interfaceChildEntries = interfaceParentEntry.nonnullInterfaceChildEntry(); + Map interfaceChildEntries = + interfaceParentEntry.nonnullInterfaceChildEntry(); InterfaceChildEntryKey interfaceChildEntryKey = new InterfaceChildEntryKey(interfaceOld.getName()); InstanceIdentifier interfaceChildEntryIid = InterfaceMetaUtils .getInterfaceChildEntryIdentifier(interfaceParentEntryKey, interfaceChildEntryKey); diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java index c14568b14..6b6edafad 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceStateUpdateHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceStateUpdateHelper.java index 5564a1f2f..a11b24904 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceStateUpdateHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceStateUpdateHelper.java @@ -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; diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceTopologyStateUpdateHelper.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceTopologyStateUpdateHelper.java index 852cdc4fe..9b5fb6afd 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceTopologyStateUpdateHelper.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/statehelpers/OvsInterfaceTopologyStateUpdateHelper.java @@ -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 tunnelBfdStatus = terminationPoint.getInterfaceBfdStatus(); + Map 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 diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/InterfaceBatchHandler.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/InterfaceBatchHandler.java index b35033135..3e79806b8 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/InterfaceBatchHandler.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/InterfaceBatchHandler.java @@ -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); } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/SouthboundUtils.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/SouthboundUtils.java index fbb166341..ac5b9390b 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/SouthboundUtils.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/renderer/ovs/utilities/SouthboundUtils.java @@ -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 bridgeInterfaceEntries = bridgeEntry.getBridgeInterfaceEntry(); + @Nullable Map 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 options = Maps.newHashMap(); + Map 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 interfaceBfds) { + public static boolean bfdMonitoringEnabled(Map 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 } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/rpcservice/InterfaceManagerServiceImpl.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/rpcservice/InterfaceManagerServiceImpl.java index eeb992998..c56858ddd 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/rpcservice/InterfaceManagerServiceImpl.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/rpcservice/InterfaceManagerServiceImpl.java @@ -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 interfaceNameEntries = entry.get().getInterfaceNameEntry(); - List interfaceNameEntries = entry.get().getInterfaceNameEntry(); if (interfaceNameEntries == null || interfaceNameEntries.isEmpty()) { LOG.debug("No Interface list found in Operational for DPN {}", dpnid); return buildEmptyInterfaceListResult(); } List interfaceList = new ArrayList<>(); - interfaceNameEntries.forEach( + interfaceNameEntries.values().forEach( (interfaceNameEntry) -> { InterfacesBuilder intf = new InterfacesBuilder() .setInterfaceName(interfaceNameEntry.getInterfaceName()) diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesConfigListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesConfigListener.java index dc24f7fe7..eb894bd5a 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesConfigListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesConfigListener.java @@ -145,7 +145,7 @@ public class FlowBasedServicesConfigListener implements ClusteredDataTreeChangeL if (rootNode.getDataAfter() != null) { List 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(); diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesInterfaceStateListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesInterfaceStateListener.java index d2d98710f..17c9602b6 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesInterfaceStateListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesInterfaceStateListener.java @@ -135,7 +135,7 @@ public class FlowBasedServicesInterfaceStateListener extends AbstractClusteredSy return Futures.immediateFuture(null); } - List allServices = new ArrayList<>(servicesInfo.getBoundServices()); + List 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); diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/ActionConverterUtil.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/ActionConverterUtil.java index e422938ba..1716b8799 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/ActionConverterUtil.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/ActionConverterUtil.java @@ -126,8 +126,8 @@ public final class ActionConverterUtil { public static List convertServiceActionToFlowAction( - List inActionList) { + Map + inActionList) { return convertServiceActionToFlowAction(inActionList, 0); } @@ -140,15 +140,14 @@ public final class ActionConverterUtil { * @return the flow actions. */ public static List convertServiceActionToFlowAction( - List inActionList, + .types.rev131112.action.list.Action> convertServiceActionToFlowAction(Map inActionList, int keyOffset) { List 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() diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/FlowBasedServicesUtils.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/FlowBasedServicesUtils.java index 0a05be44c..aa0d99dd1 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/FlowBasedServicesUtils.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/utilities/FlowBasedServicesUtils.java @@ -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 tx, List matches, int lportTag, short tableId) { - List instructions = boundServiceNew.augmentation(StypeOpenflow.class).getInstruction(); + Map instructions = + boundServiceNew.augmentation(StypeOpenflow.class).getInstruction(); int serviceInstructionsSize = instructions != null ? instructions.size() : 0; - List instructionSet = new ArrayList<>(); + Map 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 serviceInstructions = stypeOpenFlow.getInstruction(); + @Nullable Map 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 instructions = new ArrayList<>(); - instructions.add(MDSALUtil.buildAndGetWriteMetadaInstruction(metadata, metadataMask, ++instructionSize)); + Map 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 serviceInstructions = stypeOpenflow.getInstruction() != null + Map serviceInstructions = stypeOpenflow.getInstruction() != null ? stypeOpenflow.getInstruction() - : Collections.emptyList(); + : Collections.emptyMap(); // build the final instruction for LPort Dispatcher table flow entry List finalApplyActions = new ArrayList<>(); - List instructions = new ArrayList<>(); + Map 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 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 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 instructions = new ArrayList<>(); + Map 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 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 tx, diff --git a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerConfigurationTest.java b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerConfigurationTest.java index 200187a80..95e3e4899 100644 --- a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerConfigurationTest.java +++ b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerConfigurationTest.java @@ -549,12 +549,12 @@ public class InterfaceManagerConfigurationTest { OvsdbTerminationPointAugmentationBuilder newOvsdbTpAugmentationBuilder = new OvsdbTerminationPointAugmentationBuilder(ovsdbTpAugmentation); if (ovsdbTpAugmentation.getOptions() != null) { - List options = new ArrayList<>(ovsdbTpAugmentation.getOptions()); + List options = new ArrayList<>(ovsdbTpAugmentation.getOptions().values()); options.sort(Comparator.comparing(o -> o.key().toString())); newOvsdbTpAugmentationBuilder.setOptions(options); } if (ovsdbTpAugmentation.getInterfaceBfd() != null) { - List interfaceBfd = new ArrayList<>(ovsdbTpAugmentation.getInterfaceBfd()); + List 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(); } } diff --git a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestModule.java b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestModule.java index fbcb67f76..8172b81e3 100644 --- a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestModule.java +++ b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestModule.java @@ -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)); diff --git a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestUtil.java b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestUtil.java index b0117cd31..df9cf02ef 100644 --- a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestUtil.java +++ b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestUtil.java @@ -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 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 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(); } diff --git a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/OvsdbSouthboundTestUtil.java b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/OvsdbSouthboundTestUtil.java index 9f58417cb..3599ca20b 100644 --- a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/OvsdbSouthboundTestUtil.java +++ b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/OvsdbSouthboundTestUtil.java @@ -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(); } diff --git a/interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/IfmCLIUtil.java b/interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/IfmCLIUtil.java index 297c11244..5cf9b6cf0 100644 --- a/interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/IfmCLIUtil.java +++ b/interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/IfmCLIUtil.java @@ -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(); diff --git a/interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/ShowVlan.java b/interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/ShowVlan.java index cd3af2cf1..f3a0cd9bd 100644 --- a/interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/ShowVlan.java +++ b/interfacemanager/interfacemanager-shell/src/main/java/org/opendaylight/genius/interfacemanager/shell/ShowVlan.java @@ -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; diff --git a/interfacemanager/pom.xml b/interfacemanager/pom.xml index 7930568f3..f91346055 100644 --- a/interfacemanager/pom.xml +++ b/interfacemanager/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/ipv6util/impl/src/main/java/org/opendaylight/genius/ipv6util/nd/Ipv6NdUtilServiceImpl.java b/ipv6util/impl/src/main/java/org/opendaylight/genius/ipv6util/nd/Ipv6NdUtilServiceImpl.java index 3f510a046..0f6f43f37 100644 --- a/ipv6util/impl/src/main/java/org/opendaylight/genius/ipv6util/nd/Ipv6NdUtilServiceImpl.java +++ b/ipv6util/impl/src/main/java/org/opendaylight/genius/ipv6util/nd/Ipv6NdUtilServiceImpl.java @@ -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(); diff --git a/ipv6util/pom.xml b/ipv6util/pom.xml index 21ac3dcdc..45aa77403 100644 --- a/ipv6util/pom.xml +++ b/ipv6util/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/itm/itm-api/pom.xml b/itm/itm-api/pom.xml index cff050c27..abb638e24 100644 --- a/itm/itm-api/pom.xml +++ b/itm/itm-api/pom.xml @@ -37,6 +37,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.immutables value + annotations diff --git a/itm/itm-impl/pom.xml b/itm/itm-impl/pom.xml index 78a9a076a..fff489dfa 100644 --- a/itm/itm-impl/pom.xml +++ b/itm/itm-impl/pom.xml @@ -67,6 +67,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject + provided true diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cache/DpnTepStateCache.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cache/DpnTepStateCache.java index 323c5330b..42d626485 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cache/DpnTepStateCache.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cache/DpnTepStateCache.java @@ -90,7 +90,7 @@ public class DpnTepStateCache extends DataObjectCache { @Override protected void added(InstanceIdentifier 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 { @Override protected void removed(InstanceIdentifier 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 { Optional 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 { Collection 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 ! diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java index e9fb7aef2..a69145e80 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java @@ -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 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()); } } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelAddWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelAddWorker.java index e16300cb5..160c7fca2 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelAddWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelAddWorker.java @@ -84,14 +84,14 @@ public class ItmExternalTunnelAddWorker { InstanceIdentifier 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 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 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 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 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; } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelDeleteWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelDeleteWorker.java index eafc097d7..0d650b1c9 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelDeleteWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmExternalTunnelDeleteWorker.java @@ -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 originalTzMembership = ItmUtils.getOriginalTzMembership(firstEndPt, - teps.getDPNID(), meshedDpnList); + @NonNull Map 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(), diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelAddWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelAddWorker.java index d67ee9bfe..1804a7178 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelAddWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelAddWorker.java @@ -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); } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelDeleteWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelDeleteWorker.java index 2089ed585..aedadd856 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelDeleteWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmInternalTunnelDeleteWorker.java @@ -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 srcTZones = srcTep.nonnullTzMembership(); + @NonNull Map 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 originalTzMembership = + Map 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 bridgeTunnelEntries = ovsBridgeEntryOptional.get().nonnullOvsBridgeTunnelEntry(); + @NonNull Map bridgeTunnelEntries = + ovsBridgeEntryOptional.get().nonnullOvsBridgeTunnelEntry(); if (ovsdbBridgeRef != null) { if (!itmConfig.isUseOfTunnels()) { @@ -542,7 +546,7 @@ public class ItmInternalTunnelDeleteWorker { } private void deleteBridgeInterfaceEntry(OvsBridgeEntryKey bridgeEntryKey, - List bridgeTunnelEntries, + Map bridgeTunnelEntries, InstanceIdentifier bridgeEntryIid, String interfaceName) { OvsBridgeTunnelEntryKey bridgeTunnelEntryKey = new OvsBridgeTunnelEntryKey(interfaceName); diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmMonitorWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmMonitorWorker.java index 5886df8af..2f5f93881 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmMonitorWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmMonitorWorker.java @@ -123,7 +123,7 @@ public class ItmMonitorWorker implements Callable remoteDpnTepNewList = new ArrayList<>(); RemoteDpns remoteDpnNew = null; Optional 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); diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepAddWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepAddWorker.java index d430cdb4e..a5a62a2fa 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepAddWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepAddWorker.java @@ -68,7 +68,7 @@ public class ItmTepAddWorker implements Callable 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)); } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepRemoveWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepRemoveWorker.java index b790d8c5c..96dbda114 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepRemoveWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepRemoveWorker.java @@ -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 optional = tx.read(InstanceIdentifier.builder(DcGatewayIpList.class) .build()).get(); if (optional.isPresent()) { - List dcGatewayIpList = optional.get().getDcGatewayIp(); + @Nullable Map dcGatewayIpList = optional.get().getDcGatewayIp(); if (dcGatewayIpList != null && !dcGatewayIpList.isEmpty()) { - processExternalTunnelTepDelete(dcGatewayIpList, tx); + processExternalTunnelTepDelete(dcGatewayIpList.values(), tx); } } } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepsNotHostedAddWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepsNotHostedAddWorker.java index a655e884f..9fe2a1c6e 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepsNotHostedAddWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTepsNotHostedAddWorker.java @@ -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>> { private static final Logger LOG = LoggerFactory.getLogger(ItmTepsNotHostedAddWorker.class); - private final List vtepsList; + private final Map vtepsList; private final String tzName; private final ManagedNewTransactionRunner txRunner; - public ItmTepsNotHostedAddWorker(List vtepsList, String tzName, DataBroker broker, + public ItmTepsNotHostedAddWorker(Map vtepsList, String tzName, DataBroker broker, ManagedNewTransactionRunner txRunner) { this.vtepsList = vtepsList; this.tzName = tzName; diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTunnelAggregationHelper.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTunnelAggregationHelper.java index 1d08f332d..ed64bdc95 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTunnelAggregationHelper.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmTunnelAggregationHelper.java @@ -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 tunnelsConfig = itmConfig != null ? itmConfig.getTunnelAggregation() : null; + Map tunnelsConfig = itmConfig != null + ? itmConfig.getTunnelAggregation() : null; if (tunnelsConfig != null) { - for (TunnelAggregation tnlCfg : tunnelsConfig) { + for (TunnelAggregation tnlCfg : tunnelsConfig.values()) { Class 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 listBuckets = new ArrayList<>(); - List interfaceChildEntries = parentEntry.getInterfaceChildEntry(); + @Nullable Map 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 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 tx) throws ExecutionException, InterruptedException { String logicTunnelName = parentRefs.getParentInterface(); - List interfaceChildEntries = groupParentEntry.getInterfaceChildEntry(); + @Nullable Map 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 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 interfaceChildEntries = parentEntry.getInterfaceChildEntry(); + @Nullable Map 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 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 interfaceChildEntries = parentEntry.getInterfaceChildEntry(); + @Nullable Map 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>> { diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepAddConfigHelper.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepAddConfigHelper.java index 0b6ed5598..afcf15c65 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepAddConfigHelper.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepAddConfigHelper.java @@ -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 tx) { - List vtepList; + Map 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 updatedVtepList, String tzName, + protected static void addVtepIntoTepsNotHosted(Map updatedVtepList, String tzName, TypedWriteTransaction tx) { //Create TZ node path InstanceIdentifier 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 addVtepToUnknownVtepsList(List updatedVtepList, - IpAddress tepIpAddress, Uint64 dpid, - boolean ofTunnel) { + private static Map addVtepToUnknownVtepsList(Map 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; diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepRemoveConfigHelper.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepRemoveConfigHelper.java index cbaaba500..82920fd2a 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepRemoveConfigHelper.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/OvsdbTepRemoveConfigHelper.java @@ -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 vtepList = transportZone.getVteps(); + @Nullable Map 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 tx) { - List vtepList; + Map 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; diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/impl/ItmUtils.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/impl/ItmUtils.java index 7cf28aa1b..03473ea6f 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/impl/ItmUtils.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/impl/ItmUtils.java @@ -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 void syncWrite(LogicalDatastoreType datastoreType, InstanceIdentifier 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 getInternalTunnelsFromCache(DataBroker dataBroker) { + public static Map getInternalTunnelsFromCache(DataBroker dataBroker) { Collection internalInterfaces = ITM_CACHE.getAllInternalTunnel(); LOG.trace("getInternalTunnelsFromCache - List of InternalTunnels in the Cache: {} ", internalInterfaces); - List tunnelList = new ArrayList<>(); + Map 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 getAllInternalTunnels(DataBroker dataBroker) { - List result = null; + public static Map getAllInternalTunnels(DataBroker dataBroker) { + Map result = null; InstanceIdentifier iid = InstanceIdentifier.builder(TunnelList.class).build(); Optional 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 getAllInternalTunnlInterfacesFromDS(DataBroker broker) { List tunnelList = new ArrayList<>(); - List internalTunnels = getAllInternalTunnels(broker); + Map internalTunnels = getAllInternalTunnels(broker); if (internalTunnels != null) { - for (InternalTunnel tunnel : internalTunnels) { + for (InternalTunnel tunnel : internalTunnels.values()) { List 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 externalTunnels = getAllExternalTunnels(broker); + Map 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 getAllExternalTunnels(DataBroker dataBroker) { - List result = null; + private static Map getAllExternalTunnels(DataBroker dataBroker) { + Map result = null; InstanceIdentifier iid = InstanceIdentifier.builder(ExternalTunnelList.class).build(); Optional 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 List getIntersection(List list1, List list2) { - List list = new ArrayList<>(); - for (T iter : list1) { - if (list2.contains(iter)) { + public static List getIntersection(Map list1, + Map list2) { + List 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 removeTransportZoneMembership(TunnelEndPoints endPts, List zones) { + public static List removeTransportZoneMembership(TunnelEndPoints endPts, Map zones) { LOG.trace(" RemoveTransportZoneMembership TEPs {}, Membership to be removed {} ", endPts, zones); - List existingTzList = new ArrayList<>(endPts.nonnullTzMembership()); - for (TzMembership membership : zones) { + List 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 getOriginalTzMembership(TunnelEndPoints srcTep, Uint64 dpnId, + public static Map getOriginalTzMembership(TunnelEndPoints srcTep, Uint64 dpnId, Collection 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 tzMemberships = tep.nonnullTzMembership(); + @NonNull Map 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 internalTunnels = getAllInternalTunnels(broker); + Map internalTunnels = getAllInternalTunnels(broker); if (internalTunnels != null) { - for (InternalTunnel tunnel : internalTunnels) { + for (InternalTunnel tunnel : internalTunnels.values()) { List tunnelInterfaceNames = tunnel.getTunnelInterfaceNames(); if (tunnelInterfaceNames != null) { for (String tunnelInterfaceName : tunnelInterfaceNames) { @@ -1059,7 +1066,7 @@ public final class ItmUtils { InstanceIdentifier iid = InstanceIdentifier.builder(DpnEndpoints.class).build(); Optional 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 vtepsList = transportZone.getVteps(); + @Nullable Map vtepsList = transportZone.getVteps(); if (vtepsList != null && !vtepsList.isEmpty()) { - for (Vteps vtep : vtepsList) { + for (Vteps vtep : vtepsList.values()) { listOfDpId.add(vtep.getDpnId()); } } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TerminationPointStateListener.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TerminationPointStateListener.java index a99928dfd..e7506d8b0 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TerminationPointStateListener.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TerminationPointStateListener.java @@ -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 tunnelBfdStatus = terminationPoint.getInterfaceBfdStatus(); + @Nullable Map 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>> { diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TunnelTopologyStateListener.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TunnelTopologyStateListener.java index dd2133001..08b8e50bf 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TunnelTopologyStateListener.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/listeners/TunnelTopologyStateListener.java @@ -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 bridgeInterfaceEntries = bridgeEntry.getOvsBridgeTunnelEntry(); + @Nullable Map 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 = diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/renderer/ovs/utilities/DirectTunnelUtils.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/renderer/ovs/utilities/DirectTunnelUtils.java index eb5743fb0..6111ec4dd 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/renderer/ovs/utilities/DirectTunnelUtils.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/renderer/ovs/utilities/DirectTunnelUtils.java @@ -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 interfaceBfds) { + public static boolean bfdMonitoringEnabled(Map 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)(MDSALUtil.buildApplyActionsInstruction(MDSALUtil + .buildActions(actions)))); mdsalApiManager.addFlow(tx, dpnId, egressFlow); } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/OvsdbNodeListener.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/OvsdbNodeListener.java index 98dd986ff..0a13ed9af 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/OvsdbNodeListener.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/OvsdbNodeListener.java @@ -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 return null; } - List ovsdbNodeOtherConfigsList = ovsdbNodeAugmentation.getOpenvswitchOtherConfigs(); + @Nullable Map 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 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 ovsdbNodeExternalIdsList = ovsdbNodeAugmentation.getOpenvswitchExternalIds(); + @Nullable Map 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()); diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/TransportZoneListener.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/TransportZoneListener.java index aafcaedab..ec2e7c7f1 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/TransportZoneListener.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/TransportZoneListener.java @@ -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 unknownVteps = convertVtepListToUnknownVtepList(transportZone.getVteps()); + Map 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 unVtepsLst = tepsInNotHostedTransportZone.getUnknownVteps(); + @Nullable Map unVtepsLst = tepsInNotHostedTransportZone.getUnknownVteps(); List 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 convertVtepListToUnknownVtepList(List vteps) { - List unknownVtepsList = new ArrayList<>(); - for (Vteps vtep : vteps) { + private Map convertVtepListToUnknownVtepList(Map vteps) { + Map 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 zones = ItmUtils.createTransportZoneMembership(transportZone.getZoneName()); Class tunnelType = transportZone.getTunnelType(); LOG.trace("Transport Zone_name: {}", transportZone.getZoneName()); - List vtepsList = transportZone.getVteps(); + @Nullable Map 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 tunnelType = transportZone.getTunnelType(); LOG.trace("Transport Zone_name: {}", zoneName); - List deviceVtepsList = transportZone.getDeviceVteps(); + @Nullable Map 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(); diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/monitoring/ItmTunnelEventListener.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/monitoring/ItmTunnelEventListener.java index 1e259d2c0..06c23f92c 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/monitoring/ItmTunnelEventListener.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/monitoring/ItmTunnelEventListener.java @@ -378,8 +378,9 @@ public class ItmTunnelEventListener extends AbstractSyncDataTreeChangeListener tx.merge(identifier, - new StateTunnelListBuilder(add).setOperState(operStatus).build(), false))); + .callWithNewWriteOnlyTransactionAndSubmit(Datastore.OPERATIONAL, + tx -> tx.mergeParentStructureMerge(identifier, + new StateTunnelListBuilder(add).setOperState(operStatus).build()))); } } } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTepInstanceRecoveryHandler.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTepInstanceRecoveryHandler.java index a525412d0..a967ffff2 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTepInstanceRecoveryHandler.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTepInstanceRecoveryHandler.java @@ -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 tunnelList = ItmUtils.getInternalTunnelsFromCache(dataBroker); + Map tunnelList = ItmUtils.getInternalTunnelsFromCache(dataBroker); List interfaceListToRecover = new ArrayList<>(); LOG.debug("List of tunnel interfaces: {}" , tunnelList); @@ -167,8 +171,8 @@ public class ItmTepInstanceRecoveryHandler implements ServiceRecoveryInterface { if (interfaceManager.isItmDirectTunnelsEnabled()) { Collection dpnsTeps = dpnTepStateCache.getAllPresent(); for (DpnsTeps dpnTep : dpnsTeps) { - List rmtdpns = dpnTep.getRemoteDpns(); - for (RemoteDpns remoteDpn : rmtdpns) { + @Nullable Map 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 zones = ItmUtils.createTransportZoneMembership(tzName); diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTzInstanceRecoveryHandler.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTzInstanceRecoveryHandler.java index cfab007de..fa35b1ad4 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTzInstanceRecoveryHandler.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/ItmTzInstanceRecoveryHandler.java @@ -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 = dpnTepStateCache.getAllPresent(); List listOfDpnIds = ItmUtils.getDpIdFromTransportzone(dataBroker, entityId); for (DpnsTeps dpnTep : dpnsTeps) { - List rmtdpns = dpnTep.getRemoteDpns(); - for (RemoteDpns remoteDpn : rmtdpns) { + @Nullable Map rmtdpns = dpnTep.getRemoteDpns(); + for (RemoteDpns remoteDpn : rmtdpns.values()) { if (listOfDpnIds.contains(remoteDpn.getDestinationDpnId())) { tunnelList.add(remoteDpn.getTunnelName()); } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/rpc/ItmManagerRpcService.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/rpc/ItmManagerRpcService.java index 3559effc8..4232ea0ce 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/rpc/ItmManagerRpcService.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/rpc/ItmManagerRpcService.java @@ -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() { @@ -821,8 +821,8 @@ public class ItmManagerRpcService implements ItmRpcService { .setNodeId(nodeId).setTopologyId(input.getTopologyId()).build(); //TO DO: add retry if it fails FluentFuture future = retryingTxRunner - .callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION, tx -> tx.put(path, - deviceVtep, true)); + .callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION, + tx -> tx.mergeParentStructurePut(path, deviceVtep)); future.addCallback(new FutureCallback() { @@ -896,7 +896,7 @@ public class ItmManagerRpcService implements ItmRpcService { FluentFuture 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() { @@ -1025,16 +1025,16 @@ public class ItmManagerRpcService implements ItmRpcService { public ListenableFuture> isDcgwPresent(IsDcgwPresentInput input) { RpcResultBuilder resultBld = RpcResultBuilder.success(); - List dcGatewayIpList = new ArrayList<>(); + Map 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 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 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 getDcGatewayIpList(TypedReadWriteTransaction tx) + public static Map + getDcGatewayIpList(TypedReadWriteTransaction tx) throws ExecutionException, InterruptedException { - List dcGatewayIpList = new ArrayList<>(); + Map dcGatewayIpList = new HashMap<>(); FluentFuture> future = tx.read(InstanceIdentifier.builder(DcGatewayIpList.class).build()); future.addCallback(new FutureCallback>() { @@ -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) { diff --git a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/cli/TepCommandHelperTest.java b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/cli/TepCommandHelperTest.java index 586eccf37..bee35c5ee 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/cli/TepCommandHelperTest.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/cli/TepCommandHelperTest.java @@ -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 mergeVtepsList = new ArrayList<>(); + private final List mergeParentTransportZoneList = new ArrayList<>(); + private final List 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); } diff --git a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmExternalTunnelAddTest.java b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmExternalTunnelAddTest.java index 66798a020..b54c62345 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmExternalTunnelAddTest.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmExternalTunnelAddTest.java @@ -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); } diff --git a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmInternalTunnelAddTest.java b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmInternalTunnelAddTest.java index c6e90c4c4..ce5e509e9 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmInternalTunnelAddTest.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmInternalTunnelAddTest.java @@ -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); } diff --git a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmManagerRpcServiceTest.java b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmManagerRpcServiceTest.java index 4bba968f0..06981acab 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmManagerRpcServiceTest.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/impl/ItmManagerRpcServiceTest.java @@ -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 diff --git a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmManagerRpcServiceTest.java b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmManagerRpcServiceTest.java index ea357387b..275e8e91d 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmManagerRpcServiceTest.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmManagerRpcServiceTest.java @@ -494,7 +494,7 @@ public class ItmManagerRpcServiceTest { private void syncWrite(InstanceIdentifier 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); } diff --git a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTepAutoConfigTest.java b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTepAutoConfigTest.java index b08757cc8..e3e4e684d 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTepAutoConfigTest.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTepAutoConfigTest.java @@ -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 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 tzonePath = processDefTzOnItmConfig(defTzEnabledFlag, defTzTunnelType); Assert.assertNotNull(tzonePath); @@ -180,11 +174,12 @@ public class ItmTepAutoConfigTest { InstanceIdentifier 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 tzonePath = processDefTzOnItmConfig(defTzEnabledFlag, @@ -220,11 +215,12 @@ public class ItmTepAutoConfigTest { InstanceIdentifier 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 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 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 tzonePath = ItmTepAutoConfigTestUtil.getTzIid( ITMConstants.DEFAULT_TRANSPORT_ZONE); @@ -302,11 +300,12 @@ public class ItmTepAutoConfigTest { InstanceIdentifier 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 tzonePath = ItmTepAutoConfigTestUtil.getTzIid( ITMConstants.DEFAULT_TRANSPORT_ZONE); @@ -351,8 +350,8 @@ public class ItmTepAutoConfigTest { // create TZA InstanceIdentifier 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 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 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 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 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 tzaTzonePath = ItmTepAutoConfigTestUtil.getTzIid( ItmTestConstants.TZ_NAME); @@ -676,9 +677,8 @@ public class ItmTepAutoConfigTest { // create Transport-zone in advance InstanceIdentifier 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 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 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 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 vtepsList = new ArrayList<>(); - List unknownVtepsList = dataBroker.newReadOnlyTransaction() + @Nullable Map 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 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 tzonePath = ItmTepAutoConfigTestUtil.getTzIid( ItmTestConstants.TZ_NAME); @@ -1040,10 +1039,10 @@ public class ItmTepAutoConfigTest { //create vtepList form unknownVtepList List vtepsList = new ArrayList<>(); - List unknownVtepsList = dataBroker.newReadOnlyTransaction() + @Nullable Map 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 diff --git a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java index 07c399e28..a9c646941 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java @@ -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); diff --git a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/OvsdbTestUtil.java b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/OvsdbTestUtil.java index edff6adfd..7c5a69290 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/OvsdbTestUtil.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/OvsdbTestUtil.java @@ -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(); } } diff --git a/itm/pom.xml b/itm/pom.xml index f1bdd39fb..448ae00d7 100644 --- a/itm/pom.xml +++ b/itm/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/karaf/pom.xml b/karaf/pom.xml index 1bf5b3057..fe7b6e59c 100644 --- a/karaf/pom.xml +++ b/karaf/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent karaf4-parent - 6.0.4 + 7.0.1 diff --git a/lockmanager/pom.xml b/lockmanager/pom.xml index 1ee5fd838..e413489bd 100644 --- a/lockmanager/pom.xml +++ b/lockmanager/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/mdsalutil/mdsal-testutils/src/main/java/org/opendaylight/genius/mdsal/testutils/DataBrokerTestWiring.java b/mdsalutil/mdsal-testutils/src/main/java/org/opendaylight/genius/mdsal/testutils/DataBrokerTestWiring.java index 1c0d16370..a6727737c 100644 --- a/mdsalutil/mdsal-testutils/src/main/java/org/opendaylight/genius/mdsal/testutils/DataBrokerTestWiring.java +++ b/mdsalutil/mdsal-testutils/src/main/java/org/opendaylight/genius/mdsal/testutils/DataBrokerTestWiring.java @@ -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()); diff --git a/mdsalutil/mdsalutil-api/pom.xml b/mdsalutil/mdsalutil-api/pom.xml index e809fe867..6d249e19e 100644 --- a/mdsalutil/mdsalutil-api/pom.xml +++ b/mdsalutil/mdsalutil-api/pom.xml @@ -123,6 +123,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.immutables value + annotations org.osgi @@ -149,11 +150,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html awaitility test - - org.opendaylight.mdsal - mdsal-binding-test-utils - test - org.opendaylight.mdsal mdsal-binding-spi @@ -184,7 +180,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html !--> org.opendaylight.mdsal - mdsal-binding-dom-adapter + mdsal-binding-test-utils test diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/datastoreutils/SingleTransactionDataBroker.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/datastoreutils/SingleTransactionDataBroker.java index f74d4e5f8..063eb8df8 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/datastoreutils/SingleTransactionDataBroker.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/datastoreutils/SingleTransactionDataBroker.java @@ -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 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 void syncDelete( diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TransactionAdapter.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TransactionAdapter.java index 14956f1e0..c3f893d1f 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TransactionAdapter.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TransactionAdapter.java @@ -87,39 +87,23 @@ public final class TransactionAdapter { } @Override - public void put(LogicalDatastoreType store, InstanceIdentifier path, T data, - boolean createMissingParents) { + public void mergeParentStructurePut(LogicalDatastoreType store, + InstanceIdentifier path, T data) { checkStore(store); - delegate.put(path, data, createMissingParents); + delegate.mergeParentStructurePut(path, data); } @Override - public void mergeParentStructurePut(@NonNull LogicalDatastoreType store, - @NonNull InstanceIdentifier path, - @NonNull T data) { - ///// - } - - @Override - public void merge(LogicalDatastoreType store, InstanceIdentifier path, - T data) { + public void merge(LogicalDatastoreType store, InstanceIdentifier path, T data) { checkStore(store); delegate.merge(path, data); } @Override - public void merge(LogicalDatastoreType store, InstanceIdentifier path, - T data, - boolean createMissingParents) { + public void mergeParentStructureMerge(LogicalDatastoreType store, + InstanceIdentifier path, T data) { checkStore(store); - delegate.merge(path, data, createMissingParents); - } - - @Override - public void mergeParentStructureMerge(@NonNull LogicalDatastoreType store, - @NonNull InstanceIdentifier path, - @NonNull T data) { - ////// + delegate.mergeParentStructureMerge(path, data); } @Override diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransaction.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransaction.java index d05ab4778..37a5cfcdb 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransaction.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransaction.java @@ -40,11 +40,9 @@ public interface TypedWriteTransaction 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 The type of the provided object. */ - void put(InstanceIdentifier path, T data, boolean createMissingParents); + void mergeParentStructurePut(InstanceIdentifier path, T data); /** * Merges an object with the data already present at the given path. @@ -64,11 +62,9 @@ public interface TypedWriteTransaction 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 The type of the provided object. */ - void merge(InstanceIdentifier path, T data, boolean createMissingParents); + void mergeParentStructureMerge(InstanceIdentifier path, T data); /** * Deletes the object present at the given path. diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransactionImpl.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransactionImpl.java index 3509358e5..96abb24c3 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransactionImpl.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/TypedWriteTransactionImpl.java @@ -33,8 +33,8 @@ class TypedWriteTransactionImpl extends TypedTransaction } @Override - public void put(InstanceIdentifier path, T data, boolean createMissingParents) { - delegate.put(getDatastoreType(), path, data, createMissingParents); + public void mergeParentStructurePut(InstanceIdentifier path, T data) { + delegate.mergeParentStructurePut(getDatastoreType(), path, data); } @Override @@ -43,8 +43,8 @@ class TypedWriteTransactionImpl extends TypedTransaction } @Override - public void merge(InstanceIdentifier path, T data, boolean createMissingParents) { - delegate.merge(getDatastoreType(), path, data, createMissingParents); + public void mergeParentStructureMerge(InstanceIdentifier path, T data) { + delegate.mergeParentStructureMerge(getDatastoreType(), path, data); } @Override diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedReadWriteTransactionImpl.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedReadWriteTransactionImpl.java index b345bc76f..e52792e41 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedReadWriteTransactionImpl.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedReadWriteTransactionImpl.java @@ -32,8 +32,8 @@ class WriteTrackingTypedReadWriteTransactionImpl extends Ty } @Override - public void put(InstanceIdentifier path, T data, boolean createMissingParents) { - super.put(path, data, createMissingParents); + public void mergeParentStructurePut(InstanceIdentifier path, T data) { + super.mergeParentStructurePut(path, data); written = true; } @@ -44,8 +44,8 @@ class WriteTrackingTypedReadWriteTransactionImpl extends Ty } @Override - public void merge(InstanceIdentifier path, T data, boolean createMissingParents) { - super.merge(path, data, createMissingParents); + public void mergeParentStructureMerge(InstanceIdentifier path, T data) { + super.mergeParentStructureMerge(path, data); written = true; } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedWriteTransactionImpl.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedWriteTransactionImpl.java index e48723bae..512c8d5b8 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedWriteTransactionImpl.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingTypedWriteTransactionImpl.java @@ -32,8 +32,8 @@ class WriteTrackingTypedWriteTransactionImpl extends TypedW } @Override - public void put(InstanceIdentifier path, T data, boolean createMissingParents) { - super.put(path, data, createMissingParents); + public void mergeParentStructurePut(InstanceIdentifier path, T data) { + super.mergeParentStructurePut(path, data); written = true; } @@ -44,8 +44,8 @@ class WriteTrackingTypedWriteTransactionImpl extends TypedW } @Override - public void merge(InstanceIdentifier path, T data, boolean createMissingParents) { - super.merge(path, data, createMissingParents); + public void mergeParentStructureMerge(InstanceIdentifier path, T data) { + super.mergeParentStructureMerge(path, data); written = true; } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingWriteTransaction.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingWriteTransaction.java index d284874a6..5410dd458 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingWriteTransaction.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/infra/WriteTrackingWriteTransaction.java @@ -32,9 +32,9 @@ class WriteTrackingWriteTransaction extends ForwardingWriteTransaction implement } @Override - public void put(LogicalDatastoreType store, InstanceIdentifier path, T data, - boolean createMissingParents) { - super.put(store, path, data, createMissingParents); + public void mergeParentStructurePut(LogicalDatastoreType store, InstanceIdentifier path, + T data) { + super.mergeParentStructurePut(store, path, data); written = true; } @@ -45,9 +45,9 @@ class WriteTrackingWriteTransaction extends ForwardingWriteTransaction implement } @Override - public void merge(LogicalDatastoreType store, InstanceIdentifier path, T data, - boolean createMissingParents) { - super.merge(store, path, data, createMissingParents); + public void mergeParentStructureMerge(LogicalDatastoreType store, InstanceIdentifier path, + T data) { + super.mergeParentStructureMerge(store, path, data); written = true; } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/MDSALUtil.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/MDSALUtil.java index 395e2ab0f..c68114b66 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/MDSALUtil.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/MDSALUtil.java @@ -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 listMatchInfoBase, - List listInstructionInfo) { + Map 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 listMatchInfoBase, - List listInstructionInfo, boolean isStrict) { + Map listInstructionInfo, boolean isStrict) { FlowKey key = new FlowKey(new FlowId(flowId)); return new FlowBuilder().setMatch(buildMatches(listMatchInfoBase)).withKey(key) .setPriority(priority) diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/NWUtil.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/NWUtil.java index d3c769f5c..b51c65d96 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/NWUtil.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/NWUtil.java @@ -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); diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ericmatches/EricMatchInfoHelper.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ericmatches/EricMatchInfoHelper.java index 2a0c8ff7d..7199f341b 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ericmatches/EricMatchInfoHelper.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ericmatches/EricMatchInfoHelper.java @@ -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 extentionKey) { - List extensions = null; + Map 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(); } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/nxmatches/NxMatchInfoHelper.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/nxmatches/NxMatchInfoHelper.java index 69a0d0c0f..4e26af4bc 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/nxmatches/NxMatchInfoHelper.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/nxmatches/NxMatchInfoHelper.java @@ -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 extentionKey) { - List extensions = null; + + Map 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(); } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/DefaultBatchHandler.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/DefaultBatchHandler.java index 53006ceda..2256c67d2 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/DefaultBatchHandler.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/DefaultBatchHandler.java @@ -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 diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/ResourceBatchingManager.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/ResourceBatchingManager.java index 80c4b19d9..b0969ebab 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/ResourceBatchingManager.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/batching/ResourceBatchingManager.java @@ -159,13 +159,13 @@ public class ResourceBatchingManager implements AutoCloseable { * @return a CheckFuture containing the result of the read */ public FluentFuture> read( - String resourceType, InstanceIdentifier identifier) { + String resourceType, InstanceIdentifier identifier) throws InterruptedException, ExecutionException { BlockingQueue queue = getQueue(resourceType); if (queue != null) { if (pendingModificationByResourceType.get(resourceType).contains(identifier)) { SettableFuture> 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 {}", diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/hwvtep/HwvtepUtils.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/hwvtep/HwvtepUtils.java index 4e5683fa1..b505b0396 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/hwvtep/HwvtepUtils.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/utils/hwvtep/HwvtepUtils.java @@ -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 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 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 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 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 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 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 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 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 iid = HwvtepSouthboundUtils .createPhysicalPortInstanceIdentifier(physicalSwitchNodeId, phyPortName); - tx.merge(iid, phyPortAug, CREATE_MISSING_PARENTS); + tx.mergeParentStructureMerge(iid, phyPortAug); } /** diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionLoadMacToShaTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionLoadMacToShaTest.java index ffcb8b6db..26fdd8632 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionLoadMacToShaTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionLoadMacToShaTest.java @@ -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()); + } } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionNxConntrackTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionNxConntrackTest.java index 9b53ceff3..5ae9e3595 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionNxConntrackTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionNxConntrackTest.java @@ -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)")); } } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetDestinationIpTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetDestinationIpTest.java index e88dc539f..cf4daee31 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetDestinationIpTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetDestinationIpTest.java @@ -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()); } } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetDestinationTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetDestinationTest.java index d808485f1..1c062466e 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetDestinationTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetDestinationTest.java @@ -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()); } } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetSourceTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetSourceTest.java index 9927a0c59..454eb5cf6 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetSourceTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetFieldEthernetSourceTest.java @@ -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()); } } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpTest.java index b743728cf..f98736170 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpTest.java @@ -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()); } } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpv6Test.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpv6Test.java index 8ef767b49..ec3cca6ca 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpv6Test.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/actions/ActionSetSourceIpv6Test.java @@ -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()); } } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionApplyActionsTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionApplyActionsTest.java index 8432606ca..8cb530756 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionApplyActionsTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionApplyActionsTest.java @@ -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 actions = applyActionsCase.getApplyActions().getAction(); + Map actions = applyActionsCase.getApplyActions().getAction(); assertEquals(1, actions.size()); - Action action = actions.get(0); + Action action = actions.values().iterator().next(); assertTrue(action.getAction() instanceof GroupActionCase); } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionWriteActionsTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionWriteActionsTest.java index e79e6f47a..d2b0e3560 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionWriteActionsTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/instructions/InstructionWriteActionsTest.java @@ -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 actions = writeActionsCase.getWriteActions().getAction(); + Map actions = writeActionsCase.getWriteActions().getAction(); assertEquals(1, actions.size()); - Action action = actions.get(0); + Action action = actions.values().iterator().next(); assertTrue(action.getAction() instanceof GroupActionCase); } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/interfaces/testutils/FlowAssertTestUtils.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/interfaces/testutils/FlowAssertTestUtils.java index b2a9071e1..6688aa35e 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/interfaces/testutils/FlowAssertTestUtils.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/interfaces/testutils/FlowAssertTestUtils.java @@ -41,7 +41,7 @@ public class FlowAssertTestUtils { InstructionsBuilder instructionsBuilder = new InstructionsBuilder(); if (flow.getInstructions() != null) { ArrayList 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()); diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/matches/tests/MatchIpv4SourceTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/matches/tests/MatchIpv4SourceTest.java index d3630d7a9..7dfa561eb 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/matches/tests/MatchIpv4SourceTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/matches/tests/MatchIpv4SourceTest.java @@ -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()); } } diff --git a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/tests/FlowEntityAssertBeansTest.java b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/tests/FlowEntityAssertBeansTest.java index e06981853..4fffadcb8 100644 --- a/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/tests/FlowEntityAssertBeansTest.java +++ b/mdsalutil/mdsalutil-api/src/test/java/org/opendaylight/genius/mdsalutil/tests/FlowEntityAssertBeansTest.java @@ -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}"); } } diff --git a/mdsalutil/mdsalutil-impl/pom.xml b/mdsalutil/mdsalutil-impl/pom.xml index b6a955011..0c4a55acb 100644 --- a/mdsalutil/mdsalutil-impl/pom.xml +++ b/mdsalutil/mdsalutil-impl/pom.xml @@ -50,6 +50,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject + provided true @@ -100,7 +101,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html !--> org.opendaylight.mdsal - mdsal-binding-dom-adapter + mdsal-binding-test-utils test diff --git a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MDSALManager.java b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MDSALManager.java index d7fab55ed..c9fa1ffad 100644 --- a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MDSALManager.java +++ b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MDSALManager.java @@ -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 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 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 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 tx, Uint64 dpId, Flow flow) { InstanceIdentifier 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 groupInstanceId = buildGroupInstanceIdentifier(groupId, nodeDpn); - tx.put(groupInstanceId, group, CREATE_MISSING_PARENTS); + tx.mergeParentStructurePut(groupInstanceId, group); } @Override diff --git a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MdSalUtilBatchHandler.java b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MdSalUtilBatchHandler.java index 09e294591..93584517f 100644 --- a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MdSalUtilBatchHandler.java +++ b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/MdSalUtilBatchHandler.java @@ -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); } diff --git a/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/genius/datastoreutils/listeners/tests/DataTreeEventCallbackRegistrarTest.java b/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/genius/datastoreutils/listeners/tests/DataTreeEventCallbackRegistrarTest.java index a6d826254..0835f618f 100644 --- a/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/genius/datastoreutils/listeners/tests/DataTreeEventCallbackRegistrarTest.java +++ b/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/genius/datastoreutils/listeners/tests/DataTreeEventCallbackRegistrarTest.java @@ -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(); diff --git a/mdsalutil/mdsalutil-testutils/pom.xml b/mdsalutil/mdsalutil-testutils/pom.xml index b7a8254b9..68ec25083 100644 --- a/mdsalutil/mdsalutil-testutils/pom.xml +++ b/mdsalutil/mdsalutil-testutils/pom.xml @@ -83,8 +83,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html !--> org.opendaylight.mdsal - mdsal-binding-dom-adapter - compile + mdsal-binding-test-utils + test org.opendaylight.mdsal diff --git a/mdsalutil/pom.xml b/mdsalutil/pom.xml index 597adde20..3f97b1cac 100644 --- a/mdsalutil/pom.xml +++ b/mdsalutil/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/networkutils/pom.xml b/networkutils/pom.xml index 094399b86..dab3ef212 100644 --- a/networkutils/pom.xml +++ b/networkutils/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/pom.xml b/pom.xml index 8fdd00aa8..ffc953aa0 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL --> org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 -- 2.36.6