Skip to content

CAMEL-24789: camel-vertx-websocket - finish an exchange with no peer synchronously - #26541

Merged
oscerd merged 4 commits into
apache:mainfrom
oscerd:fix/CAMEL-24789
Sep 21, 2026
Merged

oscerd merged 4 commits into
apache:mainfrom
oscerd:fix/CAMEL-24789

Conversation

@oscerd

@oscerd oscerd commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Found by the same source audit of components/camel-vertx as #26533.

The problem

VertxWebsocketProducer.process told its callback the exchange had finished synchronously and told the
caller it had not:

if (connectedPeers.isEmpty()) {
    callback.done(true);
}

// Send message to each peer then record and process the results asynchronously
connectedPeers.forEach(...);   // nothing to iterate

return false;

AsyncProcessor#process documents the return value as doneSync — "true to continue execution
synchronously, false to continue being executed asynchronously" — so false says the exchange will be
finished later, by a write handler that never runs because there is nothing to write to. The null-body
branch a few lines earlier in the same method already does it correctly (callback.done(true); return true;).

Easy to reach: sendToAll with nothing connected yet, or a CamelVertxWebsocket.connectionKey that matches
no current peer.

The change

The empty case completes the callback, returns true, and logs a WARN naming the endpoint, so a message
that went nowhere is visible rather than silent.

A connection key that matches nothing was also dropped without a word, by .filter(peers::containsKey),
while a peer whose websocket turned out to be null one line further on did warn. Both report now.

Tests

VertxWebsocketProducerNoPeerTest (new, 2 cases) asserts what the contract is about — the value process
returns, the single callback, and its doneSync flag — for a broadcast that reaches no peer and for a null
body. The endpoint is built directly so nothing opens a connection.

Confirmed the test catches this: with the original completion handling restored,
anExchangeWithNoPeerIsDoneSynchronously fails on the return value (Expecting value to be true but was false).

mvn clean install -DskipITs on components/camel-vertx is green — 87 tests. Full reactor
mvn clean install -DskipTests -DskipITs -Dquickly green.

org.assertj:assertj-core was not on this module's test classpath and is added; #26533 adds the same line,
so whichever merges second will drop that hunk.


Claude Code on behalf of oscerd

🤖 Generated with Claude Code

@oscerd oscerd added the bug Something isn't working label Sep 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@gnodet gnodet added the port/camel-4.22.x Bug needs porting to camel-4.22.x label Sep 17, 2026
@gnodet-bot

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

This bugfix targets main and may need porting to:

  • camel-4.22.x

Labels port/<branch> have been added. Remove a label to opt out of porting to that branch.

Port PRs will be created automatically when this PR is merged. Comment /port to create them now.

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The production fix is correct — callback.done(true) now matches return true, closing the AsyncProcessor contract violation. The unmatched-key WARN closes the silent-drop gap in getConnectedPeers. Two test gaps worth closing.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

@github-actions

github-actions Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • components/camel-vertx/camel-vertx-websocket

🔬 Scalpel shadow comparison — Scalpel: 10 of 692 tested, 27 compile-only — current: 10 all tested

Maveniverse Scalpel detected 37 affected modules (current approach: 10).

Skip-tests mode would test 10 modules (1 direct + 9 downstream), skip tests for 27 (generated code, meta-modules)

⚠️ Modules only in Scalpel (27)
  • apache-camel
  • camel-allcomponents
  • camel-catalog
  • camel-catalog-console
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • docs
  • dummy-component
Modules Scalpel would test (10)
  • camel-ibm-watsonx-ai ← downstream of org.apache.camel:camel-vertx-websocket
  • camel-jbang-mcp ← downstream of org.apache.camel:camel-catalog
  • camel-jbang-plugin-mcp ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-route-parser ← downstream of org.apache.camel:camel-route-parser
  • camel-jbang-plugin-tui ← downstream of org.apache.camel:camel-catalog
  • camel-jbang-plugin-validate ← downstream of org.apache.camel:camel-yaml-dsl-validator
  • camel-launcher-container ← downstream of org.apache.camel:camel-launcher
  • camel-vertx-websocket ← components/camel-vertx/camel-vertx-websocket/src/main/java/org/apache/camel/component/vertx/websocket/VertxWebsocketProducer.java, components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketProducerNoPeerTest.java, components/camel-vertx/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertx/websocket/VertxWebsocketTest.java
  • camel-yaml-dsl-validator ← downstream of org.apache.camel:camel-catalog
  • camel-yaml-dsl-validator-maven-plugin ← downstream of org.apache.camel:camel-yaml-dsl-validator
Modules with tests skipped (27)
  • apache-camel
  • camel-allcomponents
  • camel-catalog
  • camel-catalog-console
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • docs
  • dummy-component

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

All tested modules (37 modules, 5m 28s total)

Total reactor time: 5m 28s

