X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=rapp-manager-acm%2Fsrc%2Fmain%2Fjava%2Fcom%2Foransc%2Frappmanager%2Facm%2Fservice%2FAcmDeployer.java;h=26d4418d238329f005370f4be04ce6e5f5bcc33c;hb=dc1302f9cc01b098fc1a44bcdd115350c032ee45;hp=0cfeb9b78bb627e9ee6986ea242cece536c032f4;hpb=8accdd881808e0086e46a7e4388fa43c7997aa72;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 0cfeb9b..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; @@ -190,9 +191,12 @@ 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.warn("Failed deprime automation composition", e); @@ -201,6 +205,31 @@ public class AcmDeployer implements RappDeployer { 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 {