From ea080a928f15b6ffb9dd029af7a5fd0d1ab950e5 Mon Sep 17 00:00:00 2001
From: Patrick Chou <1326306+pChou19@users.noreply.github.com>
Date: Thu, 17 Sep 2026 11:29:01 -0400
Subject: [PATCH 1/3] feature: set version 1.59.5-reasoner_cancel-SNAPSHOT for
feature/reasoner_cancel
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index df3d8c25e..c72e95940 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
dev.ikm.komet
komet-parent
KOMET
- 1.59.5-SNAPSHOT
+ 1.59.5-reasoner_cancel-SNAPSHOT
pom
2015
From 3cc7be5265165032ce2255d761c736a49128652c Mon Sep 17 00:00:00 2001
From: Patrick Chou <1326306+pChou19@users.noreply.github.com>
Date: Wed, 23 Sep 2026 14:02:57 -0400
Subject: [PATCH 2/3] Cancel remote reasoner runs from Komet
---
.../java/dev/ikm/komet/reasoner/ui/RunRemoteReasonerTask.java | 4 +++-
.../java/dev/ikm/komet/framework/concurrent/TaskWrapper.java | 4 ++++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/classification/src/main/java/dev/ikm/komet/reasoner/ui/RunRemoteReasonerTask.java b/classification/src/main/java/dev/ikm/komet/reasoner/ui/RunRemoteReasonerTask.java
index f655f190c..113a08912 100644
--- a/classification/src/main/java/dev/ikm/komet/reasoner/ui/RunRemoteReasonerTask.java
+++ b/classification/src/main/java/dev/ikm/komet/reasoner/ui/RunRemoteReasonerTask.java
@@ -68,7 +68,9 @@ protected RemoteReasonerService.RemoteReasonerOutcome compute() throws Exception
reasonerService.runFullReasoner((step, totalSteps, message) -> {
updateMessage("Step " + step + " of " + totalSteps + ": " + message);
updateProgress(step, totalSteps);
- });
+ }, this);
+ // this, as the tracker: Komet's cancel calls cancel() on this task, and the remote
+ // service watches it to stop the classification server-side.
updateMessage("Reasoner run complete in " + durationString());
if (outcomeConsumer != null) {
outcomeConsumer.accept(outcome);
diff --git a/framework/src/main/java/dev/ikm/komet/framework/concurrent/TaskWrapper.java b/framework/src/main/java/dev/ikm/komet/framework/concurrent/TaskWrapper.java
index eb2ef1b2f..2a97a28e8 100644
--- a/framework/src/main/java/dev/ikm/komet/framework/concurrent/TaskWrapper.java
+++ b/framework/src/main/java/dev/ikm/komet/framework/concurrent/TaskWrapper.java
@@ -112,6 +112,10 @@ private void handleRetention() {
@Override
protected void cancelled() {
this.trackingCallable.cancel();
+ // Removed as succeeded() and failed() do: left in executingTasks, a cancelled task keeps
+ // the Activity indicator spinning forever.
+ TaskListsService.get().pendingTasks().remove(this);
+ TaskListsService.get().executingTasks().remove(this);
}
@Override
From 6fe8808aa6c0253dbd219ebc7dc0d1eb9061e04a Mon Sep 17 00:00:00 2001
From: Patrick Chou <1326306+pChou19@users.noreply.github.com>
Date: Mon, 28 Sep 2026 13:44:55 -0400
Subject: [PATCH 3/3] Update cancel log message
---
.../java/dev/ikm/komet/reasoner/ReasonerResultsNode.java | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/classification/src/main/java/dev/ikm/komet/reasoner/ReasonerResultsNode.java b/classification/src/main/java/dev/ikm/komet/reasoner/ReasonerResultsNode.java
index 65b0daf2f..3eb8442e1 100644
--- a/classification/src/main/java/dev/ikm/komet/reasoner/ReasonerResultsNode.java
+++ b/classification/src/main/java/dev/ikm/komet/reasoner/ReasonerResultsNode.java
@@ -260,10 +260,11 @@ private void runFullReasonerRemotely(RemoteReasonerService remoteReasonerService
Thread.currentThread().interrupt();
LOG.info(ie.getMessage(), ie);
} catch (CancellationException ce) {
- // Cancels the local wait only: the server keeps classifying, because the RPC has
- // no cancellation hook yet. The user stops watching, not the work.
- LOG.info(ce.getMessage(), ce);
- task.updateMessage("Stopped waiting for the remote reasoner");
+ // Stops the run on the server, not just the wait: cancelling the task is what the
+ // remote client watches for, and it then asks the server to cancel. Expected, so
+ // logged without a stack trace.
+ LOG.info("Remote reasoner cancelled");
+ task.updateMessage("Cancelled full reasoner");
task.cancel();
ProgressHelper.cancel(javafxTask);
}