From 33f1416a7fd4f9aed7234bd8522b45cd71456740 Mon Sep 17 00:00:00 2001
From: Christos Tranoris <tranoris@ece.upatras.gr>
Date: Tue, 18 Feb 2025 16:16:50 +0200
Subject: [PATCH] fix attempt for #20

---
 .../org/etsi/osl/cridge/CRRouteBuilder.java   | 13 +++++++---
 .../osl/cridge/KubernetesClientResource.java  |  7 -----
 .../org/etsi/osl/cridge/NamespaceWatcher.java | 26 ++++++++++++++++---
 3 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/src/main/java/org/etsi/osl/cridge/CRRouteBuilder.java b/src/main/java/org/etsi/osl/cridge/CRRouteBuilder.java
index 8323709..b6a920b 100644
--- a/src/main/java/org/etsi/osl/cridge/CRRouteBuilder.java
+++ b/src/main/java/org/etsi/osl/cridge/CRRouteBuilder.java
@@ -57,8 +57,8 @@ public class CRRouteBuilder  extends RouteBuilder{
         .bean( kubernetesClientResource, "patchCR(${headers}, ${body})")
         .convertBodyTo( String.class );
         
-        // every  120000 ms (2 minutes)
-        from( "timer://processUpdateResources?period=120000" )
+        // every  300000 ms (5 minutes)
+        from( "timer://processUpdateResources?period=300000" )
         .log(LoggingLevel.INFO, log, " process nameSpacesTobeDeleted!")
         .to("log:DEBUG?showBody=true&showHeaders=true")
         .bean( CRRouteBuilder.class , "processNameSpacesTobeDeleted()");
@@ -73,9 +73,9 @@ public class CRRouteBuilder  extends RouteBuilder{
 	     long diffInMillies = Math.abs(currentTime .getTime() - datetime.getTime());
 	     
 	     long diff = TimeUnit.MINUTES.convert(diffInMillies, TimeUnit.MILLISECONDS);
-	     if (diff<=2) { //after 2 minutes this namespace will be deleted
+	     if (diff<=10) { //after 10 minutes this namespace will be deleted
 	       return;
-	     }
+	     }	     
 	     
 	     try (final KubernetesClient k8s = new KubernetesClientBuilder().build()) {
 	       logger.info("Trying to delete namespace {}", nameSpaceName);
@@ -85,6 +85,11 @@ public class CRRouteBuilder  extends RouteBuilder{
 	            .endMetadata().build();
 	        k8s.namespaces().resource(ns).delete();     
 	        
+	        NamespaceWatcher watchersForNamespace = kubernetesClientResource.getWatchersForNamespaces().get( nameSpaceName );
+	        if ( watchersForNamespace!= null) {
+	          watchersForNamespace.disableNamespace( nameSpaceName );
+	        }
+	        kubernetesClientResource.getWatchersForNamespaces().remove(nameSpaceName);
 	        kubernetesClientResource.getNameSpacesTobeDeleted().remove(nameSpaceName);
 	     }catch (Exception e) {
 	        e.printStackTrace();
diff --git a/src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java b/src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java
index 4546d74..1d35d36 100644
--- a/src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java
+++ b/src/main/java/org/etsi/osl/cridge/KubernetesClientResource.java
@@ -481,13 +481,6 @@ public class KubernetesClientResource {
       
       
       this.nameSpacesTobeDeleted.put(nameSpacename, new Date() );
-      NamespaceWatcher watchersForNamespace = this.watchersForNamespaces.get(nameSpacename);
-      if ( watchersForNamespace!= null) {
-        watchersForNamespace.disableNamespace( nameSpacename );
-      }
-      
-      this.watchersForNamespaces.remove(nameSpacename);
-
       
     }catch (Exception e) {
       e.printStackTrace();
diff --git a/src/main/java/org/etsi/osl/cridge/NamespaceWatcher.java b/src/main/java/org/etsi/osl/cridge/NamespaceWatcher.java
index 1e1ea08..268957a 100644
--- a/src/main/java/org/etsi/osl/cridge/NamespaceWatcher.java
+++ b/src/main/java/org/etsi/osl/cridge/NamespaceWatcher.java
@@ -14,6 +14,7 @@ import org.etsi.osl.tmf.ri639.model.ResourceCreate;
 import org.etsi.osl.tmf.ri639.model.ResourceStatusType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.yaml.snakeyaml.Yaml;
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ObjectMeta;
@@ -45,6 +46,10 @@ public class NamespaceWatcher {
   
   List< SharedIndexInformer<?>> informers = new ArrayList<>();
   
+
+  @Autowired
+  private KubernetesClientResource kubernetesClientResource;
+  
   
   public NamespaceWatcher(KubernetesClient kubernetesClient, CatalogClient catalogClient, String anameSpacename, Map<String, Object> aheaders) {
     super();
@@ -140,7 +145,11 @@ public class NamespaceWatcher {
                   newObj.getMetadata().getName(),
                   newObj.getMetadata().getUid(),
                   newObj.getMetadata().getNamespace());
-              updateKubernetesSecretResourceInOSLCatalog( newObj, false );    
+              if ( kubernetesClientResource.getNameSpacesTobeDeleted().get( newObj.getMetadata().getNamespace())==null ) {
+                updateKubernetesSecretResourceInOSLCatalog( newObj, false );    
+              } else {
+                updateKubernetesSecretResourceInOSLCatalog( newObj, true );    
+              }
               
             }
 
@@ -283,7 +292,12 @@ public class NamespaceWatcher {
                   newObj.getMetadata().getName(),
                   newObj.getMetadata().getUid(),
                   newObj.getMetadata().getNamespace());
-              updateKubernetesServiceResourceInOSLCatalog( newObj, false );    
+            //check if namespace is under deletion so to ignore any changes
+              if ( kubernetesClientResource.getNameSpacesTobeDeleted().get( newObj.getMetadata().getNamespace()) == null ) {
+                updateKubernetesServiceResourceInOSLCatalog( newObj, false );    
+              } else {
+                updateKubernetesServiceResourceInOSLCatalog( newObj, true );    
+              }
               
             }
 
@@ -449,7 +463,13 @@ public class NamespaceWatcher {
                   newObj.getMetadata().getName(),
                   newObj.getMetadata().getUid(),
                   newObj.getMetadata().getNamespace());
-              updateKubernetesConfigMapResourceInOSLCatalog( newObj, false );    
+              //check if namespace is under deletion so to ignore any changes
+              if ( kubernetesClientResource.getNameSpacesTobeDeleted().get( newObj.getMetadata().getNamespace()) == null ) {
+                updateKubernetesConfigMapResourceInOSLCatalog( newObj, false );                
+              } else {
+                updateKubernetesConfigMapResourceInOSLCatalog( newObj, true );
+              }
+                  
               
             }
 
-- 
GitLab