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]