diff --git a/src/main/java/org/gcube/vremanagement/executor/SmartExecutorInitializator.java b/src/main/java/org/gcube/vremanagement/executor/SmartExecutorInitializator.java index 5306fec..396d0a0 100644 --- a/src/main/java/org/gcube/vremanagement/executor/SmartExecutorInitializator.java +++ b/src/main/java/org/gcube/vremanagement/executor/SmartExecutorInitializator.java @@ -1,5 +1,6 @@ package org.gcube.vremanagement.executor; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -93,7 +94,14 @@ public class SmartExecutorInitializator implements ApplicationManager { try { logger.debug("Going to get Orphan Scheduled Tasks in scope {}", context); - List scheduledTasks = smartExecutorPersistenceConnector.getScheduledTasks(pluginManager.getAvailablePlugins().keySet(), true); + List gotScheduledTasks = smartExecutorPersistenceConnector.getScheduledTasks(pluginManager.getAvailablePlugins().keySet()); + List scheduledTasks = new ArrayList<>(); + for(ScheduledTask scheduledTask : gotScheduledTasks) { + if(smartExecutorPersistenceConnector.isOrphan(scheduledTask, true)) { + scheduledTasks.add(scheduledTask); + } + } + if(scheduledTasks.size()==0){ logger.debug("No Orphan Scheduled Tasks this instance can take in charge in scope {}", context); } diff --git a/src/main/java/org/gcube/vremanagement/executor/persistence/SmartExecutorPersistenceConnector.java b/src/main/java/org/gcube/vremanagement/executor/persistence/SmartExecutorPersistenceConnector.java index 53cdbb2..f464a49 100644 --- a/src/main/java/org/gcube/vremanagement/executor/persistence/SmartExecutorPersistenceConnector.java +++ b/src/main/java/org/gcube/vremanagement/executor/persistence/SmartExecutorPersistenceConnector.java @@ -54,7 +54,7 @@ public abstract class SmartExecutorPersistenceConnector extends PluginStateNotif */ public abstract PluginStateEvolution getPluginInstanceState(UUID uuid, Integer iterationNumber) throws PluginInstanceNotFoundException, ExecutorException; - protected boolean isOrphan(ScheduledTask scheduledTask) throws ExecutorException { + public boolean isOrphan(ScheduledTask scheduledTask, boolean sameHost) throws ExecutorException { try { UUID uuid = scheduledTask.getUUID(); @@ -64,19 +64,20 @@ public abstract class SmartExecutorPersistenceConnector extends PluginStateNotif } try { - HostingNode hostingNode = ContextProvider.get().container().profile(HostingNode.class); - String hnAddress = hostingNode.profile().description().name(); - - if(runOn.getHostingNode().getAddress().compareTo(hnAddress)==0){ - return true; + if(sameHost) { + HostingNode hostingNode = ContextProvider.get().container().profile(HostingNode.class); + String hnAddress = hostingNode.profile().description().name(); + + if(runOn.getHostingNode().getAddress().compareTo(hnAddress)==0){ + return true; + } } }catch (Exception e) { logger.error("Unable to check if current hosting node is the same of the one in ScheduledTask", e); } String address = runOn.getEService().getAddress(); - String pluginName = scheduledTask.getLaunchParameter() - .getPluginName(); + String pluginName = scheduledTask.getLaunchParameter().getPluginName(); try { SmartExecutorClientImpl smartExecutorClient = new SmartExecutorClientImpl(); diff --git a/src/main/java/org/gcube/vremanagement/executor/persistence/orientdb/OrientDBPersistenceConnector.java b/src/main/java/org/gcube/vremanagement/executor/persistence/orientdb/OrientDBPersistenceConnector.java index a5cf87c..7452858 100644 --- a/src/main/java/org/gcube/vremanagement/executor/persistence/orientdb/OrientDBPersistenceConnector.java +++ b/src/main/java/org/gcube/vremanagement/executor/persistence/orientdb/OrientDBPersistenceConnector.java @@ -181,7 +181,7 @@ public class OrientDBPersistenceConnector extends SmartExecutorPersistenceConnec } @Override - public List getScheduledTasks(Collection plugins, boolean onlyOrphan) + public List getScheduledTasks(Collection plugins) throws SchedulePersistenceException { ODatabaseSession oDatabaseSession = null; try { @@ -215,20 +215,8 @@ public class OrientDBPersistenceConnector extends SmartExecutorPersistenceConnec for(ODocument doc : result) { String json = doc.toJSON("class"); - ScheduledTask scheduledTask = ExtendedSEMapper.getInstance().unmarshal(ScheduledTask.class, json); - try { - if(onlyOrphan) { - if(isOrphan(scheduledTask)) { - scheduledTasks.add(scheduledTask); - } - }else { - scheduledTasks.add(scheduledTask); - } - } catch(Exception e) { - logger.error("An Exception occurred while evaluating if {} is orphan", json, e); - } - + scheduledTasks.add(scheduledTask); } return scheduledTasks; diff --git a/src/main/java/org/gcube/vremanagement/executor/rest/RestSmartExecutor.java b/src/main/java/org/gcube/vremanagement/executor/rest/RestSmartExecutor.java index 610e757..7018306 100644 --- a/src/main/java/org/gcube/vremanagement/executor/rest/RestSmartExecutor.java +++ b/src/main/java/org/gcube/vremanagement/executor/rest/RestSmartExecutor.java @@ -101,17 +101,29 @@ public class RestSmartExecutor { PluginManager pluginManager = PluginManager.getInstance(); List plugins = new ArrayList<>(); - boolean orphan = false; + if(pluginName.compareTo(RestConstants.ORPHAN_PATH_PARAM)!=0) { plugins.add(pluginName); - }else { - plugins.addAll(pluginManager.getAvailablePlugins().keySet()); + // plugins.addAll(pluginManager.getAvailablePlugins().keySet()); orphan = true; } - List scheduledTasks = persistenceConnector.getScheduledTasks(plugins, orphan); + List gotScheduledTasks = persistenceConnector.getScheduledTasks(plugins); + + List scheduledTasks; + + if(orphan) { + scheduledTasks = new ArrayList<>(); + for(ScheduledTask scheduledTask : gotScheduledTasks) { + if(persistenceConnector.isOrphan(scheduledTask, false)) { + scheduledTasks.add(scheduledTask); + } + } + }else { + scheduledTasks = gotScheduledTasks; + } /* * Using SEMapper because the server must not return sensitive information like token diff --git a/src/main/java/org/gcube/vremanagement/executor/scheduledtask/ScheduledTaskPersistence.java b/src/main/java/org/gcube/vremanagement/executor/scheduledtask/ScheduledTaskPersistence.java index 74a132c..2b9f70a 100644 --- a/src/main/java/org/gcube/vremanagement/executor/scheduledtask/ScheduledTaskPersistence.java +++ b/src/main/java/org/gcube/vremanagement/executor/scheduledtask/ScheduledTaskPersistence.java @@ -22,7 +22,7 @@ public interface ScheduledTaskPersistence { * @throws SchedulePersistenceException * if fails */ - public List getScheduledTasks(Collection plugins, boolean onlyOrphan) + public List getScheduledTasks(Collection plugins) throws SchedulePersistenceException; /** diff --git a/src/test/java/org/gcube/vremanagement/executor/persistence/SmartExecutorPersistenceConnectorTest.java b/src/test/java/org/gcube/vremanagement/executor/persistence/SmartExecutorPersistenceConnectorTest.java index ccbb5eb..a84db16 100644 --- a/src/test/java/org/gcube/vremanagement/executor/persistence/SmartExecutorPersistenceConnectorTest.java +++ b/src/test/java/org/gcube/vremanagement/executor/persistence/SmartExecutorPersistenceConnectorTest.java @@ -78,7 +78,7 @@ public class SmartExecutorPersistenceConnectorTest extends ContextTest { List plugins = new ArrayList<>(); plugins.add("hello-world-se-plugin"); - List lc = stc.getScheduledTasks(plugins, true); + List lc = stc.getScheduledTasks(plugins); logger.debug("Available Scheduled Tasks : {}", lc); }