From 60789663d1c0747bc15f38bd67a507ca1351542b Mon Sep 17 00:00:00 2001
From: Christos Tranoris <tranoris@ece.upatras.gr>
Date: Thu, 7 Dec 2023 00:38:36 +0200
Subject: [PATCH] Closes #6

---
 .../management/CROrchestrationService.java    |  5 ++++
 .../osl/osom/serviceactions/CRPatchTask.java  | 26 ++++++++++++++++++-
 .../osom/serviceactions/CRTerminateTask.java  | 12 ++++++++-
 3 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/etsi/osl/osom/management/CROrchestrationService.java b/src/main/java/org/etsi/osl/osom/management/CROrchestrationService.java
index 83889fa..08fc212 100644
--- a/src/main/java/org/etsi/osl/osom/management/CROrchestrationService.java
+++ b/src/main/java/org/etsi/osl/osom/management/CROrchestrationService.java
@@ -115,6 +115,11 @@ public class CROrchestrationService implements JavaDelegate {
               sorder.getExpectedCompletionDate(), crspec);
         }
         
+
+        Characteristic servicecrspecLast = aService.getServiceCharacteristicByName("_CR_SPEC_LASTSEND");
+        servicecrspecLast.getValue().setValue( crspec );
+        su.addServiceCharacteristicItem(servicecrspecLast);
+        
         if ( response!=null && response.equals("OK")) {
           su.setState(ServiceStateType.RESERVED);
           Note successNoteItem = new Note();
diff --git a/src/main/java/org/etsi/osl/osom/serviceactions/CRPatchTask.java b/src/main/java/org/etsi/osl/osom/serviceactions/CRPatchTask.java
index 3d04a14..554ccb6 100644
--- a/src/main/java/org/etsi/osl/osom/serviceactions/CRPatchTask.java
+++ b/src/main/java/org/etsi/osl/osom/serviceactions/CRPatchTask.java
@@ -91,20 +91,44 @@ public class CRPatchTask implements JavaDelegate {
       String response = null;
       Characteristic servicecrspec = aService.getServiceCharacteristicByName("_CR_SPEC");
       String crspec = servicecrspec.getValue().getValue();
+      
+
+      Characteristic servicecrspecLast = aService.getServiceCharacteristicByName("_CR_SPEC_LASTSEND");
+      String crspecLast = servicecrspecLast.getValue().getValue();
+      
+      if (crspec.equals(crspecLast)) {
+        logger.debug("CRPatchTask: ignore this patch request. Seems they are the same as the last one send");
+        serviceOrderManager.deleteServiceActionQueueItem(item);
+        return;        
+      }
 
+        int retries = 0;
         response = createNewDeploymentUpdateRequest(aService, crspec);
+        while ( response.equals("SEE OTHER")) {
+          response = createNewDeploymentUpdateRequest(aService, crspec);
+          Thread.sleep(1000);
+          retries++;
+          if (retries>100) { //will support maximum 100 registered CRIDGE in queue
+            break;
+          }
+        }
+        
+        
         Note n = new Note();
         n.setAuthor(compname);
         n.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
 
         if ( response!=null && response.equals("OK")) {
-
           n.setText("Service Action CRPatchTask successful . Action: " + item.getAction() + ". ");
         } else {
           n.setText("Service Action CRPatchTask failed . Action: " + item.getAction() + ". Response = " + response);
         }
 
         supd.addNoteItem(n);
+        
+        servicecrspecLast.getValue().setValue( crspec );
+        supd.addServiceCharacteristicItem(servicecrspecLast);
+        
         serviceOrderManager.deleteServiceActionQueueItem(item);
         serviceOrderManager.updateService(aService.getId(), supd, false);
         
diff --git a/src/main/java/org/etsi/osl/osom/serviceactions/CRTerminateTask.java b/src/main/java/org/etsi/osl/osom/serviceactions/CRTerminateTask.java
index 2648047..6aad949 100644
--- a/src/main/java/org/etsi/osl/osom/serviceactions/CRTerminateTask.java
+++ b/src/main/java/org/etsi/osl/osom/serviceactions/CRTerminateTask.java
@@ -83,7 +83,17 @@ public class CRTerminateTask  implements JavaDelegate {
               }
               
               try {
-                serviceOrderManager.cridgeDeletionRequest( map, crspec);
+                String response = serviceOrderManager.cridgeDeletionRequest( map, crspec);
+
+                int retries = 0;
+                while ( response.equals("SEE OTHER")) {
+                  response = serviceOrderManager.cridgeDeletionRequest( map, crspec);
+                  Thread.sleep(1000);
+                  retries++;
+                  if (retries>100) { //will support maximum 100 registered CRIDGE in queue
+                    break;
+                  }
+                }
                 
               } catch (Exception e) {
                 // TODO Auto-generated catch block
-- 
GitLab