[
https://issues.apache.org/jira/browse/CAMEL-25056?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-25056.
---------------------------------
Resolution: Fixed
Fixed by https://github.com/apache/camel/pull/26939
> camel-core - Backlog debugger and tracer: fix bugs found in a deep review
> -------------------------------------------------------------------------
>
> Key: CAMEL-25056
> URL: https://issues.apache.org/jira/browse/CAMEL-25056
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.23.0
>
>
> A deep review of the backlog debugger and backlog tracer
> (DefaultBacklogDebugger, DefaultDebugger, BacklogTracer,
> DefaultBacklogTracerEventMessage, ManagedBacklogDebugger) found the bugs
> below. Each one was reproduced against 4.23.0-SNAPSHOT and has a test in
> BacklogDebuggerEdgeCasesTest or BacklogTracerEdgeCasesTest that fails without
> the fix.
> Debugger
> # *stepOver() when not single stepping switches off all breakpoints for
> good.* It set the step-over mode, which is only reset by the next single
> step; at a breakpoint (the first stop in camel debug) or at the last step
> there is none, so every breakpoint was skipped from then on. Step over is now
> only set when single stepping, and it is reset when the single stepped
> exchange completes.
> # *Suspend mode set with setSuspendMode (camel.debug.waitForAttach) does not
> suspend anything*, as only the flag was set; and suspend mode from the
> environment turned off with setSuspendMode(false) kept every message waiting
> forever. Setting the suspend mode now suspends or resumes the message
> processing.
> # *removeAllBreakpoints() only removes the breakpoints that have a suspended
> exchange.*
> # *Changing a breakpoint to a conditional breakpoint does not set its
> condition*, so it stayed unconditional.
> # *A breakpoint condition that fails to evaluate fails the exchange.* It now
> logs a WARN and the breakpoint is skipped.
> # *setExchangePropertyOnBreakpoint / setExchangeVariableOnBreakpoint keep the
> type of the header with the same name*, not of the property or variable.
> # *The JMX evaluateExpressionAtBreakpoint(nodeId, language, expression) fails
> with NullPointerException* when the node is not suspended or the result is
> null.
> Tracer
> # *A traceFilter with a colon is taken as a language name*: ${header.foo} ==
> 'a:b' or ${date:now} failed with NoSuchLanguageException. A language prefix
> (simple:, jq:) is now only used when it names a language, and it is removed
> from the predicate (simple:... was previously always true).
> # *A traceFilter that fails to evaluate fails the traced exchange.* The
> exchange is now not traced.
> # *nodeLabel in the JSON of a traced message is escaped twice*, so the label
> read back had backslashes (such as mock:a\/b).
> # *The XML dump is not well-formed when an endpoint uri, location, node id or
> header key has & or <*, as only the values were encoded.
> *Not changed (for a later look)*
> * The latest message history queue may throw Queue full in append mode with
> many downstream exchanges (not reproduced).
> * The history capture stays stuck when tracePattern/traceFilter excludes the
> first or last event of a route.
> * A step breakpoint can replace another exchange suspended at the same node,
> and step() resumes exchanges suspended at other breakpoints.
> * The debugger is not prepared for shutdown (prepareShutdown is only called
> for route services), so suspended exchanges wait until the shutdown timeout.
> * includeException of the debugger is not used, and a refreshed suspended
> message loses its first/last flags.
> _Claude Code on behalf of Claus Ibsen_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)