From 188bd79906aa0a7d0cfc3c1febc39be0b88178cb Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Tue, 16 Jan 2024 09:39:13 +0100 Subject: [PATCH] fixed a problem with wf confs --- .../wfs/manager/controller/ApiController.java | 12 ++++---- .../service/ScheduledWorkflowLauncher.java | 5 +++- .../service/WorkflowManagerService.java | 28 +++++-------------- .../wfs/utils/WfConfigurationUtils.java | 14 ++++++++++ 4 files changed, 32 insertions(+), 27 deletions(-) diff --git a/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/controller/ApiController.java b/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/controller/ApiController.java index cfd563d..92a0ac7 100644 --- a/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/controller/ApiController.java +++ b/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/controller/ApiController.java @@ -112,11 +112,11 @@ public class ApiController extends DnetRestController { throws Exception { final WfConfiguration conf = this.wfManagerService.findWorkflowConfiguration(id); - if (overrideStartWfs.length > 0) { - conf.setWorkflows(Arrays.asList(overrideStartWfs)); - } + final String family = WfConfigurationUtils.calculateFamily(conf, false); - this.wfManagerService.prepareNewJob(conf, false); + final String[] wfTemplateIds = overrideStartWfs.length > 0 ? overrideStartWfs : conf.getWorkflows().toArray(new String[conf.getWorkflows().size()]); + + this.wfManagerService.prepareNewJob(conf, family, wfTemplateIds); if (StringUtils.isNotBlank(conf.getApiId())) { return this.wfManagerService.recentHistoryForApiId(conf.getApiId()); } if (StringUtils.isNotBlank(conf.getDsId())) { return this.wfManagerService.recentHistoryForDsId(conf.getDsId()); } @@ -129,7 +129,9 @@ public class ApiController extends DnetRestController { public List destroyWorkflowConfiguration(@PathVariable final String id) throws Exception { final WfConfiguration conf = this.wfManagerService.findWorkflowConfiguration(id); - this.wfManagerService.prepareNewJob(conf, true); + final String family = WfConfigurationUtils.calculateFamily(conf, true); + + this.wfManagerService.prepareNewJob(conf, family, conf.getDestroyWf()); if (StringUtils.isNotBlank(conf.getApiId())) { return this.wfManagerService.recentHistoryForApiId(conf.getApiId()); } if (StringUtils.isNotBlank(conf.getDsId())) { return this.wfManagerService.recentHistoryForDsId(conf.getDsId()); } diff --git a/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/service/ScheduledWorkflowLauncher.java b/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/service/ScheduledWorkflowLauncher.java index 87b6ad7..4f18dfc 100644 --- a/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/service/ScheduledWorkflowLauncher.java +++ b/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/service/ScheduledWorkflowLauncher.java @@ -17,6 +17,7 @@ import eu.dnetlib.domain.wfs.jobs.JobStatus; import eu.dnetlib.domain.wfs.jobs.WfJournalEntry; import eu.dnetlib.wfs.repository.WfConfigurationRepository; import eu.dnetlib.wfs.repository.WfJournalEntryRepository; +import eu.dnetlib.wfs.utils.WfConfigurationUtils; @Service public class ScheduledWorkflowLauncher { @@ -48,7 +49,9 @@ public class ScheduledWorkflowLauncher { .filter(this::isReady) .forEach(conf -> { try { - this.workflowManagerService.prepareNewJob(conf, false); + final String family = WfConfigurationUtils.calculateFamily(conf, false); + final String[] wfTemplateIds = conf.getWorkflows().toArray(new String[conf.getWorkflows().size()]); + this.workflowManagerService.prepareNewJob(conf, family, wfTemplateIds); } catch (final Exception e) { log.error("Error launching scheduled wf conf: " + conf.getId(), e); } diff --git a/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/service/WorkflowManagerService.java b/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/service/WorkflowManagerService.java index 0367968..fc4c109 100644 --- a/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/service/WorkflowManagerService.java +++ b/dnet-app/apps/dnet-wf-manager/src/main/java/eu/dnetlib/wfs/manager/service/WorkflowManagerService.java @@ -12,6 +12,8 @@ import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.data.domain.PageRequest; @@ -49,6 +51,8 @@ public class WorkflowManagerService { private static final int MAX_HISTORY_SIZE = 50; + private static final Log log = LogFactory.getLog(WorkflowManagerService.class); + @Autowired private WfJournalEntryRepository wfJournalEntryRepository; @@ -102,6 +106,7 @@ public class WorkflowManagerService { .toList(); conf.setConfigured(WfConfigurationUtils.isConfigured(wfTemplates, conf)); + log.debug("Saving wf conf " + conf.getId()); return this.wfConfigurationRepository.save(conf); } @@ -140,37 +145,18 @@ public class WorkflowManagerService { this.wfSubscriptionRepository.saveAll(subscriptions); } - public WfRunningJob prepareNewJob(final WfConfiguration conf, final boolean destroy) throws WorkflowManagerException { + public WfRunningJob prepareNewJob(final WfConfiguration conf, final String family, final String... wfTemplateIds) throws WorkflowManagerException { final String wfConfId = conf.getId(); final String name = conf.getName(); - final String family; - if (destroy) { - if (StringUtils.isNotBlank(conf.getDsId())) { - family = WorkflowsConstants.REPO_BYE_FAMILY; - } else { - family = WorkflowsConstants.GENERIC_DESTROY_WF_FAMILY; - } - } else if (StringUtils.isBlank(conf.getSection())) { - if (StringUtils.isNotBlank(conf.getDsId())) { - family = WorkflowsConstants.AGGREGATION_FAMILY; - } else { - family = WorkflowsConstants.UNKNOWN_FAMILY; - } - - } else { - family = conf.getSection(); - } - final String dsId = conf.getDsId(); final String dsName = conf.getDsName(); final String apiId = conf.getApiId(); final SimpleResourceClient client = this.clientFactory.getClient(SimpleResourceClient.class); - final List> wfTemplates = (destroy ? Arrays.asList(conf.getDestroyWf()) : conf.getWorkflows()) - .stream() + final List> wfTemplates = Arrays.stream(wfTemplateIds) .map(wf -> new ImmutablePair<>(wf, client.findResourceContent(WorkflowsConstants.WF_TEMPLATE, wf, WfTemplate.class))) .toList(); diff --git a/dnet-app/libs/dnet-wf-common/src/main/java/eu/dnetlib/wfs/utils/WfConfigurationUtils.java b/dnet-app/libs/dnet-wf-common/src/main/java/eu/dnetlib/wfs/utils/WfConfigurationUtils.java index 9c41c2a..51e602b 100644 --- a/dnet-app/libs/dnet-wf-common/src/main/java/eu/dnetlib/wfs/utils/WfConfigurationUtils.java +++ b/dnet-app/libs/dnet-wf-common/src/main/java/eu/dnetlib/wfs/utils/WfConfigurationUtils.java @@ -124,4 +124,18 @@ public class WfConfigurationUtils { return res; } + public static String calculateFamily(final WfConfiguration conf, final boolean destroy) { + if (destroy) { + if (StringUtils.isNotBlank(conf.getDsId())) { return WorkflowsConstants.REPO_BYE_FAMILY; } + + return WorkflowsConstants.GENERIC_DESTROY_WF_FAMILY; + } + + if (!StringUtils.isBlank(conf.getSection())) { return conf.getSection(); } + + if (StringUtils.isNotBlank(conf.getDsId())) { return WorkflowsConstants.AGGREGATION_FAMILY; } + + return WorkflowsConstants.UNKNOWN_FAMILY; + } + }