Fix DCAE deploy/undeploy

Add configurable timer and attempt for the DCAE GetOperation Status

Issue-ID: CLAMP-159
Change-Id: I537961af135d0197330ec89da12dcff467153311
Signed-off-by: Determe, Sebastien (sd378r) <sd378r@intl.att.com>
diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java
index 2ba910a..0ca2850 100644
--- a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java
+++ b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java
@@ -90,6 +90,22 @@
         }

     }

 

+    public String getOperationStatusWithRetry(String operationStatusUrl) throws InterruptedException {

+        String operationStatus = "";

+        for (int i = 0; i < Integer.valueOf(refProp.getStringValue("dcae.dispatcher.retry.limit")); i++) {

+            logger.info("Trying to get Operation status on DCAE for url:" + operationStatusUrl);

+            operationStatus = getOperationStatus(operationStatusUrl);

+            logger.info("Current Status is:" + operationStatus);

+            if (!"processing".equalsIgnoreCase(operationStatus)) {

+                return operationStatus;

+            } else {

+                Thread.sleep(Integer.valueOf(refProp.getStringValue("dcae.dispatcher.retry.interval")));

+            }

+        }

+        logger.warn("Number of attempts on DCAE is over, stopping the getOperationStatus method");

+        return operationStatus;

+    }

+

     /**

      * Get the Operation Status from a specified URL.

      * 

diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java
index 1b76067..592a945 100644
--- a/src/main/java/org/onap/clamp/clds/service/CldsService.java
+++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java
@@ -849,17 +849,7 @@
             }
             String createNewDeploymentStatusUrl = dcaeDispatcherServices.createNewDeployment(deploymentId,
                     model.getTypeId(), modelProp.getGlobal().getDeployParameters());
-            String operationStatus = "processing";
-            long waitingTime = System.nanoTime() + DCAE_DEPLOY_WAITING_TIME;
-            while ("processing".equalsIgnoreCase(operationStatus)) {
-                if (waitingTime < System.nanoTime()) {
-                    logger.info("Waiting is over for DCAE deployment");
-                    break;
-                }
-                logger.info("Waiting 5s before sending query to DCAE");
-                Thread.sleep(5000);
-                operationStatus = dcaeDispatcherServices.getOperationStatus(createNewDeploymentStatusUrl);
-            }
+            String operationStatus = dcaeDispatcherServices.getOperationStatusWithRetry(createNewDeploymentStatusUrl);
             if ("succeeded".equalsIgnoreCase(operationStatus)) {
                 String artifactName = model.getControlName();
                 if (artifactName != null) {
@@ -904,14 +894,7 @@
         try {
             String operationStatusUndeployUrl = dcaeDispatcherServices.deleteExistingDeployment(model.getDeploymentId(),
                     model.getTypeId());
-            String operationStatus = "processing";
-            long waitingTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(10);
-            while ("processing".equalsIgnoreCase(operationStatus)) {
-                if (waitingTime < System.nanoTime()) {
-                    break;
-                }
-                operationStatus = dcaeDispatcherServices.getOperationStatus(operationStatusUndeployUrl);
-            }
+            String operationStatus = dcaeDispatcherServices.getOperationStatusWithRetry(operationStatusUndeployUrl);
             if ("succeeded".equalsIgnoreCase(operationStatus)) {
                 String artifactName = model.getControlName();
                 if (artifactName != null) {
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index d9d69c7..1724818 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -201,6 +201,8 @@
 

 #DCAE Dispatcher Url Properties

 clamp.config.dcae.dispatcher.url=http://dcae.api.simpledemo.onap.org:8188

+clamp.config.dcae.dispatcher.retry.interval=10000

+clamp.config.dcae.dispatcher.retry.limit=10

 clamp.config.dcae.header.requestId = X-ECOMP-RequestID

 

 #Define user permission related parameters, the permission type can be changed but MUST be redefined in clds-users.properties in that case !

diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties
index 0d206cf..b543af1 100644
--- a/src/test/resources/application.properties
+++ b/src/test/resources/application.properties
@@ -194,9 +194,13 @@
 

 #DCAE Inventory Url Properties

 clamp.config.dcae.inventory.url=http://localhost:${docker.http-cache.port.host}

+clamp.config.dcae.intentory.retry.interval=10000

+clamp.config.dcae.intentory.retry.limit=3

 

 #DCAE Dispatcher Url Properties

 clamp.config.dcae.dispatcher.url=http://localhost:${docker.http-cache.port.host}

+clamp.config.dcae.dispatcher.retry.interval=10000

+clamp.config.dcae.dispatcher.retry.limit=10

 clamp.config.dcae.header.requestId = X-ECOMP-RequestID

 

 #Define user permission related parameters, the permission type can be changed but MUST be redefined in clds-users.properties in that case !