This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new 70fb68bef2 [SYNCOPE-1910] Checking Task and Report status for Job 
(un)registration
70fb68bef2 is described below

commit 70fb68bef23e3a9ce6d6f10866af9b24af8e7ac5
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;
                 }
             }
         });

Reply via email to