From 69453d796578d46f1c0b98964b3a786718a86863 Mon Sep 17 00:00:00 2001 From: Joey Sullivan Date: Wed, 22 Nov 2017 21:22:02 +0000 Subject: Deleting missing vnf-list entry cause infiniteLoop Deleting a vnf-list entry that does not exist from the databoker throws a ModifiedNodeDoesNotExistException. This conflicted with the optimistic locking retry mechanism causing a infinite loop. Change-Id: I216a31eabf710ed365c8d928e4df0e866848eeca Issue-ID: SDNC-156 Signed-off-by: Joey Sullivan --- .../java/org/onap/sdnc/vnfapi/vnfapiProvider.java | 25 ++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'vnfapi/provider/src/main') diff --git a/vnfapi/provider/src/main/java/org/onap/sdnc/vnfapi/vnfapiProvider.java b/vnfapi/provider/src/main/java/org/onap/sdnc/vnfapi/vnfapiProvider.java index e8a9e716..30f85859 100644 --- a/vnfapi/provider/src/main/java/org/onap/sdnc/vnfapi/vnfapiProvider.java +++ b/vnfapi/provider/src/main/java/org/onap/sdnc/vnfapi/vnfapiProvider.java @@ -771,30 +771,33 @@ public class vnfapiProvider implements AutoCloseable, VNFAPIService, DataChangeL InstanceIdentifier.builder(Vnfs.class).child(VnfList.class, entry.getKey()); InstanceIdentifier path = vnfListIdBuilder.build(); - int tries = 2; - while (true) { + int optimisticLockTries = 2; + boolean tryAgain =true; + while (tryAgain) { + tryAgain = false; try { WriteTransaction tx = dataBroker.newWriteOnlyTransaction(); tx.delete(storeType, path); tx.submit().checkedGet(); log.debug("DataStore delete succeeded"); - break; } catch (final TransactionCommitFailedException e) { if (e instanceof OptimisticLockFailedException) { - if (--tries <= 0) { + if (--optimisticLockTries <= 0) { log.debug("Got OptimisticLockFailedException on last try - failing "); throw new IllegalStateException(e); } log.debug("Got OptimisticLockFailedException - trying again "); + tryAgain = true; + continue; } - else { - if (e.getCause() instanceof ModifiedNodeDoesNotExistException) { - log.debug("Ignoring MpdifiedNodeDoesNotExistException"); - } else { - log.debug("Delete DataStore failed"); - throw new IllegalStateException(e); - } + + if (e.getCause() instanceof ModifiedNodeDoesNotExistException) { + log.debug("Ignoring MpdifiedNodeDoesNotExistException"); + break; } + + log.debug("Delete DataStore failed"); + throw new IllegalStateException(e); } } } -- cgit 1.2.3-korg