From: Chandra Shekar S Date: Tue, 7 Apr 2020 07:44:40 +0000 (+0530) Subject: Enhance the use of cache in HwvtepDeviceInfo X-Git-Tag: release/aluminium~20 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=03cfe27000f84a0df94ec17ec1fb7e0835642fdf;p=ovsdb.git Enhance the use of cache in HwvtepDeviceInfo This review is to enhace the HwvtepDeviceInfo to use the Cache. It has the following changes. 1. Enhanced to include the incoming update objects in the cache. 2. Check in the cache before deleting. 3. Update the cache when the updates are successfully submitted to db. Signed-off-by: Chandra Shekar S Change-Id: I70a923f2b58077e780b53c457b05bb2545a87d4f --- diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionInstance.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionInstance.java index 46e795e12..4e13e46db 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionInstance.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionInstance.java @@ -337,6 +337,10 @@ public class HwvtepConnectionInstance { public void setHasDeviceOwnership(final Boolean hasDeviceOwnership) { if (hasDeviceOwnership != null) { + if (hasDeviceOwnership != this.hasDeviceOwnership) { + LOG.info("Ownership status changed for {} old {} new {}", instanceIdentifier, + this.hasDeviceOwnership, hasDeviceOwnership); + } this.hasDeviceOwnership = hasDeviceOwnership; } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDeviceInfo.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDeviceInfo.java index 7dfd368ab..f31554248 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDeviceInfo.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDeviceInfo.java @@ -17,6 +17,8 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + import org.opendaylight.ovsdb.hwvtepsouthbound.transact.DependencyQueue; import org.opendaylight.ovsdb.hwvtepsouthbound.transact.DependentJob; import org.opendaylight.ovsdb.hwvtepsouthbound.transact.TransactCommand; @@ -57,6 +59,24 @@ public class HwvtepDeviceInfo { private static final Logger LOG = LoggerFactory.getLogger(HwvtepDeviceInfo.class); + private Map, Map> availableInOperDs = + new ConcurrentHashMap<>(); + + public void markAvailableInOperDs(Class cls, InstanceIdentifier key) { + availableInOperDs.putIfAbsent(cls, new ConcurrentHashMap<>()); + availableInOperDs.get(cls).put(key, Boolean.TRUE); + } + + public Boolean isAvailableInOperDs(Class cls, InstanceIdentifier key) { + availableInOperDs.putIfAbsent(cls, new ConcurrentHashMap<>()); + return availableInOperDs.get(cls).getOrDefault(key, Boolean.FALSE); + } + + public Boolean clearOperDsAvailability(Class cls, InstanceIdentifier key) { + availableInOperDs.putIfAbsent(cls, new ConcurrentHashMap<>()); + return availableInOperDs.get(cls).remove(key); + } + public enum DeviceDataStatus { IN_TRANSIT, UNAVAILABLE, @@ -104,8 +124,18 @@ public class HwvtepDeviceInfo { public boolean isInTransitState() { return status == DeviceDataStatus.IN_TRANSIT; } + + public boolean isAvailableInOperDs() { + return false; + } + + @Override + public String toString() { + return key + " uuid:" + uuid + " data:" + data + " status:" + status; + } } + private static AtomicInteger ZERO = new AtomicInteger(0); private final Map, Set> tepIdReferences = new ConcurrentHashMap<>(); private final Map, Map, RemoteUcastMacs>> logicalSwitchVsUcasts = new ConcurrentHashMap<>(); @@ -270,6 +300,15 @@ public class HwvtepDeviceInfo { } } + public void clearDeviceOperUUID(Class cls, InstanceIdentifier key, UUID uuid) { + LOG.debug("Clearing device data {}", key); + if (uuidVsData.containsKey(cls) && uuidVsData.get(cls).containsKey(uuid)) { + LOG.debug("Remove {} {} from device data.", connectionInstance.getNodeId().getValue(), cls.getSimpleName()); + } + HwvtepSouthboundUtil.clearData(uuidVsData, cls, uuid); + HwvtepSouthboundUtil.clearData(opKeyVsData, cls, key); + } + public DeviceData getDeviceOperData(Class cls, UUID uuid) { return HwvtepSouthboundUtil.getData(uuidVsData, cls, uuid); } @@ -442,4 +481,5 @@ public class HwvtepDeviceInfo { public Map, Map> getUuidData() { return Collections.unmodifiableMap(uuidVsData); } + } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java index 521bc08ae..c0874fddf 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java @@ -76,11 +76,11 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand { LOG.debug("Creating a physical port named: {}", port.getHwvtepNodeName().getValue()); InstanceIdentifier key = getTpIid(psNodeiid, port.getHwvtepNodeName().getValue()); - getOperationalState().getDeviceInfo().updateConfigData(TerminationPoint.class, key, tp); - HwvtepDeviceInfo.DeviceData deviceOperdata = getDeviceInfo().getDeviceOperData(TerminationPoint.class, key); + getOperationalState().getDeviceInfo().updateConfigData(VlanBindings.class, key, tp); + HwvtepDeviceInfo.DeviceData deviceOperdata = getDeviceInfo().getDeviceOperData(VlanBindings.class, key); if (deviceOperdata == null || deviceOperdata.getData() == null) { LOG.error("Updated the device oper cache for port from actual device {}", key); - deviceOperdata = super.fetchDeviceData(TerminationPoint.class, key); + deviceOperdata = super.fetchDeviceData(VlanBindings.class, key); } if (deviceOperdata == null || deviceOperdata.getData() == null) { //create a physical port always happens from device diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/AbstractTransactionCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/AbstractTransactionCommand.java index b7d7131df..e73c246e2 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/AbstractTransactionCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/AbstractTransactionCommand.java @@ -8,19 +8,34 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md; +import java.util.HashSet; +import java.util.Set; +import org.apache.commons.lang3.tuple.Pair; +import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo; import org.opendaylight.ovsdb.lib.message.TableUpdates; +import org.opendaylight.ovsdb.lib.notation.UUID; import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.ConnectionInfo; import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.Identifiable; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public abstract class AbstractTransactionCommand implements TransactionCommand { + private static final Logger LOG = LoggerFactory.getLogger(AbstractTransactionCommand.class); private final TableUpdates updates; private final DatabaseSchema dbSchema; - private final HwvtepConnectionInstance key; + protected final HwvtepConnectionInstance key; + protected Set, InstanceIdentifier>> addedKeys = new HashSet<>(); + protected Set, InstanceIdentifier>> deletedKeys = new HashSet<>(); + protected HwvtepDeviceInfo deviceInfo; + public TableUpdates getUpdates() { return updates; @@ -42,6 +57,9 @@ public abstract class AbstractTransactionCommand implement this.updates = updates; this.dbSchema = dbSchema; this.key = key; + if (key != null) { + this.deviceInfo = key.getDeviceInfo(); + } } public HwvtepDeviceInfo getDeviceInfo() { @@ -49,6 +67,44 @@ public abstract class AbstractTransactionCommand implement } void addToDeviceUpdate(TransactionType transactionType, Object element) { - key.getDeviceInfo().addToDeviceUpdate(transactionType, element); + deviceInfo.addToDeviceUpdate(transactionType, element); + } + + public void clearDeviceOpUUID(Class cls, InstanceIdentifier iid, UUID uuid) { + deviceInfo.clearDeviceOperUUID(cls, iid, uuid); + } + + public void addToDeleteTx(ReadWriteTransaction tx, Class cls, InstanceIdentifier iid, + UUID uuid) { + if (deviceInfo.isAvailableInOperDs(cls, iid)) { + tx.delete(LogicalDatastoreType.OPERATIONAL, iid); + } + deletedKeys.add(Pair.of(cls, iid)); + clearDeviceOpUUID(cls, iid, uuid); + } + + public void addToUpdateTx(Class cls, InstanceIdentifier iid, UUID uuid, + Object southboundData) { + addedKeys.add(Pair.of(cls, iid)); + deviceInfo.updateDeviceOperData(cls, iid, uuid, southboundData); + } + + public void onSuccess() { + addedKeys.stream().forEach(pair -> { + deviceInfo.markAvailableInOperDs(pair.getLeft(), pair.getRight()); + }); + deletedKeys.stream().forEach(pair -> { + deviceInfo.clearOperDsAvailability(pair.getLeft(), pair.getRight()); + deviceInfo.clearDeviceOperData(pair.getLeft(), pair.getRight()); + }); + } + + public void onFailure() { + addedKeys.stream().forEach(pair -> { + LOG.error("Failed to add {}", pair.getLeft().getSimpleName()); + }); + deletedKeys.stream().forEach(pair -> { + LOG.error("Failed to delete {}", pair.getLeft().getSimpleName()); + }); } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepLogicalSwitchRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepLogicalSwitchRemoveCommand.java index a2b87a3b6..967dc1a52 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepLogicalSwitchRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepLogicalSwitchRemoveCommand.java @@ -10,7 +10,6 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md; import java.util.Collection; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance; import org.opendaylight.ovsdb.lib.message.TableUpdates; import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; @@ -39,8 +38,7 @@ public class HwvtepLogicalSwitchRemoveCommand extends AbstractTransactionCommand .augmentation(HwvtepGlobalAugmentation.class) .child(LogicalSwitches.class, new LogicalSwitchesKey(new HwvtepNodeName(logicalSwitch.getName()))); // TODO Delete any references - transaction.delete(LogicalDatastoreType.OPERATIONAL, switchIid); - getOvsdbConnectionInstance().getDeviceInfo().clearDeviceOperData(LogicalSwitches.class, switchIid); + addToDeleteTx(transaction, LogicalSwitches.class, switchIid, logicalSwitch.getUuid()); addToDeviceUpdate(TransactionType.DELETE, logicalSwitch); } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepLogicalSwitchUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepLogicalSwitchUpdateCommand.java index ed6bee039..fb275addc 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepLogicalSwitchUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepLogicalSwitchUpdateCommand.java @@ -64,8 +64,7 @@ public class HwvtepLogicalSwitchUpdateCommand extends AbstractTransactionCommand InstanceIdentifier switchIid = getOvsdbConnectionInstance().getInstanceIdentifier() .augmentation(HwvtepGlobalAugmentation.class) .child(LogicalSwitches.class, new LogicalSwitchesKey(new HwvtepNodeName(logicalSwitch.getName()))); - getOvsdbConnectionInstance().getDeviceInfo().updateDeviceOperData(LogicalSwitches.class, switchIid, - logicalSwitch.getUuid(), logicalSwitch); + addToUpdateTx(LogicalSwitches.class, switchIid, logicalSwitch.getUuid(), logicalSwitch); addToDeviceUpdate(TransactionType.ADD, logicalSwitch); // TODO: Delete entries that are no longer needed } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMacEntriesRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMacEntriesRemoveCommand.java index bb5ba8f19..0eebf5f15 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMacEntriesRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMacEntriesRemoveCommand.java @@ -10,7 +10,6 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md; import java.util.Collection; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundConstants; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundMapper; @@ -66,7 +65,7 @@ public class HwvtepMacEntriesRemoveCommand extends AbstractTransactionCommand { .augmentation(HwvtepGlobalAugmentation.class).child(LocalUcastMacs.class, new LocalUcastMacsKey(getLogicalSwitchRef(lum.getLogicalSwitchColumn().getData()), getMacAddress(lum.getMac()))); - transaction.delete(LogicalDatastoreType.OPERATIONAL, lumId); + addToDeleteTx(transaction, LocalUcastMacs.class, lumId, lum.getUuid()); } else { LOG.debug("Failed to delete UcastMacLocal entry {}", lum.getUuid()); } @@ -83,8 +82,7 @@ public class HwvtepMacEntriesRemoveCommand extends AbstractTransactionCommand { .augmentation(HwvtepGlobalAugmentation.class).child(RemoteUcastMacs.class, new RemoteUcastMacsKey(getLogicalSwitchRef(rum.getLogicalSwitchColumn().getData()), getMacAddress(rum.getMac()))); - transaction.delete(LogicalDatastoreType.OPERATIONAL, rumId); - getOvsdbConnectionInstance().getDeviceInfo().clearDeviceOperData(RemoteUcastMacs.class, rumId); + addToDeleteTx(transaction, RemoteUcastMacs.class, rumId, rum.getUuid()); } else { LOG.debug("Failed to delete UcastMacRemote entry {}", rum.getUuid()); } @@ -102,7 +100,7 @@ public class HwvtepMacEntriesRemoveCommand extends AbstractTransactionCommand { .child(LocalMcastMacs.class, new LocalMcastMacsKey(getLogicalSwitchRef(lmm.getLogicalSwitchColumn().getData()), getMacAddress(lmm.getMac()))); - transaction.delete(LogicalDatastoreType.OPERATIONAL, lumId); + addToDeleteTx(transaction, LocalMcastMacs.class, lumId, lmm.getUuid()); } else { LOG.debug("Failed to delete McastMacLocal entry {}", lmm.getUuid()); } @@ -120,7 +118,7 @@ public class HwvtepMacEntriesRemoveCommand extends AbstractTransactionCommand { .child(RemoteMcastMacs.class, new RemoteMcastMacsKey(getLogicalSwitchRef(rmm.getLogicalSwitchColumn().getData()), getMacAddress(rmm.getMac()))); - transaction.delete(LogicalDatastoreType.OPERATIONAL, lumId); + addToDeleteTx(transaction, RemoteMcastMacs.class, lumId, rmm.getUuid()); getOvsdbConnectionInstance().getDeviceInfo().clearDeviceOperData(RemoteMcastMacs.class, lumId); } else { LOG.debug("Failed to delete McastMacRemote entry {}", rmm.getUuid()); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsRemoteUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsRemoteUpdateCommand.java index c7bb3abb1..cc212b76a 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsRemoteUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsRemoteUpdateCommand.java @@ -101,8 +101,7 @@ public class HwvtepMcastMacsRemoteUpdateCommand extends AbstractTransactionComma connectionNode.addAugmentation(HwvtepGlobalAugmentation.class, hgAugmentationBuilder.build()); InstanceIdentifier macIid = getOvsdbConnectionInstance().getInstanceIdentifier() .augmentation(HwvtepGlobalAugmentation.class).child(RemoteMcastMacs.class, mac.key()); - getOvsdbConnectionInstance().getDeviceInfo().updateDeviceOperData(RemoteMcastMacs.class, - macIid, macRemote.getUuid(), macRemote); + addToUpdateTx(RemoteMcastMacs.class, macIid, macRemote.getUuid(), macRemote); return connectionNode.build(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorRemoveCommand.java index 4b59ab9e7..6fd1636d4 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorRemoveCommand.java @@ -10,7 +10,6 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md; import java.util.Collection; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundMapper; import org.opendaylight.ovsdb.lib.message.TableUpdates; @@ -36,9 +35,7 @@ public class HwvtepPhysicalLocatorRemoveCommand extends AbstractTransactionComma final InstanceIdentifier connectionIId = getOvsdbConnectionInstance().getInstanceIdentifier(); final InstanceIdentifier nodePath = HwvtepSouthboundMapper .createInstanceIdentifier(connectionIId, locator); - transaction.delete(LogicalDatastoreType.OPERATIONAL, nodePath); - getOvsdbConnectionInstance().getDeviceInfo().clearDeviceOperData(TerminationPoint.class, nodePath); - + addToDeleteTx(transaction, TerminationPoint.class, nodePath, locator.getUuid()); //TODO: Check if any cleanup is required } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorUpdateCommand.java index f721d6d9e..701b6a5d7 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalLocatorUpdateCommand.java @@ -79,8 +79,7 @@ public class HwvtepPhysicalLocatorUpdateCommand extends AbstractTransactionComma transaction.put(LogicalDatastoreType.OPERATIONAL, tpPath, tpBuilder.build()); } - getOvsdbConnectionInstance().getDeviceInfo().updateDeviceOperData( - TerminationPoint.class, tpPath, locator.getUuid(), locator); + addToUpdateTx(TerminationPoint.class, tpPath, locator.getUuid(), locator); } } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortRemoveCommand.java index 820ba9fde..551ffd4e1 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortRemoveCommand.java @@ -11,7 +11,6 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md; import java.util.Collection; import java.util.Map; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundMapper; import org.opendaylight.ovsdb.hwvtepsouthbound.events.PortEvent; @@ -22,6 +21,7 @@ import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils; import org.opendaylight.ovsdb.schema.hardwarevtep.PhysicalPort; import org.opendaylight.ovsdb.schema.hardwarevtep.PhysicalSwitch; import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.VlanBindings; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId; 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; @@ -67,7 +67,7 @@ public class HwvtepPhysicalPortRemoveCommand extends AbstractTransactionCommand HwvtepSouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(), updatedPSwitchData).child(TerminationPoint.class, new TerminationPointKey(new TpId(portName))); - transaction.delete(LogicalDatastoreType.OPERATIONAL, nodePath); + addToDeleteTx(transaction, VlanBindings.class, nodePath, port.getUuid()); addToDeviceUpdate(TransactionType.DELETE, new PortEvent(port, nodePath.firstKeyOf(Node.class).getNodeId())); getDeviceInfo().clearDeviceOperData(TerminationPoint.class, nodePath); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java index 119596584..76fa4035c 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java @@ -142,8 +142,7 @@ public class HwvtepPhysicalPortUpdateCommand extends AbstractTransactionCommand addToDeviceUpdate(TransactionType.UPDATE, new PortEvent(portUpdate, psNodeId)); } reconcileToPort(portUpdate, tpPath); - getDeviceInfo().updateDeviceOperData(TerminationPoint.class, tpPath, - portUpdate.getUuid(), portUpdate); + addToUpdateTx(VlanBindings.class, tpPath, portUpdate.getUuid(), portUpdate); // Update with Deleted VlanBindings if (oldPPRows.get(portUpdateEntry.getKey()) != null && oldPPRows.get(portUpdateEntry.getKey()).getVlanBindingsColumn() != null) { @@ -175,21 +174,21 @@ public class HwvtepPhysicalPortUpdateCommand extends AbstractTransactionCommand //switch reconciliation will take care of this port along with other ports return; } - if (getDeviceInfo().getDeviceOperData(TerminationPoint.class, tpPath) != null) { + if (getDeviceInfo().getDeviceOperData(VlanBindings.class, tpPath) != null) { //case of port update not new port add return; } //case of individual port add , reconcile to this port - getDeviceInfo().updateDeviceOperData(TerminationPoint.class, tpPath, portUpdate.getUuid(), portUpdate); - HwvtepDeviceInfo.DeviceData data = getDeviceInfo().getConfigData(TerminationPoint.class, tpPath); + addToUpdateTx(VlanBindings.class, tpPath, portUpdate.getUuid(), portUpdate); + HwvtepDeviceInfo.DeviceData data = getDeviceInfo().getConfigData(VlanBindings.class, tpPath); if (data == null || data.getData() == null) { LOG.error("No config data present "); } else { addToDeviceUpdate(TransactionType.ADD, new ReconcilePortEvent(portUpdate, tpPath.firstKeyOf(Node.class).getNodeId())); LOG.info("addToDeviceUpdate {}", portUpdate); - getDeviceInfo().updateDeviceOperData(TerminationPoint.class, tpPath, + getDeviceInfo().updateDeviceOperData(VlanBindings.class, tpPath, portUpdate.getUuid(), portUpdate); getDeviceInfo().scheduleTransaction((transactionBuilder) -> { InstanceIdentifier psIid = tpPath.firstIdentifierOf(Node.class); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsLocalUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsLocalUpdateCommand.java index addcd8adf..9c8c8c5f1 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsLocalUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsLocalUpdateCommand.java @@ -108,6 +108,10 @@ public class HwvtepUcastMacsLocalUpdateCommand extends AbstractTransactionComman ucmlBuilder.setLogicalSwitchRef(new HwvtepLogicalSwitchRef(switchIid)); } } - return ucmlBuilder.build(); + LocalUcastMacs ucastMacsLocal = ucmlBuilder.build(); + InstanceIdentifier iid = key.getInstanceIdentifier().augmentation(HwvtepGlobalAugmentation.class) + .child(LocalUcastMacs.class, ucastMacsLocal.key()); + addToUpdateTx(LocalUcastMacs.class, iid, ucml.getUuid(), ucastMacsLocal); + return ucastMacsLocal; } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsRemoteUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsRemoteUpdateCommand.java index 98fa5a514..7bcdedfe3 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsRemoteUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepUcastMacsRemoteUpdateCommand.java @@ -108,8 +108,7 @@ public class HwvtepUcastMacsRemoteUpdateCommand extends AbstractTransactionComma } RemoteUcastMacs remoteUcastMacs = rumBuilder.build(); InstanceIdentifier macIid = getMacIid(remoteUcastMacs); - getOvsdbConnectionInstance().getDeviceInfo().updateDeviceOperData(RemoteUcastMacs.class, macIid, - macRemote.getUuid(), macRemote); + addToUpdateTx(RemoteUcastMacs.class, macIid, macRemote.getUuid(), macRemote); return remoteUcastMacs; } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionCommand.java index 243a9c85f..9c2339b9a 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionCommand.java @@ -15,6 +15,12 @@ public interface TransactionCommand { void execute(ReadWriteTransaction transaction); + default void onSuccess() { + } + + default void onFailure() { + } + /** * Sets the result future of the executed/submitted transaction. */