Fix Hwvtep Port reconciliation to handle Physical_Port Delete and Add from switch 59/86859/2
authorChandra Shekar S <chandra.shekar.s@ericsson.com>
Mon, 13 Jan 2020 07:19:43 +0000 (12:49 +0530)
committerChetan Arakere Gowdru <chetan.arakere@altencalsoftlabs.com>
Thu, 16 Jan 2020 11:22:35 +0000 (11:22 +0000)
JIRA: OVSDB-494

If the Hwvtep Physical_Port is deleted and added back, vlan bindings are not getting
pushed the switch in this case.
When the Hwvtep Physical_Port is deleted and added back, the uuid of the Port
will get changed, ODL is not handling this case properly as a result of it
vlan bindings are pushed to the switch.
This review is to fix this functionality and get the terminationpoint from the
cache instead of from db, in the reconcilePort.

Signed-off-by: Chandra Shekar S <chandra.shekar.s@ericsson.com>
Change-Id: I8a35c88a0945c320c1f89307223873067d0a6ff2

hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDeviceInfo.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/cli/HwvtepCacheDisplayCmd.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/AbstractTransactCommand.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java

index e8f82cd2852751aa8c5ec3e159a844e9cea7558c..e0605f371f63f64088db3c580925509064624deb 100644 (file)
@@ -207,12 +207,8 @@ public class HwvtepDeviceInfo {
                 new DeviceData(key, null, data, DeviceDataStatus.AVAILABLE));
     }
 