Module Duration Status
Camel :: Launcher 51.5s SUCCESS
Camel :: JBang :: MCP 41.3s SUCCESS
Camel :: Vert.x :: WebSocket 34.8s SUCCESS
Camel :: JBang :: Plugin :: TUI 34.1s SUCCESS
Camel :: Catalog :: Camel Catalog 23.6s SUCCESS
Camel :: Component DSL 21.0s SUCCESS
Camel :: JBang :: Plugin :: Kubernetes 16.0s SUCCESS
Camel :: Docs 15.1s SUCCESS
Camel :: YAML DSL :: Validator 10.0s SUCCESS
Camel :: Catalog :: Camel Report Maven Plugin 9.8s SUCCESS
Camel :: Kamelet Main 8.4s SUCCESS
Camel :: JBang :: Plugin :: Testing 7.7s SUCCESS
Camel :: Catalog :: Camel Route Parser 7.7s SUCCESS
Camel :: IBM :: watsonx.ai 5.8s SUCCESS
Camel :: JBang :: Plugin :: Validate 5.5s SUCCESS
Camel :: All Components Sync point 5.4s SUCCESS
Camel :: YAML DSL :: Deserializers 5.3s SUCCESS
Camel :: YAML DSL :: Validator Maven Plugin 3.7s SUCCESS
Camel :: Catalog :: Maven 3.4s SUCCESS
Camel :: YAML DSL :: Maven Plugins 3.1s SUCCESS
Camel :: Catalog :: Suggest (deprecated) 2.3s SUCCESS
Camel :: Coverage 1.8s SUCCESS
Camel :: JBang :: Plugin :: Edit 1.7s SUCCESS
Camel :: Endpoint DSL :: Support 1.3s SUCCESS
Camel :: Assembly 1.2s SUCCESS
Camel :: JBang :: Integration tests 1.1s SUCCESS
Camel :: Catalog :: Dummy Component 0.9s SUCCESS
Camel :: JBang :: Plugin :: Generate 0.9s SUCCESS
Camel :: Catalog :: Console 0.8s SUCCESS
Camel :: JBang :: Main 0.7s SUCCESS
Camel :: Launcher :: Container 0.7s SUCCESS
Camel :: JBang :: Plugin :: MCP 0.7s SUCCESS
Camel :: JBang :: Plugin :: Route Parser 0.5s SUCCESS
Camel :: Endpoint DSL n/a
Camel :: Integration Tests n/a
Camel :: JBang :: Core n/a
Camel :: YAML DSL n/a

Top 20 slowest modules:

  • Camel :: Launcher (51.5s)
  • Camel :: JBang :: MCP (41.3s)
  • Camel :: Vert.x :: WebSocket (34.8s)
  • Camel :: JBang :: Plugin :: TUI (34.1s)
  • Camel :: Catalog :: Camel Catalog (23.6s)
  • Camel :: Component DSL (21.0s)
  • Camel :: JBang :: Plugin :: Kubernetes (16.0s)
  • Camel :: Docs (15.1s)
  • Camel :: YAML DSL :: Validator (10.0s)
  • Camel :: Catalog :: Camel Report Maven Plugin (9.8s)
  • Camel :: Kamelet Main (8.4s)
  • Camel :: JBang :: Plugin :: Testing (7.7s)
  • Camel :: Catalog :: Camel Route Parser (7.7s)
  • Camel :: IBM :: watsonx.ai (5.8s)
  • Camel :: JBang :: Plugin :: Validate (5.5s)
  • Camel :: All Components Sync point (5.4s)
  • Camel :: YAML DSL :: Deserializers (5.3s)
  • Camel :: YAML DSL :: Validator Maven Plugin (3.7s)
  • Camel :: Catalog :: Maven (3.4s)
  • Camel :: YAML DSL :: Maven Plugins (3.1s)

⚙️ View full build and test results

oscerd and others added 2 commits September 21, 2026 09:33
…synchronously

With no peer to send to, the producer completed its callback with doneSync=true
and then returned false, which tells the caller the opposite: that the exchange
will be finished later, from a write handler that never runs because there is
nothing to write to. AsyncProcessor#process documents the return value as
doneSync, and the null-body branch a few lines earlier in the same method already
gets this right.

The empty case now completes and returns true, and says at WARN that the message
was not delivered. The path is easy to reach: sendToAll with nothing connected
yet, or a CamelVertxWebsocket.connectionKey that matches no current peer.

A connection key that matches nothing was also dropped in silence, while a peer
whose websocket turned out to be null one line further on did warn. Both report
now.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Andrea Cosentino <ancosen@gmail.com>
camel-vertx-websocket is written against org.junit.jupiter.api.Assertions in all
of its other test classes, so the new one follows suit rather than arriving as
the only AssertJ file, which also takes the assertj test dependency back out.
Same point davsclaus raised on CAMEL-24788.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Andrea Cosentino <ancosen@gmail.com>
@oscerd

