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

wmedvedeo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git


The following commit(s) were added to refs/heads/main by this push:
     new 484432750 [Fix #2260] Make scheduler minimal timer delay configurable 
(#2261)
484432750 is described below

commit 48443275050fedf9a9f2d40cf5e4188590e892b0
Author: Yohann Puyhaubert <[email protected]>
AuthorDate: Sat Sep 20 18:49:31 2025 +0200

    [Fix #2260] Make scheduler minimal timer delay configurable (#2261)
    
    * [Fix #2260] Make scheduler minimal timer delay configurable
    
    * Update TimerDelegateJobScheduler.java
    
    Fix code formatting issues in TimerDelegateJobScheduler
    
    ---------
    
    Co-authored-by: Walter Medvedeo <[email protected]>
---
 .../kogito/jobs/service/scheduler/BaseTimerJobScheduler.java  |  8 ++++++--
 .../service/scheduler/impl/TimerDelegateJobScheduler.java     |  8 +++++---
 .../service/scheduler/impl/VertxTimerServiceScheduler.java    | 11 ++++++++---
 .../main/resources/META-INF/microprofile-config.properties    |  1 +
 .../scheduler/impl/VertxTimerServiceSchedulerTest.java        |  2 +-
 .../KogitoAddonsQuarkusJobsServiceEmbeddedRuntimeConfig.java  |  6 ++++++
 6 files changed, 27 insertions(+), 9 deletions(-)

diff --git 
a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobScheduler.java
 
b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobScheduler.java
index 49e777ba8..4b29fefd3 100644
--- 
a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobScheduler.java
+++ 
b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobScheduler.java
@@ -84,6 +84,8 @@ public abstract class BaseTimerJobScheduler implements 
ReactiveJobScheduler {
      */
     long schedulerChunkInMinutes;
 
+    long schedulerMinTimerDelayInMillis;
+
     private ReactiveJobRepository jobRepository;
 
     private final Map<String, SchedulerControlRecord> schedulerControl;
@@ -113,13 +115,14 @@ public abstract class BaseTimerJobScheduler implements 
ReactiveJobScheduler {
     }
 
     protected BaseTimerJobScheduler() {
-        this(null, 0, 0, 0, true, true);
+        this(null, 0, 0, 0, 0, true, true);
     }
 
     protected BaseTimerJobScheduler(ReactiveJobRepository jobRepository,
             long backoffRetryMillis,
             long maxIntervalLimitToRetryMillis,
             long schedulerChunkInMinutes,
+            long schedulerMinTimerDelayInMillis,
             boolean forceExecuteExpiredJobs,
             boolean forceExecuteExpiredJobsOnServiceStart) {
         this.jobRepository = jobRepository;
@@ -127,6 +130,7 @@ public abstract class BaseTimerJobScheduler implements 
ReactiveJobScheduler {
         this.maxIntervalLimitToRetryMillis = maxIntervalLimitToRetryMillis;
         this.schedulerControl = new ConcurrentHashMap<>();
         this.schedulerChunkInMinutes = schedulerChunkInMinutes;
+        this.schedulerMinTimerDelayInMillis = schedulerMinTimerDelayInMillis;
         this.forceExecuteExpiredJobs = forceExecuteExpiredJobs;
         this.forceExecuteExpiredJobsOnServiceStart = 
forceExecuteExpiredJobsOnServiceStart;
     }
@@ -261,7 +265,7 @@ public abstract class BaseTimerJobScheduler implements 
ReactiveJobScheduler {
             return delay;
         }
         //in case forceExecuteExpiredJobs is true, execute the job immediately.
-        return forceExecuteExpiredJobs ? Duration.ofSeconds(1) : 
Duration.ofSeconds(-1);
+        return forceExecuteExpiredJobs ? 
Duration.ofMillis(schedulerMinTimerDelayInMillis) : Duration.ofSeconds(-1);
     }
 
     private Duration calculateRawDelay(ZonedDateTime expirationTime) {
diff --git 
a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/impl/TimerDelegateJobScheduler.java
 
b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/impl/TimerDelegateJobScheduler.java
index b64bd87b9..8dccb4953 100644
--- 
a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/impl/TimerDelegateJobScheduler.java
+++ 
b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/impl/TimerDelegateJobScheduler.java
@@ -58,13 +58,15 @@ public class TimerDelegateJobScheduler extends 
BaseTimerJobScheduler {
             @ConfigProperty(name = "kogito.jobs-service.backoffRetryMillis", 
defaultValue = "1000") long backoffRetryMillis,
             @ConfigProperty(name = 
"kogito.jobs-service.maxIntervalLimitToRetryMillis", defaultValue = "60000") 
long maxIntervalLimitToRetryMillis,
             @ConfigProperty(name = 
"kogito.jobs-service.schedulerChunkInMinutes", defaultValue = "10") long 
schedulerChunkInMinutes,
+            @ConfigProperty(name = 
"kogito.jobs-service.schedulerMinTimerDelayInMillis", defaultValue = "1000") 
long schedulerMinTimerDelayInMillis,
             @ConfigProperty(name = 
"kogito.jobs-service.forceExecuteExpiredJobs", defaultValue = "true") boolean 
forceExecuteExpiredJobs,
             @ConfigProperty(name = 
"kogito.jobs-service.forceExecuteExpiredJobsOnServiceStart", defaultValue = 
"true") boolean forceExecuteExpiredJobsOnServiceStart,
             JobExecutorResolver jobExecutorResolver, 
VertxTimerServiceScheduler delegate) {
-        super(jobRepository, backoffRetryMillis, 
maxIntervalLimitToRetryMillis, schedulerChunkInMinutes, 
forceExecuteExpiredJobs, forceExecuteExpiredJobsOnServiceStart);
+        super(jobRepository, backoffRetryMillis, 
maxIntervalLimitToRetryMillis, schedulerChunkInMinutes, 
schedulerMinTimerDelayInMillis, forceExecuteExpiredJobs,
+                forceExecuteExpiredJobsOnServiceStart);
         LOGGER.info(
-                "Creating JobScheduler with backoffRetryMillis={}, 
maxIntervalLimitToRetryMillis={}, schedulerChunkInMinutes={}, 
forceExecuteExpiredJobs={}, forceExecuteExpiredJobsOnServiceStart={}",
-                backoffRetryMillis, maxIntervalLimitToRetryMillis, 
schedulerChunkInMinutes, forceExecuteExpiredJobs, 
forceExecuteExpiredJobsOnServiceStart);
+                "Creating JobScheduler with backoffRetryMillis={}, 
maxIntervalLimitToRetryMillis={}, schedulerChunkInMinutes={}, 
schedulerMinTimerDelayInMillis={}, forceExecuteExpiredJobs={}, 
forceExecuteExpiredJobsOnServiceStart={}",
+                backoffRetryMillis, maxIntervalLimitToRetryMillis, 
schedulerChunkInMinutes, schedulerMinTimerDelayInMillis, 
forceExecuteExpiredJobs, forceExecuteExpiredJobsOnServiceStart);
         this.jobExecutorResolver = jobExecutorResolver;
         this.delegate = delegate;
     }
diff --git 
a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/impl/VertxTimerServiceScheduler.java
 
b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/impl/VertxTimerServiceScheduler.java
index bc538cea2..153c81c6c 100644
--- 
a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/impl/VertxTimerServiceScheduler.java
+++ 
b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/impl/VertxTimerServiceScheduler.java
@@ -22,6 +22,7 @@ import java.time.ZonedDateTime;
 import java.util.Collection;
 import java.util.Optional;
 
+import org.eclipse.microprofile.config.inject.ConfigProperty;
 import org.kie.kogito.jobs.service.model.ManageableJobHandle;
 import org.kie.kogito.jobs.service.utils.DateUtil;
 import org.kie.kogito.timer.InternalSchedulerService;
@@ -36,19 +37,23 @@ import org.kie.kogito.timer.impl.TimerJobInstance;
 import io.vertx.mutiny.core.Vertx;
 
 import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
 
 @ApplicationScoped
 public class VertxTimerServiceScheduler implements 
TimerService<ManageableJobHandle>,
         InternalSchedulerService {
 
-    private static final long MIN_TIMER_DELAY = 1000;
+    private final long schedulerMinTimerDelayInMillis;
 
     protected TimerJobFactoryManager jobFactoryManager = 
DefaultTimerJobFactoryManager.instance;
 
     protected final Vertx vertx;
 
-    public VertxTimerServiceScheduler(Vertx vertx) {
+    @Inject
+    public VertxTimerServiceScheduler(Vertx vertx,
+            @ConfigProperty(name = 
"kogito.jobs-service.schedulerMinTimerDelayInMillis", defaultValue = "1000") 
long schedulerMinTimerDelayInMillis) {
         this.vertx = vertx;
+        this.schedulerMinTimerDelayInMillis = schedulerMinTimerDelayInMillis;
     }
 
     @Override
@@ -120,7 +125,7 @@ public class VertxTimerServiceScheduler implements 
TimerService<ManageableJobHan
 
     private long calculateDelay(long then, ZonedDateTime now) {
         long delay = then - now.toInstant().toEpochMilli();
-        return Math.max(MIN_TIMER_DELAY, delay);
+        return Math.max(schedulerMinTimerDelayInMillis, delay);
     }
 
     public Vertx getVertx() {
diff --git 
a/jobs-service/jobs-service-common/src/main/resources/META-INF/microprofile-config.properties
 
b/jobs-service/jobs-service-common/src/main/resources/META-INF/microprofile-config.properties
index d3e636f2a..8f7612db9 100644
--- 
a/jobs-service/jobs-service-common/src/main/resources/META-INF/microprofile-config.properties
+++ 
b/jobs-service/jobs-service-common/src/main/resources/META-INF/microprofile-config.properties
@@ -42,6 +42,7 @@ 
quarkus.smallrye-health.check."org.kie.kogito.jobs.service.management.JobService
 kogito.jobs-service.maxIntervalLimitToRetryMillis=60000
 kogito.jobs-service.backoffRetryMillis=1000
 kogito.jobs-service.schedulerChunkInMinutes=10
+kogito.jobs-service.schedulerMinTimerDelayInMillis=1000
 kogito.jobs-service.loadJobIntervalInMinutes=10
 kogito.jobs-service.loadJobFromCurrentTimeIntervalInMinutes=60
 kogito.jobs-service.forceExecuteExpiredJobs=true
diff --git 
a/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/impl/VertxTimerServiceSchedulerTest.java
 
b/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/impl/VertxTimerServiceSchedulerTest.java
index a48199817..55aff1aad 100644
--- 
a/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/impl/VertxTimerServiceSchedulerTest.java
+++ 
b/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/impl/VertxTimerServiceSchedulerTest.java
@@ -83,7 +83,7 @@ class VertxTimerServiceSchedulerTest {
 
     @BeforeEach
     public void setUp() {
-        tested = new VertxTimerServiceScheduler(vertx);
+        tested = new VertxTimerServiceScheduler(vertx, 1);
     }
 
     @Test
diff --git 
a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs-service-embedded/runtime/src/main/java/org/kie/kogito/addons/quarkus/jobs/service/embedded/KogitoAddonsQuarkusJobsServiceEmbeddedRuntimeConfig.java
 
b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs-service-embedded/runtime/src/main/java/org/kie/kogito/addons/quarkus/jobs/service/embedded/KogitoAddonsQuarkusJobsServiceEmbeddedRuntimeConfig.java
index 94828cf4c..c310d8d1e 100644
--- 
a/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs-service-embedded/runtime/src/main/java/org/kie/kogito/addons/quarkus/jobs/service/embedded/KogitoAddonsQuarkusJobsServiceEmbeddedRuntimeConfig.java
+++ 
b/jobs-service/kogito-addons-jobs-service/kogito-addons-quarkus-jobs-service-embedded/runtime/src/main/java/org/kie/kogito/addons/quarkus/jobs/service/embedded/KogitoAddonsQuarkusJobsServiceEmbeddedRuntimeConfig.java
@@ -32,6 +32,12 @@ public class 
KogitoAddonsQuarkusJobsServiceEmbeddedRuntimeConfig {
     @ConfigItem(name = "schedulerChunkInMinutes", defaultValue = "10")
     public long schedulerChunkInMinutes;
 
+    /**
+     * Minimal delay used by scheduler before firing any job.
+     */
+    @ConfigItem(name = "schedulerMinTimerDelayInMillis", defaultValue = "1000")
+    public long schedulerMinTimerDelayInMillis;
+
     /**
      * The interval the jobs loading method runs to fetch the persisted jobs 
from the repository.
      */


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to