From 8bbd483816c0d6173a7a3deb88146abd88fc0513 Mon Sep 17 00:00:00 2001 From: Cristiano Nicolai <570894+cristianonicolai@users.noreply.github.com> Date: Tue, 9 Jun 2026 11:57:23 -0300 Subject: [PATCH] feat: add solve requested flag to computed event --- .../internal/events/DatasetComputedEvent.java | 15 ++++++++++++++- .../solver/service/worker/impl/SolverWorker.java | 7 ++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/service/definition/src/main/java/ai/timefold/solver/service/definition/internal/events/DatasetComputedEvent.java b/service/definition/src/main/java/ai/timefold/solver/service/definition/internal/events/DatasetComputedEvent.java index 725fd42515..1269b7dee7 100644 --- a/service/definition/src/main/java/ai/timefold/solver/service/definition/internal/events/DatasetComputedEvent.java +++ b/service/definition/src/main/java/ai/timefold/solver/service/definition/internal/events/DatasetComputedEvent.java @@ -9,7 +9,20 @@ */ public final class DatasetComputedEvent extends SolverWorkerEvent { - public DatasetComputedEvent(Metadata metadata, SolverModel solverModel, String planName, String tenantName) { + /** + * Indicates whether a solving operation was requested. + * When {@code true}, computation is followed by solving, which progresses the dataset to the next state. + * When {@code false}, {@code COMPUTED} is the final state and no solving takes place. + */ + private final boolean solveRequested; + + public DatasetComputedEvent(Metadata metadata, SolverModel solverModel, String planName, String tenantName, + boolean solveRequested) { super(metadata, solverModel, null, planName, tenantName, null); + this.solveRequested = solveRequested; + } + + public boolean isSolveRequested() { + return solveRequested; } } diff --git a/service/worker/src/main/java/ai/timefold/solver/service/worker/impl/SolverWorker.java b/service/worker/src/main/java/ai/timefold/solver/service/worker/impl/SolverWorker.java index 0f8b0ca125..103e209f78 100644 --- a/service/worker/src/main/java/ai/timefold/solver/service/worker/impl/SolverWorker.java +++ b/service/worker/src/main/java/ai/timefold/solver/service/worker/impl/SolverWorker.java @@ -338,7 +338,7 @@ private void startIdle() { shutdownExecutor.scheduleShutdown(shutdownDelay, 0); } - private void computeOutputs(String id) { + private void computeOutputs(String id, boolean solveRequested) { LOGGER.info("Requesting solver for id {} to compute outputs...", id); try { var metadata = storageService.getMetadata(id); @@ -363,7 +363,8 @@ private void computeOutputs(String id) { postProcessOutput(id, modelOutput, solverModel); - sendEvent(datasetOutputsComputedEmitter, new DatasetComputedEvent(metadata, solverModel, planName, tenantName)); + sendEvent(datasetOutputsComputedEmitter, + new DatasetComputedEvent(metadata, solverModel, planName, tenantName, solveRequested)); } catch (Throwable e) { notifyOnFailure(id, e); } @@ -495,7 +496,7 @@ public void onDatasetValidateComputeCommand(DatasetValidateComputeCommand comman return; } - computeOutputs(id); + computeOutputs(id, command.solve()); if (command.solve()) { onSolveStartCommand(new SolveStartCommand(id));