-    public Object getConfigData(Class<? extends Identifiable> cls, InstanceIdentifier key) {
-        DeviceData deviceData = HwvtepSouthboundUtil.getData(configKeyVsData, cls, key);
-        if (deviceData != null) {
-            return deviceData.getData();
-        }
-        return null;
+    public DeviceData getConfigData(Class<? extends Identifiable> cls, InstanceIdentifier key) {
+        return HwvtepSouthboundUtil.getData(configKeyVsData, cls, key);
     }
 
     public Map<Class<? extends Identifiable>, Map<InstanceIdentifier, DeviceData>> getConfigData() {
index 3f5f468e0096658c7c5709b265e188bc6b25b4f7..41031e9c01d6a3bcef9b487d39e2d3576f839c64 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance;
 import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo;
 import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundProvider;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.schema.hardwarevtep.PhysicalPort;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacs;
@@ -180,6 +181,12 @@ public class HwvtepCacheDisplayCmd implements Action {
     private void printTerminationPoint(PrintStream console, HwvtepDeviceInfo.DeviceData deviceData) {
         InstanceIdentifier<TerminationPoint> terminationPointIid = deviceData.getKey();
         console.print(terminationPointIid.firstKeyOf(TerminationPoint.class).getTpId().getValue());
+        try {
+            PhysicalPort physicalPort = (PhysicalPort) deviceData.getData();
+            console.print("    " + physicalPort.getVlanBindingsColumn().getData().keySet());
+        } catch (ClassCastException exp) {
+            //This is the Karaf cli display command , ignore the exception.
+        }
     }
 
     private void printNode(PrintStream console, HwvtepDeviceInfo.DeviceData deviceData) {
index e1fc96189f01bf00c24fd39d41d1bcf4dacef5f5..3b910da6963915528f06be7f8aed5384e78abd69 100644 (file)
@@ -27,8 +27,10 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo;
 import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundUtil;
+import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepTableReader;
 import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
+import org.opendaylight.ovsdb.lib.schema.typed.TypedBaseTable;
 import org.opendaylight.ovsdb.utils.mdsal.utils.ControllerMdsalUtils;
 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.LogicalSwitches;
@@ -87,8 +89,9 @@ public abstract class AbstractTransactCommand<T extends Identifiable, A extends
         T oldData = null;
         Type type = getClass().getGenericSuperclass();
         Type classType = ((ParameterizedType) type).getActualTypeArguments()[0];
-        if (getDeviceInfo().getConfigData((Class<? extends Identifiable>) classType, key) != null) {
-            oldData = (T) getDeviceInfo().getConfigData((Class<? extends Identifiable>) classType, key);
+        if (getDeviceInfo().getConfigData((Class<? extends Identifiable>) classType, key) != null
+                && getDeviceInfo().getConfigData((Class<? extends Identifiable>) classType, key).getData() != null) {
+            oldData = (T) getDeviceInfo().getConfigData((Class<? extends Identifiable>) classType, key).getData();
         }
         updates.putIfAbsent(getDeviceTransaction(), new ArrayList<MdsalUpdate<T>>());
         updates.get(getDeviceTransaction()).add(new MdsalUpdate<>(key, data, oldData));
@@ -396,4 +399,42 @@ public abstract class AbstractTransactCommand<T extends Identifiable, A extends
     void updateControllerTxHistory(TransactionType transactionType, Object element) {
         getOperationalState().getDeviceInfo().addToControllerTx(transactionType, element);
     }
+
+    public <T> HwvtepDeviceInfo.DeviceData fetchDeviceData(Class<? extends Identifiable> cls, InstanceIdentifier key) {
+        HwvtepDeviceInfo.DeviceData deviceData  = getDeviceOpData(cls, key);
+        if (deviceData == null) {
+            LOG.debug("Could not find data for key {}", getNodeKeyStr(key));
+            java.util.Optional<TypedBaseTable> optional = getTableReader().getHwvtepTableEntryUUID(cls, key, null);
+            if (optional.isPresent()) {
+                LOG.debug("Found the data for key from device {} ", getNodeKeyStr(key));
+                getDeviceInfo().updateDeviceOperData(cls, key, optional.get().getUuid(), (T)optional.get());
+                return getDeviceOpData(cls, key);
+            } else {
+                LOG.info("Could not Find the data for key from device {} ", getNodeKeyStr(key));
+            }
+        }
+        return deviceData;
+    }
+
+    protected String getNodeKeyStr(InstanceIdentifier iid) {
+        try {
+            return getClassType().getTypeName() + "." + ((Node) iid.firstKeyOf(Node.class)).getNodeId().getValue() + "."
+                    + getKeyStr(iid);
+        } catch (ClassCastException  exp) {
+            LOG.error("Error in getting the Node id ", exp);
+        }
+        return iid.toString();
+    }
+
+    protected String getKeyStr(InstanceIdentifier iid) {
+        return iid.toString();
+    }
+
+    public HwvtepDeviceInfo.DeviceData getDeviceOpData(Class<? extends Identifiable> cls, InstanceIdentifier key) {
+        return getOperationalState().getDeviceInfo().getDeviceOperData(cls, key);
+    }
+
+    public HwvtepTableReader getTableReader() {
+        return getOperationalState().getConnectionInstance().getHwvtepTableReader();
+    }
 }
index 91b0a1eccaed9f05429d96321c51345c864a951b..9b9bce98191a13e318fe9e75c571dcff493b6d38 100644 (file)
@@ -49,18 +49,18 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
 
     @Override
     public void execute(final TransactionBuilder transaction) {
-        Map<InstanceIdentifier<Node>, List<HwvtepPhysicalPortAugmentation>> createds =
-                extractCreated(getChanges(),HwvtepPhysicalPortAugmentation.class);
+        Map<InstanceIdentifier<Node>, List<TerminationPoint>> createds =
+                extractCreated(getChanges(),TerminationPoint.class);
         if (!createds.isEmpty()) {
-            for (Entry<InstanceIdentifier<Node>, List<HwvtepPhysicalPortAugmentation>> created:
+            for (Entry<InstanceIdentifier<Node>, List<TerminationPoint>> created:
                 createds.entrySet()) {
                 updatePhysicalPort(transaction,  created.getKey(), created.getValue());
             }
         }
-        Map<InstanceIdentifier<Node>, List<HwvtepPhysicalPortAugmentation>> updateds =
-                extractUpdatedPorts(getChanges(), HwvtepPhysicalPortAugmentation.class);
+        Map<InstanceIdentifier<Node>, List<TerminationPoint>> updateds =
+                extractUpdatedPorts(getChanges(), TerminationPoint.class);
         if (!updateds.isEmpty()) {
-            for (Entry<InstanceIdentifier<Node>, List<HwvtepPhysicalPortAugmentation>> updated:
+            for (Entry<InstanceIdentifier<Node>, List<TerminationPoint>> updated:
                 updateds.entrySet()) {
                 updatePhysicalPort(transaction,  updated.getKey(), updated.getValue());
             }
@@ -69,19 +69,26 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
 
     public void updatePhysicalPort(final TransactionBuilder transaction,
                                    final InstanceIdentifier<Node> psNodeiid,
-                                   final List<HwvtepPhysicalPortAugmentation> listPort) {
+                                   final List<TerminationPoint> listPort) {
         //Get physical switch which the port belong to: in operation DS or new created
-        for (HwvtepPhysicalPortAugmentation port : listPort) {
+        for (TerminationPoint tp : listPort) {
+            HwvtepPhysicalPortAugmentation port = tp.augmentation(HwvtepPhysicalPortAugmentation.class);
             LOG.debug("Creating a physical port named: {}", port.getHwvtepNodeName().getValue());
-            HwvtepDeviceInfo.DeviceData deviceOperdata = getDeviceInfo().getDeviceOperData(TerminationPoint.class,
-                    getTpIid(psNodeiid, port.getHwvtepNodeName().getValue()));
-            if (deviceOperdata == null) {
+            InstanceIdentifier<TerminationPoint> key = getTpIid(psNodeiid, port.getHwvtepNodeName().getValue());
+
+            getOperationalState().getDeviceInfo().updateConfigData(TerminationPoint.class, key, tp);
+            HwvtepDeviceInfo.DeviceData deviceOperdata = getDeviceInfo().getDeviceOperData(TerminationPoint.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);
+            }
+            if (deviceOperdata == null || deviceOperdata.getData() == null) {
                 //create a physical port always happens from device
                 LOG.error("Physical port {} not present in oper datastore", port.getHwvtepNodeName().getValue());
             } else {
                 PhysicalPort physicalPort = transaction.getTypedRowWrapper(PhysicalPort.class);
                 physicalPort.setName(port.getHwvtepNodeName().getValue());
-                setVlanBindings(psNodeiid, physicalPort, port, transaction);
+                setVlanBindings(psNodeiid, physicalPort, tp, transaction);
                 setDescription(physicalPort, port);
                 String existingPhysicalPortName = port.getHwvtepNodeName().getValue();
                 PhysicalPort extraPhyscialPort = transaction.getTypedRowWrapper(PhysicalPort.class);
@@ -105,8 +112,9 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
 
     private void setVlanBindings(final InstanceIdentifier<Node> psNodeiid,
                                  final PhysicalPort physicalPort,
-                                 final HwvtepPhysicalPortAugmentation inputPhysicalPort,
+                                 final TerminationPoint tp,
                                  final TransactionBuilder transaction) {
+        HwvtepPhysicalPortAugmentation inputPhysicalPort = tp.augmentation(HwvtepPhysicalPortAugmentation.class);
         if (inputPhysicalPort.getVlanBindings() != null) {
             //get UUID by LogicalSwitchRef
             Map<Long, UUID> bindingMap = new HashMap<>();
@@ -122,12 +130,12 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
                         getOperationalState(), vlanBinding);
 
                 if (!HwvtepSouthboundUtil.isEmptyMap(configDependencies)) {
-                    createConfigWaitJob(psNodeiid, inputPhysicalPort,
+                    createConfigWaitJob(psNodeiid, tp,
                             vlanBinding, configDependencies, vlanIid);
                     continue;
                 }
                 if (!HwvtepSouthboundUtil.isEmptyMap(inTransitDependencies)) {
-                    createOperWaitingJob(psNodeiid, inputPhysicalPort,
+                    createOperWaitingJob(psNodeiid, tp,
                             vlanBinding, inTransitDependencies, vlanIid);
                     continue;
                 }
@@ -140,7 +148,7 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
     }
 
     private void createOperWaitingJob(final InstanceIdentifier<Node> psNodeiid,
-                                      final HwvtepPhysicalPortAugmentation inputPhysicalPort,
+                                      final TerminationPoint inputPhysicalPort,
                                       final VlanBindings vlanBinding,
                                       final Map inTransitDependencies,
                                       final InstanceIdentifier<VlanBindings> vlanIid) {
@@ -159,7 +167,7 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
     }
 
     private void createConfigWaitJob(final InstanceIdentifier<Node> psNodeiid,
-                                     final HwvtepPhysicalPortAugmentation inputPhysicalPort,
+                                     final TerminationPoint inputPhysicalPort,
                                      final VlanBindings vlanBinding,
                                      final Map configDependencies,
                                      final InstanceIdentifier<VlanBindings> vlanIid) {
@@ -206,22 +214,22 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
         }
     }
 
-    private static Map<InstanceIdentifier<Node>, List<HwvtepPhysicalPortAugmentation>> extractCreated(
-            final Collection<DataTreeModification<Node>> changes, final Class<HwvtepPhysicalPortAugmentation> class1) {
-        Map<InstanceIdentifier<Node>, List<HwvtepPhysicalPortAugmentation>> result = new HashMap<>();
+    private static Map<InstanceIdentifier<Node>, List<TerminationPoint>> extractCreated(
+            final Collection<DataTreeModification<Node>> changes, final Class<TerminationPoint> class1) {
+        Map<InstanceIdentifier<Node>, List<TerminationPoint>> result = new HashMap<>();
         if (changes != null && !changes.isEmpty()) {
             for (DataTreeModification<Node> change : changes) {
                 final InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
                 final DataObjectModification<Node> mod = change.getRootNode();
                 Node created = TransactUtils.getCreated(mod);
                 if (created != null) {
-                    List<HwvtepPhysicalPortAugmentation> portListUpdated = new ArrayList<>();
+                    List<TerminationPoint> portListUpdated = new ArrayList<>();
                     if (created.getTerminationPoint() != null) {
                         for (TerminationPoint tp : created.getTerminationPoint()) {
                             HwvtepPhysicalPortAugmentation hppAugmentation =
                                     tp.augmentation(HwvtepPhysicalPortAugmentation.class);
                             if (hppAugmentation != null) {
-                                portListUpdated.add(hppAugmentation);
+                                portListUpdated.add(tp);
                             }
                         }
                     }
@@ -232,9 +240,9 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
         return result;
     }
 
-    private static Map<InstanceIdentifier<Node>, List<HwvtepPhysicalPortAugmentation>> extractUpdatedPorts(
-            final Collection<DataTreeModification<Node>> changes, final Class<HwvtepPhysicalPortAugmentation> class1) {
-        Map<InstanceIdentifier<Node>, List<HwvtepPhysicalPortAugmentation>> result = new HashMap<>();
+    private static Map<InstanceIdentifier<Node>, List<TerminationPoint>> extractUpdatedPorts(
+            final Collection<DataTreeModification<Node>> changes, final Class<TerminationPoint> class1) {
+        Map<InstanceIdentifier<Node>, List<TerminationPoint>> result = new HashMap<>();
         if (changes != null && !changes.isEmpty()) {
             for (DataTreeModification<Node> change : changes) {
                 final InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
@@ -242,14 +250,14 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
                 Node updated = TransactUtils.getUpdated(mod);
                 Node before = mod.getDataBefore();
                 if (updated != null && before != null) {
-                    List<HwvtepPhysicalPortAugmentation> portListUpdated = new ArrayList<>();
-                    List<HwvtepPhysicalPortAugmentation> portListBefore = new ArrayList<>();
+                    List<TerminationPoint> portListUpdated = new ArrayList<>();
+                    List<TerminationPoint> portListBefore = new ArrayList<>();
                     if (updated.getTerminationPoint() != null) {
                         for (TerminationPoint tp : updated.getTerminationPoint()) {
                             HwvtepPhysicalPortAugmentation hppAugmentation =
                                     tp.augmentation(HwvtepPhysicalPortAugmentation.class);
                             if (hppAugmentation != null) {
-                                portListUpdated.add(hppAugmentation);
+                                portListUpdated.add(tp);
                             }
                         }
                     }
@@ -258,7 +266,7 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
                             HwvtepPhysicalPortAugmentation hppAugmentation =
                                     tp.augmentation(HwvtepPhysicalPortAugmentation.class);
                             if (hppAugmentation != null) {
-                                portListBefore.add(hppAugmentation);
+                                portListBefore.add(tp);
                             }
                         }
                     }
@@ -269,4 +277,14 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand {
         }
         return result;
     }
+
+    protected String getKeyStr(InstanceIdentifier iid) {
+        try {
+            return ((TerminationPoint)iid.firstKeyOf(TerminationPoint.class)).getTpId().getValue();
+        } catch (ClassCastException exp) {
+            LOG.error("Error in getting the TerminationPoint id ", exp);
+        }
+        return super.getKeyStr(iid);
+    }
+
 }
index 73ce80bbabd53497ca50c6d91ca9b0f461e709f6..119596584e26ac50d3c85406a95c9ac788498f5b 100644 (file)
@@ -10,9 +10,6 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.MoreExecutors;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -23,6 +20,7 @@ import java.util.Set;
 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.hwvtepsouthbound.HwvtepSouthboundMapper;
 import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundUtil;
 import org.opendaylight.ovsdb.hwvtepsouthbound.events.PortEvent;
@@ -180,37 +178,30 @@ public class HwvtepPhysicalPortUpdateCommand extends AbstractTransactionCommand
         if (getDeviceInfo().getDeviceOperData(TerminationPoint.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);
-        Futures.addCallback(mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, tpPath),
-                new FutureCallback<Optional<TerminationPoint>>() {
-                    @Override
-                    public void onSuccess(final Optional<TerminationPoint> optionalConfigTp) {
-                        if (!optionalConfigTp.isPresent() || optionalConfigTp.get().augmentation(
-                                HwvtepPhysicalPortAugmentation.class) == null) {
-                            //TODO port came with some vlan bindings clean them up use PortRemovedCommand
-                            return;
-                        }
-                        addToDeviceUpdate(TransactionType.ADD,
-                                new ReconcilePortEvent(portUpdate, tpPath.firstKeyOf(Node.class).getNodeId()));
-                        getDeviceInfo().updateDeviceOperData(TerminationPoint.class, tpPath,
-                                portUpdate.getUuid(), portUpdate);
-                        TerminationPoint configTp = optionalConfigTp.get();
-                        getDeviceInfo().scheduleTransaction((transactionBuilder) -> {
-                            InstanceIdentifier psIid = tpPath.firstIdentifierOf(Node.class);
-                            HwvtepOperationalState operState = new HwvtepOperationalState(getOvsdbConnectionInstance());
-                            PhysicalPortUpdateCommand portUpdateCommand = new PhysicalPortUpdateCommand(
-                                    operState, Collections.EMPTY_LIST);
-                            portUpdateCommand.updatePhysicalPort(transactionBuilder, psIid,
-                                    Lists.newArrayList(configTp.augmentation(HwvtepPhysicalPortAugmentation.class)));
-                        });
-                    }
+        HwvtepDeviceInfo.DeviceData data = getDeviceInfo().getConfigData(TerminationPoint.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,
+                    portUpdate.getUuid(), portUpdate);
+            getDeviceInfo().scheduleTransaction((transactionBuilder) -> {
+                InstanceIdentifier psIid = tpPath.firstIdentifierOf(Node.class);
+                HwvtepOperationalState operState = new HwvtepOperationalState(getOvsdbConnectionInstance());
+                PhysicalPortUpdateCommand portUpdateCommand = new PhysicalPortUpdateCommand(
+                        operState, Collections.EMPTY_LIST);
+                TerminationPoint cfgPoint = (TerminationPoint) data.getData();
+                portUpdateCommand.updatePhysicalPort(transactionBuilder, psIid,
+                            Lists.newArrayList(cfgPoint));
 
-                    @Override
-                    public void onFailure(final Throwable throwable) {
-                    }
-                }, MoreExecutors.directExecutor());
+            });
+        }
     }
 
     private static <T extends DataObject> void deleteEntries(final ReadWriteTransaction transaction,