Commit 2da58311 authored by Christos Tranoris's avatar Christos Tranoris
Browse files

adding simulation examples

parent f7273678
Loading
Loading
Loading
Loading
+1 −1
Changes for src/main/java/org/etsi/osl/example/gc/api/ResourceA.java: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -160,7 +160,7 @@ implements ITMFRCM634_ModelTransformer, ITMFRI639_ModelTransformer {
      }
    }

    infoMessage = "all well " + paramA + ", " + paramB;
    infoMessage = "all well from resource A: " + paramA + ", " + paramB;
    healthStatus = "Healthy";

    resourceUpdate.addResourceCharacteristicItemShort("status.infoMessage", infoMessage ,  EValueType.TEXT.getValue());
+3 −2
Changes for src/main/java/org/etsi/osl/example/gc/api/ResourceB.java: 3 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -155,12 +155,13 @@ implements ITMFRCM634_ModelTransformer, ITMFRI639_ModelTransformer {
        paramX = c.getValue().getValue();
      }
      if (c.getName().equalsIgnoreCase("paramZ")) {
        paramZ = c.getValue().getValue();
        paramZ = c.getValue().getValue() + "_EXTERNALCTRL";
      }
    }

    infoMessage = "all well " + paramX + ", " + paramZ;
    infoMessage = "all well from resource B: " + paramX + ", " + paramZ;
    healthStatus = "Healthy";
    logger.info(infoMessage);

    resourceUpdate.addResourceCharacteristicItemShort("status.infoMessage", infoMessage ,  EValueType.TEXT.getValue());
    resourceUpdate.addResourceCharacteristicItemShort("status.Health", healthStatus,  EValueType.TEXT.getValue());
+46 −4
Changes for src/main/java/org/etsi/osl/example/gc/api/ResourceRepoService.java: 46 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -66,11 +66,13 @@ public class ResourceRepoService {
    boolean simulation = headers.get("X-OSL-SIMULATION") != null;
    if ( simulation ) {
      logger.info("======================================================");
      logger.info("=================== UNDER SIMULATION =================");
      logger.info("=================== UNDER SIMULATION CREATE ==========");
      logger.info("======================================================");
    }

    String specName = resourceRequested.getResourceSpecification().getName();
    logger.info("====================================================== specName = " + specName);
    logger.info("====================================================== resName = " + resourceRequested.getName());
    if ( !specName.equals( ResourceA.RESOURCE_NAME ) && !specName.equals( ResourceB.RESOURCE_NAME ) ) {
      return null;
    }
@@ -121,7 +123,7 @@ public class ResourceRepoService {
   * progression and converges (the service reaches ACTIVE). Returns null (caller falls back to a local
   * echo) if the queue is unreachable.
   */
  private Resource sendPlanningResourceCallback(Map<String, Object> headers, String resourceid, ResourceCreate resourceRequested) {
  private Resource sendPlanningResourceCallback(Map<String, Object> headers, String resourceid, ResourceUpdate resourceRequested) {
    // Synchronous: resource is RESERVED (deployment requested / in progress).
    Resource reported = postPlanningResourceCallback(headers, resourceid, resourceRequested, ResourceStatusType.RESERVED);

@@ -135,7 +137,7 @@ public class ResourceRepoService {
  }

  /** Schedules the delayed AVAILABLE planning callback; fire-and-forget, tolerates a downed queue. */
  private void scheduleAvailableProgress(Map<String, Object> headers, String resourceid, ResourceCreate resourceRequested) {
  private void scheduleAvailableProgress(Map<String, Object> headers, String resourceid, ResourceUpdate resourceRequested) {
    try {
      planningProgressScheduler.schedule(
          () -> postPlanningResourceCallback(headers, resourceid, resourceRequested, ResourceStatusType.AVAILABLE),
@@ -147,7 +149,7 @@ public class ResourceRepoService {

  /** Posts a single planning resource callback carrying the given {@link ResourceStatusType}. */
  private Resource postPlanningResourceCallback(Map<String, Object> headers, String resourceid,
      ResourceCreate resourceRequested, ResourceStatusType status) {
      ResourceUpdate resourceRequested, ResourceStatusType status) {
    try {
      Map<String, Object> callbackHeaders = new HashMap<>();
      callbackHeaders.put("resourceName", resourceRequested.getName());
@@ -192,8 +194,35 @@ public class ResourceRepoService {
  }

  public Resource updateResource( Map<String, Object> headers, ResourceUpdate r) {
    
    boolean simulation = headers.get("X-OSL-SIMULATION") != null;
    if ( simulation ) {
      logger.info("======================================================");
      logger.info("=================== UNDER SIMULATION UPDATE ==========");
      logger.info("======================================================");
    }
    String resourceid = resourceIdFromHeaders(headers); //the resource to update back
    
    String specName = r.getResourceSpecification().getName();
    logger.info("====================================================== specName = " + specName);
    logger.info("====================================================== resName = " + r.getName());
    if ( !specName.equals( ResourceA.RESOURCE_NAME ) && !specName.equals( ResourceB.RESOURCE_NAME ) ) {
      return null;
    }

    if ( simulation ) {
      // Planning dry-run: run the real controller logic so the plan reflects the controller's actual
      // computed resource characteristics, but in simulation mode (resourceLogic suppresses its
      // persistent side effects — no catalog-writing background thread, no blocking deploy sleep).
      // `resourceid` is a placeholder OSOM synthesises for the tentative plan (not in the catalog), so
      // there is no real catalog write; the result is reported to OSOM's planning inventory via the
      // PLANNING.RESOURCE.CREATEORUPDATE callback queue.
      applyResourceLogic(specName, r, resourceid, true);

      Resource reported = postPlanningResourceCallback(headers, resourceid, r, ResourceStatusType.AVAILABLE);
      return reported != null ? reported : toSimulatedResource(resourceid, r);
    }
    
    ResourceUpdate resourceUpdate = applyResourceLogic(r.getResourceSpecification().getName(), r, resourceid, false);
    if (resourceUpdate == null) {
      return null;
@@ -203,6 +232,19 @@ public class ResourceRepoService {
  }
  
  public Resource deleteResource( Map<String, Object> headers, ResourceUpdate r) {

    boolean simulation = headers.get("X-OSL-SIMULATION") != null;
    if ( simulation ) {
      logger.info("======================================================");
      logger.info("=================== UNDER SIMULATION DELETE ==========");
      logger.info("======================================================");

      String resourceid = resourceIdFromHeaders(headers); //the resource to update back
      Resource reported = postPlanningResourceCallback(headers, resourceid, r, ResourceStatusType.UNKNOWN);
      return reported != null ? reported : toSimulatedResource(resourceid, r);
      
    }
    
    String resourceid = resourceIdFromHeaders(headers); //the resource to update back

    ResourceUpdate resourceUpdate = r;