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

gnodet 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 956e21163213 CAMEL-24229: Fix flaky BacklogTracerActivityTest 
(volatile) and QuartzPersistentStore (MBean collision)
956e21163213 is described below

commit 956e21163213c3ba1848240c39242dfcc1deeba5
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Jul 23 14:56:55 2026 +0200

    CAMEL-24229: Fix flaky BacklogTracerActivityTest (volatile) and 
QuartzPersistentStore (MBean collision)
    
    Co-authored-by: Claude Opus 4.6 <[email protected]>
---
 ...artzPersistentStoreRestartAppChangeCronExpressionTest1.xml |  2 +-
 ...artzPersistentStoreRestartAppChangeCronExpressionTest2.xml |  2 +-
 ...pringQuartzPersistentStoreRestartAppChangeOptionsTest1.xml |  2 +-
 ...pringQuartzPersistentStoreRestartAppChangeOptionsTest2.xml |  2 +-
 .../java/org/apache/camel/impl/debugger/BacklogTracer.java    | 11 ++++++++---
 5 files changed, 12 insertions(+), 7 deletions(-)

diff --git 
a/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeCronExpressionTest1.xml
 
b/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeCronExpressionTest1.xml
index a3f6e123faf0..130ccae72a5c 100644
--- 
a/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeCronExpressionTest1.xml
+++ 
b/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeCronExpressionTest1.xml
@@ -61,7 +61,7 @@
     </property>
   </bean>
 
-  <camelContext id="camelContext-{{testClassSimpleName}}" 
managementNamePattern="#name#" xmlns="http://camel.apache.org/schema/spring";>
+  <camelContext id="camelContext-{{testClassSimpleName}}" 
managementNamePattern="#name#-cron1" 
xmlns="http://camel.apache.org/schema/spring";>
     <route id="quartzRoute">
       <from uri="quartzBean://app/test?cron=0+0/1+*+1/1+*+?+*"/>
       <to uri="log:trigger"/>
diff --git 
a/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeCronExpressionTest2.xml
 
b/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeCronExpressionTest2.xml
index 83c1a343febe..14aa56f83d79 100644
--- 
a/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeCronExpressionTest2.xml
+++ 
b/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeCronExpressionTest2.xml
@@ -61,7 +61,7 @@
     </property>
   </bean>
 
-  <camelContext id="camelContext-{{testClassSimpleName}}" 
managementNamePattern="#name#1" xmlns="http://camel.apache.org/schema/spring";>
+  <camelContext id="camelContext-{{testClassSimpleName}}" 
managementNamePattern="#name#-cron2" 
xmlns="http://camel.apache.org/schema/spring";>
     <route id="quartzRoute">
       <from uri="quartzBean://app/test?cron=0+0/2+*+1/1+*+?+*"/>
       <to uri="log:trigger"/>
diff --git 
a/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest1.xml
 
b/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest1.xml
index b906f210e252..22386dfcb6b7 100644
--- 
a/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest1.xml
+++ 
b/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest1.xml
@@ -61,7 +61,7 @@
     </property>
   </bean>
 
-  <camelContext id="camelContext-{{testClassSimpleName}}" 
managementNamePattern="#name#" xmlns="http://camel.apache.org/schema/spring";>
+  <camelContext id="camelContext-{{testClassSimpleName}}" 
managementNamePattern="#name#-opts1" 
xmlns="http://camel.apache.org/schema/spring";>
     <route id="quartzRoute">
       <from 
uri="quartzBean://app/test?trigger.repeatInterval=10&amp;trigger.repeatCount=1"/>
       <to uri="log:trigger"/>
diff --git 
a/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest2.xml
 
b/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest2.xml
index e6b017e93e73..a1354398d46d 100644
--- 
a/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest2.xml
+++ 
b/components/camel-quartz/src/test/resources/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest2.xml
@@ -61,7 +61,7 @@
     </property>
   </bean>
 
-  <camelContext id="camelContext-{{testClassSimpleName}}" 
managementNamePattern="#name#" xmlns="http://camel.apache.org/schema/spring";>
+  <camelContext id="camelContext-{{testClassSimpleName}}" 
managementNamePattern="#name#-opts2" 
xmlns="http://camel.apache.org/schema/spring";>
     <route id="quartzRoute">
       <from 
uri="quartzBean://app/test?trigger.repeatInterval=20&amp;trigger.repeatCount=2"/>
       <to uri="log:trigger"/>
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
index 059388f860d5..90fc97af0823 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
@@ -62,8 +62,12 @@ public class BacklogTracer extends ServiceSupport implements 
org.apache.camel.sp
     public static final int MAX_BACKLOG_SIZE = 1000;
     private final CamelContext camelContext;
     private final Language simple;
-    private boolean enabled;
-    private boolean standby;
+    // enabled, standby, and activityEnabled (further below) are toggled at 
runtime via
+    // JMX/management APIs while routing threads read them in shouldTrace() 
and traceEvent().
+    // Other boolean fields (removeOnDump, bodyIncludeStreams, traceRests, 
etc.) are set during
+    // initialization and do not change while routes are processing, so they 
do not need volatile.
+    private volatile boolean enabled;
+    private volatile boolean standby;
     private final AtomicLong traceCounter = new AtomicLong();
     // use a queue with an upper limit to avoid storing too many messages
     private final Queue<BacklogTracerEventMessage> queue = new 
LinkedBlockingQueue<>(MAX_BACKLOG_SIZE);
@@ -87,7 +91,8 @@ public class BacklogTracer extends ServiceSupport implements 
org.apache.camel.sp
     private boolean includeExchangeProperties = true;
     private boolean includeExchangeVariables = true;
     private boolean includeException = true;
-    private boolean activityEnabled;
+    // volatile: toggled at runtime via JMX, same rationale as enabled/standby 
above
+    private volatile boolean activityEnabled;
     private boolean traceRests;
     private boolean traceTemplates;
     // a pattern to filter tracing nodes

Reply via email to