diff options
Diffstat (limited to 'nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java')
-rw-r--r-- | nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java | 87 |
1 files changed, 44 insertions, 43 deletions
diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java index d6b1cb20..5a21225b 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java @@ -43,10 +43,10 @@ import static com.google.common.collect.Iterables.tryFind; import static com.google.common.collect.Lists.newArrayList; import static java.util.Optional.empty; import static java.util.Optional.of; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.fatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider.NOKIA_LCM_API_VERSION; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.ILifecycleChangeNotificationManager.SEPARATOR; import static org.slf4j.LoggerFactory.getLogger; import static org.springframework.util.StringUtils.isEmpty; @@ -58,6 +58,7 @@ import static org.springframework.util.StringUtils.isEmpty; */ @Component public class JobManager { + public static final String OPERATION_STARTED_DESCRIPTION = "Operation started"; private static final Ordering<JobResponseInfo> OLDEST_FIRST = new Ordering<JobResponseInfo>() { @Override public int compare(JobResponseInfo left, JobResponseInfo right) { @@ -130,7 +131,7 @@ public class JobManager { * @return the system has any ongoing jobs */ public boolean hasOngoingJobs() { - return ongoingJobs.size() != 0; + return !ongoingJobs.isEmpty(); } @@ -155,7 +156,7 @@ public class JobManager { * @return detailed information of the job */ public JobDetailInfo getJob(String vnfmId, String jobId) { - logger.debug("Retrieving the details for job with " + jobId); + logger.debug("Retrieving the details for job with {} identifier", jobId); ArrayList<String> jobParts = newArrayList(on(SEPARATOR).split(jobId)); if (jobParts.size() != 2) { throw new IllegalArgumentException("The jobId should be in the <vnfId>" + SEPARATOR + "<UUID> format, but was " + jobId); @@ -172,7 +173,7 @@ public class JobManager { if (!vnf.isPresent()) { return getJobDetailInfoForMissingVnf(jobId); } else { - return getJobInfoForExistingVnf(vnfmId, jobId, vnfId, vnf); + return getJobInfoForExistingVnf(vnfmId, jobId, vnfId, vnf.get()); } } @@ -184,34 +185,10 @@ public class JobManager { } } - private JobDetailInfo getJobInfoForExistingVnf(String vnfmId, String jobId, String vnfId, Optional<VnfInfo> vnf) { + private JobDetailInfo getJobInfoForExistingVnf(String vnfmId, String jobId, String vnfId, VnfInfo vnf) { try { OperationExecution operation = findOperationByJobId(vnfmId, vnf, jobId); - switch (operation.getStatus()) { - case STARTED: - return reportOngoing(jobId); - case FINISHED: - case OTHER: - switch (operation.getOperationType()) { - case TERMINATE: - //termination includes VNF deletion in ONAP terminology - if (ongoingJobs.contains(jobId)) { - return reportOngoing(jobId); - } else { - //the VNF must be queried again since it could have been deleted since the VNF has been terminated - if (getVnf(vnfmId, vnfId).isPresent()) { - return reportFailed(jobId, "unable to delete VNF"); - } else { - return reportFinished(jobId); - } - } - default: - return reportFinished(jobId); - } - default: //all cases handled - case FAILED: - return reportFailed(jobId, operation.getError().getTitle() + ": " + operation.getError().getDetail()); - } + return getJobDetailInfo(vnfmId, jobId, vnfId, operation); } catch (NoSuchElementException e) { if (ongoingJobs.contains(jobId)) { return reportOngoing(jobId); @@ -221,6 +198,33 @@ public class JobManager { } } + private JobDetailInfo getJobDetailInfo(String vnfmId, String jobId, String vnfId, OperationExecution operation) { + switch (operation.getStatus()) { + case STARTED: + return reportOngoing(jobId); + case FINISHED: + case OTHER: + //termination includes VNF deletion in ONAP terminology + if (operation.getOperationType() == com.nokia.cbam.lcm.v32.model.OperationType.TERMINATE) { + if (ongoingJobs.contains(jobId)) { + return reportOngoing(jobId); + } else { + //the VNF must be queried again since it could have been deleted since the VNF has been terminated + if (getVnf(vnfmId, vnfId).isPresent()) { + return reportFailed(jobId, "unable to delete VNF"); + } else { + return reportFinished(jobId); + } + } + } else { + return reportFinished(jobId); + } + case FAILED: + default: //all cases handled + return reportFailed(jobId, operation.getError().getTitle() + ": " + operation.getError().getDetail()); + } + } + private JobDetailInfo buildJob(String jobId, JobResponseInfo... history) { JobDetailInfo job = new JobDetailInfo(); job.setJobId(jobId); @@ -247,37 +251,36 @@ public class JobManager { } private JobDetailInfo reportOngoing(String jobId) { - return buildJob(jobId, buildJobPart("Operation started", JobStatus.STARTED, 50, 1)); + return buildJob(jobId, buildJobPart(OPERATION_STARTED_DESCRIPTION, JobStatus.STARTED, 50, 1)); } private JobDetailInfo reportFailed(String jobId, String reason) { return buildJob(jobId, - buildJobPart("Operation started", JobStatus.STARTED, 50, 1), + buildJobPart(OPERATION_STARTED_DESCRIPTION, JobStatus.STARTED, 50, 1), buildJobPart("Operation failed due to " + reason, JobStatus.ERROR, 100, 2) ); } private JobDetailInfo reportFinished(String jobId) { return buildJob(jobId, - buildJobPart("Operation started", JobStatus.STARTED, 50, 1), + buildJobPart(OPERATION_STARTED_DESCRIPTION, JobStatus.STARTED, 50, 1), buildJobPart("Operation finished", JobStatus.FINISHED, 100, 2) ); } - private OperationExecution findOperationByJobId(String vnfmId, Optional<VnfInfo> vnf, String jobId) { + private OperationExecution findOperationByJobId(String vnfmId, VnfInfo vnf, String jobId) { OperationExecutionsApi cbamOperationExecutionApi = cbamRestApiProvider.getCbamOperationExecutionApi(vnfmId); //the operations are sorted so that the newest operations are queried first //performance optimization that usually the core system is interested in the operations executed last - if (vnf.get().getOperationExecutions() != null) { - for (OperationExecution operationExecution : LifecycleChangeNotificationManager.NEWEST_OPERATIONS_FIRST.sortedCopy(vnf.get().getOperationExecutions())) { + if (vnf.getOperationExecutions() != null) { + for (OperationExecution operationExecution : LifecycleChangeNotificationManager.NEWEST_OPERATIONS_FIRST.sortedCopy(vnf.getOperationExecutions())) { try { Object operationParams = cbamOperationExecutionApi.operationExecutionsOperationExecutionIdOperationParamsGet(operationExecution.getId(), NOKIA_LCM_API_VERSION); if (extractOnapJobId(operationParams).equals(jobId)) { return operationExecution; } } catch (ApiException e) { - logger.error("Unable to retrieve operation parameters", e); - throw new RuntimeException(e); + fatalFailure(logger, "Unable to retrieve operation parameters", e); } } } @@ -292,17 +295,15 @@ public class JobManager { List<VnfInfo> vnfs = cbamLcmApi.vnfsGet(NOKIA_LCM_API_VERSION); com.google.common.base.Optional<VnfInfo> vnf = tryFind(vnfs, vnfInfo -> vnfId.equals(vnfInfo.getId())); if (!vnf.isPresent()) { - logger.debug("VNF with " + vnfId + " is missing"); + logger.debug("VNF with {} identifier is missing", vnfId); return empty(); } else { - logger.debug("VNF with " + vnfId + " still exists"); + logger.debug("VNF with {} identifier still exists", vnfId); //query the VNF again to get operation execution result return of(cbamLcmApi.vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION)); } } catch (ApiException e) { - logger.error("Unable to retrieve VNF", e); - throw new RuntimeException(e); + throw fatalFailure(logger, "Unable to retrieve VNF", e); } } - } |