Loading src/main/java/org/etsi/osl/example/gc/api/ResourceA.java +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 Loading @@ -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()); Loading src/main/java/org/etsi/osl/example/gc/api/ResourceB.java +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 Loading @@ -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()); Loading src/main/java/org/etsi/osl/example/gc/api/ResourceRepoService.java +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 Loading @@ -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; } Loading Loading @@ -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); Loading @@ -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), Loading @@ -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()); Loading Loading @@ -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; Loading @@ -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; Loading Loading
src/main/java/org/etsi/osl/example/gc/api/ResourceA.java +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 Loading @@ -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()); Loading
src/main/java/org/etsi/osl/example/gc/api/ResourceB.java +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 Loading @@ -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()); Loading
src/main/java/org/etsi/osl/example/gc/api/ResourceRepoService.java +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 Loading @@ -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; } Loading Loading @@ -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); Loading @@ -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), Loading @@ -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()); Loading Loading @@ -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; Loading @@ -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; Loading