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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 145c2a9da397 CAMEL-26695: camel-jbang - chaos screen review 
follow-ups: narrower catch, forget the marks of stopped integrations (#29352)
145c2a9da397 is described below

commit 145c2a9da39748a1dd8ed1d57fee5d6603853bf9
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Nov 6 19:55:28 2026 +0100

    CAMEL-26695: camel-jbang - chaos screen review follow-ups: narrower catch, 
forget the marks of stopped integrations (#29352)
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
---
 .../org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java | 6 ++++++
 .../apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java   | 4 ++--
 .../camel/dsl/jbang/core/commands/tui/DataRefreshService.java    | 3 +++
 .../org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java  | 6 +++---
 .../apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java | 9 +++++++++
 5 files changed, 23 insertions(+), 5 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java
index 72198990ad72..ac97707bac67 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarks.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.dsl.jbang.core.commands.tui;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -60,6 +61,11 @@ final class ChaosMarks {
         }
     }
 
+    /** Forgets the marks of the integrations that are no longer running. */
+    synchronized void retain(Collection<String> pids) {
+        byPid.keySet().retainAll(pids);
+    }
+
     synchronized String ruleOf(String pid, String exchangeId) {
         Map<String, String> marks = byPid.get(pid);
         return marks != null && exchangeId != null ? marks.get(exchangeId) : 
null;
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java
index 624d1cc883d1..dbf220fe0a71 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java
@@ -74,8 +74,8 @@ final class ChaosRecipes {
         try {
             String json = new DefaultCamelCatalog().chaosModelJSon();
             return json != null ? parse(json) : null;
-        } catch (RuntimeException | LinkageError e) {
-            // an older catalog: the rule is typed as one line
+        } catch (LinkageError e) {
+            // an older catalog without chaosModelJSon(): the rule is typed as 
one line
             return null;
         }
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DataRefreshService.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DataRefreshService.java
index d55e0921f633..11b24aa75ba8 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DataRefreshService.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DataRefreshService.java
@@ -342,6 +342,9 @@ class DataRefreshService {
                 }
             }
         }
+        if (ctx != null) {
+            
ctx.chaosMarks.retain(pids.stream().map(String::valueOf).collect(Collectors.toSet()));
+        }
         if (!fullScan && ctx.selectedPid != null && !overviewTab) {
             boolean checkLiveness = now - lastLivenessCheckTime >= 
LIVENESS_CHECK_INTERVAL_MS;
             if (checkLiveness) {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
index 66ac89f4d363..3510dd8bb11c 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
@@ -422,7 +422,7 @@ class ErrorsTab extends AbstractTableTab {
         renderScrollbar(frame, table, filteredSize());
 
         if (showDetail) {
-            renderDetail(frame, chunks.get(1), selectedError);
+            renderDetail(frame, chunks.get(1), selectedError, info);
         }
     }
 
@@ -543,14 +543,14 @@ class ErrorsTab extends AbstractTableTab {
                 Span.styled(since, Style.EMPTY.dim())));
     }
 
-    private void renderDetail(Frame frame, Rect area, ErrorInfo ei) {
+    private void renderDetail(Frame frame, Rect area, ErrorInfo ei, 
IntegrationInfo info) {
         List<Line> lines = new ArrayList<>();
 
         HistoryTab.addExchangeInfoLines(lines,
                 ei.exchangeId, ei.routeId, ei.nodeId, null, ei.location,
                 ei.elapsed, ei.threadName, !ei.handled);
         addRepeatLine(lines, ei);
-        ChaosMarks.addDetailLine(lines, ctx, ctx.findSelectedIntegration(), 
ei.exchangeId, ei.properties);
+        ChaosMarks.addDetailLine(lines, ctx, info, ei.exchangeId, 
ei.properties);
 
         // exception with stack trace
         String exception = null;
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java
index 2ee08869750b..43c79a98c70b 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosMarksTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.tui;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 
 import dev.tamboui.text.Line;
@@ -84,6 +85,14 @@ class ChaosMarksTest {
         assertThat(marks.ruleOf("9999", "E5")).isNull();
     }
 
+    @Test
+    void theMarksOfAStoppedIntegrationAreForgotten() {
+        ctx.chaosMarks.retain(Set.of("1234"));
+        assertThat(ctx.chaosMarks.ruleOf("1234", 
"3F2A85F3D4213-0000000000000001E")).isEqualTo("r1");
+        ctx.chaosMarks.retain(Set.of("5678"));
+        assertThat(ctx.chaosMarks.ruleOf("1234", 
"3F2A85F3D4213-0000000000000001E")).isNull();
+    }
+
     @Test
     void theActivityTabMarksTheExchange() {
         ActivityEntry faulted = new ActivityEntry();

Reply via email to