Commit 8f467712 authored by Christos Tranoris's avatar Christos Tranoris
Browse files

some stability fixes

#2
parent f53674c2
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
package org.etsi.osl.cridge;

import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import org.slf4j.Logger;
@@ -57,8 +59,8 @@ public class CRRouteBuilder extends RouteBuilder{
        .bean( kubernetesClientResource, "patchCR(${headers}, ${body})")
        .convertBodyTo( String.class );
        
        
      from( "timer://processUpdateResources?period=60000" )
        // every  3600000 ms (60 minutes)
        from( "timer://processUpdateResources?period=3600000" )
        .log(LoggingLevel.INFO, log, " process nameSpacesTobeDeleted!")
        .to("log:DEBUG?showBody=true&showHeaders=true")
        .bean( CRRouteBuilder.class , "processNameSpacesTobeDeleted()");
@@ -67,7 +69,15 @@ public class CRRouteBuilder extends RouteBuilder{
	
	 public void processNameSpacesTobeDeleted() {
	   
	   kubernetesClientResource.getNameSpacesTobeDeleted().forEach( (nameSpaceName, nameSpaceId) -> {
	   kubernetesClientResource.getNameSpacesTobeDeleted().forEach( (nameSpaceName, datetime) -> {
	     
	     Date currentTime = new Date(); //get current time
	     long diffInMillies = Math.abs(currentTime .getTime() - datetime.getTime());
	     
	     long diff = TimeUnit.HOURS.convert(diffInMillies, TimeUnit.MILLISECONDS);
	     if (diff<=2) { //after 2 hours this namespace will be deleted
	       return;
	     }
	     
	     try (final KubernetesClient k8s = new KubernetesClientBuilder().build()) {
	       logger.info("Trying to delete namespace {}", nameSpaceName);
+15 −7
Original line number Diff line number Diff line
package org.etsi.osl.cridge;

import java.sql.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -71,8 +71,9 @@ public class KubernetesClientResource {

  /**
   * Garbage collect namespaces to be deleted
   * Key is the name of the namespace and value the datetime requested. We need this to properly expire this
   */
  private ConcurrentHashMap<String, String> nameSpacesTobeDeleted = new ConcurrentHashMap<>();
  private ConcurrentHashMap<String, Date> nameSpacesTobeDeleted = new ConcurrentHashMap<>();

  private Map<String, Object> watchersForNamespaces = new HashMap<>();

@@ -295,7 +296,7 @@ public class KubernetesClientResource {

    kcrv.setYaml( Serialization.asYaml( gkr ) );
    kcrv.setJson( Serialization.asJson( gkr ) );
    kcrv.setCr_spec( Serialization.asJson( gkr )  );
    kcrv.setCr_spec_applied( Serialization.asJson( gkr )  );

    return kcrv;

@@ -427,11 +428,15 @@ public class KubernetesClientResource {
      
    }
    

    
    logger.debug("Deploy the following CR:" );
    logger.debug("{}", crspec );
    
//    crspec = """
//             %s
//            """.formatted( crspec );
//
//    logger.debug("Deploy the following CR NORMALIZED:" );
//    logger.debug("{}", crspec );

    try (final KubernetesClient k8s = new KubernetesClientBuilder().build()) {

@@ -487,6 +492,8 @@ public class KubernetesClientResource {
      }
      

      logger.debug("{}", gkr.toString() );
      
      Resource<GenericKubernetesResource> dummyObject = k8s.resource( gkr );
      dummyObject.create();      
    }catch (Exception e) {
@@ -610,7 +617,8 @@ public class KubernetesClientResource {
      logger.debug("============ DELETE crspec: result {} =============", result.toString() );
      
      String nameSpacename = (String) headers.get("org.etsi.osl.namespace");
      this.nameSpacesTobeDeleted.put(nameSpacename, nameSpacename);
      
      this.nameSpacesTobeDeleted.put(nameSpacename, new Date() );
      this.watchersForNamespaces.remove(nameSpacename);
      
    }catch (Exception e) {
+13 −0
Original line number Diff line number Diff line
@@ -232,15 +232,27 @@ public class WatcherService {
			public void eventReceived(Action action, GenericKubernetesResource genericKubernetesResource) {
				watcherResourcesName = genericKubernetesResource.getKind();

				/**
				 * Ignore the following kinds!
				 */
				if ( genericKubernetesResource.getKind() .startsWith("IPAM") ) {
                  return;
                }
                
				
				logger.debug("{} Resource Kind:{} Name:{} UID:{} Namespace:{}", action.name(),
						genericKubernetesResource.getKind(), genericKubernetesResource.getMetadata().getName(),
						genericKubernetesResource.getMetadata().getUid(),
						genericKubernetesResource.getMetadata().getNamespace());
				
				
				genericKubernetesResource.getAdditionalProperties().forEach((pk, pv) -> {
					logger.debug("\t {} {} ", pk, pv);
					Map<String, Object> values = (Map<String, Object>) pv;
					values.forEach((speck, specv) -> logger.debug("\t  {}={} ", speck, specv));
				});
				
				
				//ADDED, DELETED, MODIFIED, BOOKMARK, ERROR
				if ( action.name().equals( "ADDED" ) ) {
				  updateGenericKubernetesResourceInOSLCatalog( genericKubernetesResource );				  
@@ -248,6 +260,7 @@ public class WatcherService {
				} else if ( action.name().equals( "MODIFIED" ) ) {
                  updateGenericKubernetesResourceInOSLCatalog( genericKubernetesResource );					
				} else if ( action.name().equals( "DELETED" ) ) {
				  genericKubernetesResource.getMetadata().getLabels().put("org.etsi.osl.deleted", "DELETED");
                  updateGenericKubernetesResourceInOSLCatalog( genericKubernetesResource );					
				} else {