X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=rapp-manager-acm%2Fsrc%2Fmain%2Fjava%2Fcom%2Foransc%2Frappmanager%2Facm%2Fservice%2FAcmDeployer.java;h=26d4418d238329f005370f4be04ce6e5f5bcc33c;hb=dc1302f9cc01b098fc1a44bcdd115350c032ee45;hp=eb93ed362e9cc0cee206eeafe658a509d4d80b06;hpb=b45f4856cd283f8b9e3e3372a80767145db6b554;p=nonrtric%2Fplt%2Frappmanager.git diff --git a/rapp-manager-acm/src/main/java/com/oransc/rappmanager/acm/service/AcmDeployer.java b/rapp-manager-acm/src/main/java/com/oransc/rappmanager/acm/service/AcmDeployer.java index eb93ed3..26d4418 100755 --- a/rapp-manager-acm/src/main/java/com/oransc/rappmanager/acm/service/AcmDeployer.java +++ b/rapp-manager-acm/src/main/java/com/oransc/rappmanager/acm/service/AcmDeployer.java @@ -31,6 +31,7 @@ import com.oransc.rappmanager.models.statemachine.RappInstanceStateMachine; import java.util.UUID; import java.util.concurrent.TimeUnit; import lombok.RequiredArgsConstructor; +import org.onap.policy.clamp.models.acm.concepts.AcTypeState; import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; import org.onap.policy.clamp.models.acm.concepts.DeployState; import org.onap.policy.clamp.models.acm.concepts.LockState; @@ -139,6 +140,8 @@ public class AcmDeployer implements RappDeployer { } catch (Exception e) { logger.warn("Error in deploying Rapp", e); } + rappInstanceStateMachine.sendRappInstanceEvent(rappInstance, RappEvent.ACMDEPLOYFAILED); + rappInstance.setReason("Unable to deploy ACM"); return false; } @@ -158,6 +161,8 @@ public class AcmDeployer implements RappDeployer { return true; } } + rappInstanceStateMachine.sendRappInstanceEvent(rappInstance, RappEvent.ACMUNDEPLOYFAILED); + rappInstance.setReason("Unable to undeploy ACM"); return false; } @@ -173,11 +178,12 @@ public class AcmDeployer implements RappDeployer { primeACMComposition(commissioningResponse.getCompositionId(), PrimeOrder.PRIME); return true; } else { - logger.error("Failed to create automation composition"); + logger.warn("Failed to create automation composition"); } } catch (Exception e) { - logger.error("Failed to create automation composition", e); + logger.warn("Error in creating automation composition", e); } + rapp.setReason("Unable to create automation composition"); return false; } @@ -185,16 +191,45 @@ public class AcmDeployer implements RappDeployer { public boolean deprimeRapp(Rapp rapp) { try { primeACMComposition(rapp.getCompositionId(), PrimeOrder.DEPRIME); - CommissioningResponse commissioningResponse = deleteComposition(rapp.getCompositionId()); - if (commissioningResponse != null) { - return true; + if (waitForCompositionTargetState(rapp.getCompositionId(), AcTypeState.COMMISSIONED)) { + CommissioningResponse commissioningResponse = deleteComposition(rapp.getCompositionId()); + if (commissioningResponse != null) { + rapp.setCompositionId(null); + return true; + } } } catch (Exception e) { - logger.error("Failed deprime automation composition", e); + logger.warn("Failed deprime automation composition", e); } + rapp.setReason("Unable to delete automation composition"); return false; } + boolean waitForCompositionTargetState(UUID compositionId, AcTypeState acTypeState) { + boolean targetCompositionStateTransition = false; + try { + for (int i = 0; i < acmConfiguration.getMaxRetries(); i++) { + logger.debug("Composition state check {}", i + 1); + if (isCompositionStateEquals(compositionId, acTypeState)) { + logger.debug("Composition {} state is {}", compositionId, acTypeState); + targetCompositionStateTransition = true; + break; + } else { + TimeUnit.SECONDS.sleep(acmConfiguration.getRetryInterval()); + } + } + } catch (Exception e) { + logger.warn("Unable to get composition state for composition {}", compositionId, e); + Thread.currentThread().interrupt(); + } + return targetCompositionStateTransition; + } + + boolean isCompositionStateEquals(UUID compositionId, AcTypeState acTypeState) { + return automationCompositionDefinitionApiClient.getCompositionDefinition(compositionId, UUID.randomUUID()) + .getState().equals(acTypeState); + } + public void syncRappInstanceStatus(UUID compositionId, RappInstance rappInstance) { if (rappInstance.getAcm().getAcmInstanceId() != null) { try {