oscerd commented Sep 21, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (which now has #26533) and applied the house-style point davsclaus made there, before it had to be made twice: the test is written with org.junit.jupiter.api.Assertions like the module's other 16 test classes, and the assertj-core test dependency is dropped. That also removes the pom hunk that would have conflicted between the two PRs.

Re-checked that the test still catches the bug after the conversion: with the producer change reverted it fails on the contract itself — process must report that it finished the exchange itself ==> expected: true but was: false.

91 module tests green, full reactor green.

Claude Code on behalf of oscerd

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewing after the rebase. The house-style conversion (assertj → JUnit) is done. Two findings from the previous review remain open.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

…o-peer tests

anExchangeWithNoBodyIsDoneSynchronously asserted only that process() returned
true and that doneSync was true, and a callback completed twice satisfies both.
It now counts callbacks like its sibling does, so a double-invocation fails.

The unmatched connection-key path had no test at all. It is only reachable when
peers exist and the key matches none of them, which needs a real consumer -
peers are added from a live connection handler, so the producer unit test
cannot get there. The test therefore lives in VertxWebsocketTest, where the
server harness already is: one connected peer, a key nobody has, and an
assertion that the peer receives nothing.

That pins behaviour rather than the log line, which would need a log appender
to assert and would be brittle. It is the behaviour that matters: mutating the
branch to fall back to putAll(peers) - the plausible wrong fix - makes the test
fail, so an unmatched key silently fanning out to whoever is connected is now
caught.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Andrea Cosentino <ancosen@gmail.com>

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewing after the third push.

Both findings from the previous CHANGES_REQUESTED are addressed:

Finding 1 — callback-count assertion in anExchangeWithNoBodyIsDoneSynchronously: Fixed. The test now uses an AtomicInteger and asserts assertEquals(1, callbacks.get()), matching the pattern in the first test. A second callback.done(true) invocation would now be caught.

Finding 2 — no unit test for the unmatched CONNECTION_KEY path: Addressed in VertxWebsocketTest.sendWithAnUnmatchedConnectionKeyDeliversToNobody. Oscerd's explanation of why it cannot live in VertxWebsocketProducerNoPeerTest is correct — the getConnectedPeers branch that logs the WARN requires peers to be non-empty, which is only reachable with a live server; an empty registry falls to the external-server else branch instead. The integration test with a real connected peer and an unmatched key covers the observable contract: the send returns without delivering to anyone.

Production fix and both test gaps are in order. CI is green. APPROVE.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

@davsclaus davsclaus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. callback.done(true) followed by return false was a genuine AsyncProcessor contract violation and the fix mirrors the null-body branch just above it; the result handler is now only built when there is someone to write to. The two review items from the earlier round are addressed in 8b95506d, and the placement of the unmatched-key test in VertxWebsocketTest is right - with an empty registry that path falls through to the outbound-connection branch, so it needs a real peer. Verified locally: 92/92 tests pass in camel-vertx-websocket on this branch.

One non-blocking thought on log level inline.

Claude Code on behalf of @davsclaus

This review was generated by an AI agent and may contain inaccuracies. Please verify all suggestions before applying.

Having no peer connected is an ordinary state for a broadcast - a route pushing
status on a timer before any browser attaches hits it on every tick - so warning
each time turns a normal condition into log noise. That line drops to debug.

The misconfiguration keeps its warning: a connection key that matches no peer is
still reported at WARN from getConnectedPeers, which is the case where the route
asked for a specific peer and did not get it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Andrea Cosentino <ancosen@gmail.com>

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewing after the fourth commit (8a77a8f).

The change is correct: LOG.warnLOG.debug for the empty-peers broadcast case, exactly as davsclaus suggested. A status route firing before any browser attaches hits this on every tick, so warning each time is log noise — debug is the right level. The misconfiguration path (explicit CONNECTION_KEY matching nothing) keeps its LOG.warn in getConnectedPeers, which is where it belongs.

All findings from the previous three review rounds are addressed. Production fix, both test gaps, and the log-level calibration are in order. CI is green (37 modules, all SUCCESS).

This review was generated by an AI agent, Hermès on behalf of @gnodet.

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewing after commit 8a77a8f.

The only change in this commit is lowering the empty-peer broadcast log line from LOG.warn to LOG.debug. The reasoning is correct: a route that broadcasts on a timer before any browser connects hits this path on every tick, and a WARN per tick is log noise for a normal operating condition. The targeted-key-not-found case correctly keeps its LOG.warn in getConnectedPeers — that one is a genuine misconfiguration signal.

All prior findings remain addressed. CI green. APPROVE.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

@oscerd
oscerd merged commit aaef748 into apache:main Sep 21, 2026
5 checks passed
@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs created:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

6 similar comments
@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

28 similar comments
@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet

gnodet commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

🔄 Backport Bot

Port PRs updated:

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@gnodet gnodet removed the port/camel-4.22.x Bug needs porting to camel-4.22.x label Sep 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants