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&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&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