This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch 4_0_X in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 9bcd30bbfc31b8ee24c506195199422a404cd1d5 Author: Francesco Chicchiriccò <[email protected]> AuthorDate: Wed Sep 10 11:11:08 2025 +0200 [SYNCOPE-1910] Checking Task and Report status for Job (un)registration --- .../org/apache/syncope/core/logic/ReportLogic.java | 13 +++-- .../org/apache/syncope/core/logic/TaskLogic.java | 16 ++++--- .../java/job/AbstractSchedTaskJobDelegate.java | 10 ++-- .../provisioning/java/job/DefaultJobManager.java | 55 ++++++++++++---------- 4 files changed, 53 insertions(+), 41 deletions(-) diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java index 3ebe453dc0..56422e6c08 100644 --- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java +++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java @@ -92,6 +92,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> { public ReportTO create(final ReportTO reportTO) { Report report = entityFactory.newEntity(Report.class); binder.getReport(report, reportTO); + report = reportDAO.save(report); try { jobManager.register( @@ -116,11 +117,15 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> { binder.getReport(report, reportTO); report = reportDAO.save(report); try { - jobManager.register( - report, - AuthContextUtils.getUsername()); + if (report.isActive()) { + jobManager.register( + report, + AuthContextUtils.getUsername()); + } else { + jobManager.unregister(report); + } } catch (Exception e) { - LOG.error("While registering job for report {}", report.getKey(), e); + LOG.error("While (un)registering job for report {}", report.getKey(), e); SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.Scheduling); sce.getElements().add(e.getMessage()); diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java index 1c6ee6b09d..11911d41f5 100644 --- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java +++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java @@ -147,9 +147,7 @@ public class TaskLogic extends AbstractExecutableLogic<TaskTO> { securityChecks(IdRepoEntitlement.TASK_CREATE, ((MacroTaskTO) taskTO).getRealm()); } - SchedTask task = binder.createSchedTask(taskTO, taskUtils); - task = taskDAO.save(task); - + SchedTask task = taskDAO.save(binder.createSchedTask(taskTO, taskUtils)); try { jobManager.register( task, @@ -185,11 +183,15 @@ public class TaskLogic extends AbstractExecutableLogic<TaskTO> { binder.updateSchedTask(task, taskTO, taskUtils); task = taskDAO.save(task); try { - jobManager.register( - task, - AuthContextUtils.getUsername()); + if (task.isActive()) { + jobManager.register( + task, + AuthContextUtils.getUsername()); + } else { + jobManager.unregister(task); + } } catch (Exception e) { - LOG.error("While registering job for task {}", task.getKey(), e); + LOG.error("While (un)registering job for task {}", task.getKey(), e); SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.Scheduling); sce.getElements().add(e.getMessage()); diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java index bd6a79bf14..5028c59f07 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java @@ -109,11 +109,6 @@ public abstract class AbstractSchedTaskJobDelegate<T extends SchedTask> implemen task = (T) taskDAO.findById(taskType, taskKey). orElseThrow(() -> new JobExecutionException("Not found: " + taskType + " Task " + taskKey)); - if (!task.isActive()) { - LOG.info("Task {} not active, aborting...", taskKey); - return; - } - manageOperationId = Optional.ofNullable(MDC.get(Job.OPERATION_ID)). map(operationId -> false). orElseGet(() -> { @@ -187,6 +182,11 @@ public abstract class AbstractSchedTaskJobDelegate<T extends SchedTask> implemen init(taskType, taskKey, context); + if (!task.isActive()) { + LOG.info("Task {} not active, aborting...", taskKey); + return; + } + setStatus("Initialization completed"); TaskExec<SchedTask> execution = initExecution(); diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/DefaultJobManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/DefaultJobManager.java index 535fa304df..99ce29b75b 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/DefaultJobManager.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/DefaultJobManager.java @@ -148,6 +148,13 @@ public class DefaultJobManager implements JobManager, SyncopeCoreLoader { final boolean dryRun, final Map<String, Object> jobData) { + TaskType type = taskUtilsFactory.getInstance(task).getType(); + + if (!task.isActive()) { + LOG.debug("{} Task {} {} not active, skipping job registration", type, task.getKey(), task.getName()); + return; + } + Implementation jobDelegate = task.getJobDelegate() == null ? task instanceof PullTask ? implementationDAO.findByType(IdRepoImplementationType.TASKJOB_DELEGATE).stream(). @@ -169,7 +176,7 @@ public class DefaultJobManager implements JobManager, SyncopeCoreLoader { JobNamer.getJobName(task), executor, dryRun); - context.getData().put(JobManager.TASK_TYPE, taskUtilsFactory.getInstance(task).getType()); + context.getData().put(JobManager.TASK_TYPE, type); context.getData().put(JobManager.TASK_KEY, task.getKey()); context.getData().put(JobManager.DELEGATE_IMPLEMENTATION, jobDelegate.getKey()); context.getData().putAll(jobData); @@ -222,6 +229,11 @@ public class DefaultJobManager implements JobManager, SyncopeCoreLoader { final String executor, final boolean dryRun) { + if (!report.isActive()) { + LOG.debug("Report {} {} not active, skipping job registration", report.getKey(), report.getName()); + return; + } + JobExecutionContext context = new JobExecutionContext( domain, JobNamer.getJobName(report), @@ -314,31 +326,24 @@ public class DefaultJobManager implements JobManager, SyncopeCoreLoader { } } - if (loadException) { - LOG.error("Errors while loading job for tasks, aborting"); - } else { - // 2. jobs for Reports - for (Iterator<? extends Report> it = reportDAO.findAll().iterator(); it.hasNext() && !loadException;) { - Report report = it.next(); - - LOG.debug("Loading job for Report {} {}", report.getKey(), report.getName()); - - try { - register( - domain, - report, - report.getCronExpression(), - null, - securityProperties.getAdminUser(), - false); - } catch (Exception e) { - LOG.error("While loading job instance for report {}", report.getName(), e); - loadException = true; - } - } + // 2. jobs for Reports + loadException = false; + for (Iterator<? extends Report> it = reportDAO.findAll().iterator(); it.hasNext() && !loadException;) { + Report report = it.next(); + + LOG.debug("Loading job for Report {} {}", report.getKey(), report.getName()); - if (loadException) { - LOG.error("Errors while loading job for reports, aborting"); + try { + register( + domain, + report, + report.getCronExpression(), + null, + securityProperties.getAdminUser(), + false); + } catch (Exception e) { + LOG.error("While loading job instance for report {}", report.getName(), e); + loadException = true; } } });
