From b12b72e43dfb2c1221443bbeb8f83d9a05b33d53 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Thu, 22 Oct 2020 15:42:22 +0200 Subject: [PATCH] improving code --- .../resourceregistry/HostingNodeHandler.java | 80 ++++++++++++------- .../resourcemanager/HostingNodeManager.java | 9 +-- 2 files changed, 53 insertions(+), 36 deletions(-) diff --git a/src/main/java/org/gcube/smartgears/handler/resourceregistry/HostingNodeHandler.java b/src/main/java/org/gcube/smartgears/handler/resourceregistry/HostingNodeHandler.java index 9cb176a..de99328 100644 --- a/src/main/java/org/gcube/smartgears/handler/resourceregistry/HostingNodeHandler.java +++ b/src/main/java/org/gcube/smartgears/handler/resourceregistry/HostingNodeHandler.java @@ -32,6 +32,7 @@ import org.gcube.smartgears.handler.resourceregistry.resourcemanager.HostingNode import org.gcube.smartgears.handlers.container.ContainerHandler; import org.gcube.smartgears.handlers.container.ContainerLifecycleEvent.Start; import org.gcube.smartgears.lifecycle.container.ContainerLifecycle; +import org.gcube.smartgears.lifecycle.container.ContainerState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -116,9 +117,9 @@ public class HostingNodeHandler extends ContainerHandler { containerContext.events().subscribe(new Object() { - // @Observes({ activation, part_activation, shutdown, stop, failure }) - @Observes({ activation, part_activation }) - void onChanged(ContainerLifecycle lc) { + //@Observes({ activation, part_activation, shutdown, stop, failure }) + @Observes({ activation, part_activation}) + void onChanged(ContainerLifecycle cl) { ClassLoader contextCL = Thread.currentThread().getContextClassLoader(); String currentToken = SecurityTokenProvider.instance.get(); if (currentToken == null) { @@ -127,34 +128,42 @@ public class HostingNodeHandler extends ContainerHandler { ContextUtility.setContextFromToken(currentToken); try { - Thread.currentThread().setContextClassLoader(EServiceHandler.class.getClassLoader()); + Thread.currentThread().setContextClassLoader(HostingNodeHandler.class.getClassLoader()); + ContainerState containerState = cl.state(); + switch (containerState) { + case active: + hostingNodeManager.updateFacets(); + break; + + default: + //hostingNodeManager.updateStatus(); + break; + } + } catch (Exception e) { + logger.error("Failed to update {} State", HostingNode.NAME, e); + } finally { + Thread.currentThread().setContextClassLoader(contextCL); + } + } + + @Observes({ shutdown, stop, failure }) + void onShutdown(ContainerLifecycle cl) { + ClassLoader contextCL = Thread.currentThread().getContextClassLoader(); + String currentToken = SecurityTokenProvider.instance.get(); + if (currentToken == null) + currentToken = containerContext.configuration().startTokens().iterator().next(); + + ContextUtility.setContextFromToken(currentToken); + try { + Thread.currentThread().setContextClassLoader(HostingNodeHandler.class.getClassLoader()); hostingNodeManager.updateFacets(); } catch (Exception e) { - logger.error("Failed to update {} State", HostingNode.NAME, e); + logger.error("cannot complete periodic update of {}", HostingNode.NAME, e); } finally { Thread.currentThread().setContextClassLoader(contextCL); } } - - @Observes({ shutdown, stop, failure }) - void onStop(ContainerLifecycle lc) { - ClassLoader contextCL = Thread.currentThread().getContextClassLoader(); - String currentToken = SecurityTokenProvider.instance.get(); - if (currentToken == null) { - currentToken = containerContext.configuration().startTokens().iterator().next(); - } - ContextUtility.setContextFromToken(currentToken); - - try { - Thread.currentThread().setContextClassLoader(EServiceHandler.class.getClassLoader()); - hostingNodeManager.setDown(); - } catch (Exception e) { - logger.error("Failed to update {} State", HostingNode.NAME, e); - } finally { - Thread.currentThread().setContextClassLoader(contextCL); - } - } - + @Observes(value = addToContext) void addTo(String token) { ClassLoader contextCL = Thread.currentThread().getContextClassLoader(); @@ -165,7 +174,7 @@ public class HostingNodeHandler extends ContainerHandler { ContextUtility.setContextFromToken(currentToken); try { - Thread.currentThread().setContextClassLoader(EServiceHandler.class.getClassLoader()); + Thread.currentThread().setContextClassLoader(HostingNodeHandler.class.getClassLoader()); hostingNodeManager.addToContext(); } catch (Exception e) { logger.error("Failed to update Service State", e); @@ -184,7 +193,7 @@ public class HostingNodeHandler extends ContainerHandler { ContextUtility.setContextFromToken(currentToken); try { - Thread.currentThread().setContextClassLoader(EServiceHandler.class.getClassLoader()); + Thread.currentThread().setContextClassLoader(HostingNodeHandler.class.getClassLoader()); hostingNodeManager.removeFromContext(); } catch (Exception e) { logger.error("Failed to update Service State", e); @@ -207,14 +216,14 @@ public class HostingNodeHandler extends ContainerHandler { // we register it in response to lifecycle events so that we can // stop and resume along with application @Observes(value = { activation, part_activation }, kind = resilient) - synchronized void restartPeriodicUpdates(ContainerLifecycle lc) { + synchronized void restartPeriodicUpdates(ContainerLifecycle cl) { // already running if (periodicUpdates != null) { return; } - if (lc.state() == active) { + if (cl.state() == active) { logger.info("scheduling periodic updates of {}", HostingNode.NAME); } else { logger.info("resuming periodic updates of {}", HostingNode.NAME); @@ -241,7 +250,7 @@ public class HostingNodeHandler extends ContainerHandler { } @Observes(value = { stop, failure, shutdown }, kind = resilient) - synchronized void cancelPeriodicUpdates(ContainerLifecycle ignore) { + synchronized void cancelPeriodicUpdates(ContainerLifecycle cl) { if (periodicUpdates != null) { logger.trace("stopping periodic updates of {}", HostingNode.NAME); @@ -253,6 +262,17 @@ public class HostingNodeHandler extends ContainerHandler { logger.warn("could not stop periodic updates of {}", HostingNode.NAME, e); } } + + String currentToken = SecurityTokenProvider.instance.get(); + if (currentToken == null) + currentToken = containerContext.configuration().startTokens().iterator().next(); + + ContextUtility.setContextFromToken(currentToken); + try { + hostingNodeManager.updateFacets(); + } catch (Exception e) { + logger.error("cannot complete periodic update of {}", HostingNode.NAME, e); + } } }); diff --git a/src/main/java/org/gcube/smartgears/handler/resourceregistry/resourcemanager/HostingNodeManager.java b/src/main/java/org/gcube/smartgears/handler/resourceregistry/resourcemanager/HostingNodeManager.java index 1d58210..a8d0745 100644 --- a/src/main/java/org/gcube/smartgears/handler/resourceregistry/resourcemanager/HostingNodeManager.java +++ b/src/main/java/org/gcube/smartgears/handler/resourceregistry/resourcemanager/HostingNodeManager.java @@ -70,6 +70,7 @@ import org.gcube.smartgears.configuration.container.Site; import org.gcube.smartgears.configuration.library.SmartGearsConfiguration; import org.gcube.smartgears.context.container.ContainerContext; import org.gcube.smartgears.handler.resourceregistry.ContextUtility; +import org.gcube.smartgears.lifecycle.container.ContainerLifecycle; import org.gcube.smartgears.provider.ProviderFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -187,7 +188,7 @@ public class HostingNodeManager { return hostingNode; } - public HostingNode setDown() throws ResourceRegistryException { + public HostingNode updateStatus(ContainerLifecycle cl) throws ResourceRegistryException { logger.debug("Setting {} down", HostingNode.NAME); ContainerStateFacet containerStateFacet = null; @@ -224,10 +225,6 @@ public class HostingNodeManager { return hostingNode; } - private String getState() { - return containerContext.lifecycle().state().remoteForm().toLowerCase(); - } - private HostingNode instantiateHostingNode() { logger.info("Creating {}", HostingNode.NAME); @@ -353,7 +350,7 @@ public class HostingNodeManager { if (containerStateFacet == null) { containerStateFacet = new ContainerStateFacetImpl(); } - String state = getState(); + String state = containerContext.lifecycle().state().remoteForm().toLowerCase(); containerStateFacet.setValue(state); return containerStateFacet; }