[ 
https://issues.apache.org/jira/browse/CAMEL-24401?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vladimir Dobos updated CAMEL-24401:
-----------------------------------
    Description: 
Today I bring you another "juicy" camel-jms threading issue :) (much juicier 
than [last year one|https://issues.apache.org/jira/browse/CAMEL-22364])
Companion git repo: 
[https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026]
 
([https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026.git])

Overview:
 - This issue describes two use-cases where thread of camel-jms InOut to(...) 
endpoint gets stuck +infinitely+ looping on "Failed to resolve replyTo 
destination on the exchange" error for each processed request, when using 
temporary reply queue (see Exception.txt in linked git repository), unable to 
+ever+ recover (which means the route is theoretically reported as live, 
although it does not work)
 - The issue implies that replyTo got stuck on null permanently somehow, which 
on first glance should never happen :/
 - Issue was reported on IBM MQ, however it should be a general problem for any 
MQ broker
 - This ticket reports 2 issues dubbed scenario A and scenario B, both are 
succession of (different) steps, that will result in the same outcome inside of 
camel-jms
 - The scenario A depicts (most probable) cause of real situation that happened 
on our customers OpenShift running many Camel Main Java route DSL (no Spring 
Boot) based microservices, scenario B was found accidentaly during the analysis 
and search of A, after upgrading to camel 4.21.0/4.22.0
 - Our customer mentioned this issue occuring several times during last year+, 
but they only observed it happening very occasionaly (once every 2-3 months) on 
less critical services, only in production environment, never on dev or test
 - After this issue occurred on critical services in production with 
side-effect of necessiating regulatory reporting, we were called to fully 
diagnose the issue

Natural occurrence background (for last occurrance, we don't know about 
previous ones):
 - OpenShift cluster
 - Issue happened on one OpenShift worker after destabilization of storage 
caused by live patching
 - More than one service on same worker were affected, however not all of them. 
With no found common characteristics besides camel-jms usage (affectees and 
survivors were pointed to both same and different MQ managers randomly between 
them)
 - The messaging broker is IBM MQ
 - Routes in affected microservices are called by http using rest(...) and call 
mix of camel-jms and http/rest backends
 - The camel version is 4.8.9 (with planned update to 4.22.0 this fall), again 
to reiterate - java code camel routes, Camel Main without Spring Boot
 - The logging level in production is set to ERROR, there were unfortunately no 
abnormal "leading cause" log lines before the critical "Failed to resolve 
replyTo destination on the exchange" exception, we saw only end state in the 
logs, nothing that lead to it was logged. This is why the scenario A is 
depicted as "most probable" cause, as i was unable to find different scenario 
on camel-jms 4.8.9 that can cause the issue
 - There was no reproduction of this issue outside of our customers production 
environment before I started the analysis

AI Usage
 - Most of exact diagnosis and reproduction was performed with heavy AI 
assistance
 - AI used was mostly Claude Fable, Calude Opus 5 with small parts being done 
by GPT 5.6 Sol
 - Claude Fable was used mostly due to frequent hitting of content-filters for 
cybersecurity on 5.6 Sol, Opus 5 was used when we hit content filtering on 
Fable (tweaking of networking and CPU resources and specific cli commands 
required for reproduction unfortunately cause quite frequent false-positive 
flagging, especialy on GPT 5.6 Sol)
 - We use Github Copilot as AI harness (enterprise ghe domain as we need EU 
data residency)
 - Analysis was heavily human-guided as AI had propensity to dig itself into 
very deep hole it could not escape from ;)
 - This text is 100% human created ;)

Diagnosis steps:
 - After manually reviewing the code, my lead theory was some sort of out-of 
order execution with thread parking, similar in spirit to issue from [last 
year|https://issues.apache.org/jira/browse/CAMEL-22364] (happened for the same 
customer - their environments are clearly -cursed- blessed), but clearly much 
more complex in setup and causality chain
 - Reproduction was performed on my personal laptop running Linux OS, there is 
a possibility that different CPU/OS will cause different outcomes on reproducer
 - Focus of the reproduction was reproduction using unmodified camel/camel-jms 
to prove the issue can happen in the wild and is not only theoretical
 - AI confirmed potential presence of candidate causality chain that can lead 
to described stuck state and created a reproducer
 - Reproducer required changes to CPU settings for containers, thus necessity 
of root privileges. I used rootful docker with temporary facl on docker socket 
to run the reproducer (I usually use rootless podman)
 - After succesfull reproduction on camel 4.8.9, the reproducer was updated to 
4.21.0 and subsequently to locally built and regularly updated snapshot of 
master from camel git repo for 4.22.0 (this was in weeks pre-release)
 - The reproduction of issue on 4.22.0 snapshot hit much faster than 4.8.9, 
however after querying AI to confirm the reproduced issue really matches 
theoretized scenario A, AI identified scenario B which is caused by Spring 
7.0.x adding verification step to recovery inside of spring-jms, which causes 
setting of varaiable in camel-jms prematurely while MQ is still unstable
 - After isolating Scenario B I refocused AI to focus on reproduction of 
Scenario A and was succesfull with reproduction on camel 4.22.0 snapshot. 
Scenario A is complicated thread-parking induced issue. According to AI, it is 
much more likely to happen on old 4.8.9 than new 4.22.0, however it is still 
possible (as is seen in succesfull reproducer), thus Murphys laws would make it 
happen within 12 hours of deployed upgrade ;)
 - I instructed AI to double-confirm the reproduction of both scenarios by 
creating probes in source code using java agent and new Java 25 classfile API. 
it chose injection of custom JFR events and verified the scenarios
 - Both issues were also successfully reproduced on camel 4.22.0 final release
Artifacts (AI generated, I assume availability of AI assistance, per AI 
activity on camel JIRA/Github):
 - Public GitHub repository link: 
[https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026]
 
([https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026.git])
 - Reproducer: folder ~/Reproducer (see ~/Reproducer/README.md), REQUIRES 
rootfull containers, expects docker with rw facl set on docker socket
 - Human-friendly interactive overview of both scenarios (html, created also 
for me so i can better understand the scenarios): primary scenario-based, based 
on theoretical best-case scenario - 
"/explanation_docs/interactive/scenario/index.html". For complex scenario A 
there is also {~}"{~}/explanation_docs/interactive/debugger/index.html", based 
on real reproducer log.
 - AI (and human ;)) readable markdown resources: 
"~/explanation_docs/markdown/*.md"

Postscript:
 - I instructed AI to theoretize similar scenarios on camel-sjms. It 
successfully proposed several scenarios of unknown viability, even claimed some 
are worse than ones in camel-jms. AI readable markdown can be found in git in 
file ""~/explanation_docs/markdown/Unproven_camel_sjms.md". As this was outside 
of my assignment, i unfortunately didn't have time to explore it further, 
however I noticed you employed AI to do checks and fix several issues for 
4.22.0 so I included it so you can explore this.
 - When trying to reproduce scenario A on camel 4.22.0, I instructed AI to 
perform minimal fix of scenario B as it shadowed A in most use-cases, I was 
warned that naive fix for B might introduce scenario C that will cause the same 
issue in different steps (scenario is briefly described in resources)

  was:
Today I bring you another "juicy" camel-jms threading issue :) (much juicier 
than last year one)
Companion git repo: 
[https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026]
 
([https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026.git])

Overview:
 - This issue describes two use-cases where thread of camel-jms InOut to(...) 
endpoint gets stuck +infinitely+ looping on "Failed to resolve replyTo 
destination on the exchange" error for each processed request, when using 
temporary reply queue (see Exception.txt in linked git repository), unable to 
+ever+ recover (which means the route is theoretically reported as live, 
although it does not work)
 - The issue implies that replyTo got stuck on null permanently somehow, which 
on first glance should never happen :/
 - Issue was reported on IBM MQ, however it should be a general problem for any 
MQ broker
 - This ticket reports 2 issues dubbed scenario A and scenario B, both are 
succession of (different) steps, that will result in the same outcome inside of 
camel-jms
 - The scenario A depicts (most probable) cause of real situation that happened 
on our customers OpenShift running many Camel Main Java route DSL (no Spring 
Boot) based microservices, scenario B was found accidentaly during the analysis 
and search of A, after upgrading to camel 4.21.0/4.22.0
 - Our customer mentioned this issue occuring several times during last year+, 
but they only observed it happening very occasionaly (once every 2-3 months) on 
less critical services, only in production environment, never on dev or test
 - After this issue occurred on critical services in production with 
side-effect of necessiating regulatory reporting, we were called to fully 
diagnose the issue

Natural occurrence background (for last occurrance, we don't know about 
previous ones):
 - OpenShift cluster
 - Issue happened on one OpenShift worker after destabilization of storage 
caused by live patching
 - More than one service on same worker were affected, however not all of them. 
With no found common characteristics besides camel-jms usage (affectees and 
survivors were pointed to both same and different MQ managers randomly between 
them)
 - The messaging broker is IBM MQ
 - Routes in affected microservices are called by http using rest(...) and call 
mix of camel-jms and http/rest backends
 - The camel version is 4.8.9 (with planned update to 4.22.0 this fall), again 
to reiterate - java code camel routes, Camel Main without Spring Boot
 - The logging level in production is set to ERROR, there were unfortunately no 
abnormal "leading cause" log lines before the critical "Failed to resolve 
replyTo destination on the exchange" exception, we saw only end state in the 
logs, nothing that lead to it was logged. This is why the scenario A is 
depicted as "most probable" cause, as i was unable to find different scenario 
on camel-jms 4.8.9 that can cause the issue
 - There was no reproduction of this issue outside of our customers production 
environment before I started the analysis

AI Usage
 - Most of exact diagnosis and reproduction was performed with heavy AI 
assistance
 - AI used was mostly Claude Fable, Calude Opus 5 with small parts being done 
by GPT 5.6 Sol
 - Claude Fable was used mostly due to frequent hitting of content-filters for 
cybersecurity on 5.6 Sol, Opus 5 was used when we hit content filtering on 
Fable (tweaking of networking and CPU resources and specific cli commands 
required for reproduction unfortunately cause quite frequent false-positive 
flagging, especialy on GPT 5.6 Sol)
 - We use Github Copilot as AI harness (enterprise ghe domain as we need EU 
data residency)
 - Analysis was heavily human-guided as AI had propensity to dig itself into 
very deep hole it could not escape from ;)
 - This text is 100% human created ;)

Diagnosis steps:
 - After manually reviewing the code, my lead theory was some sort of out-of 
order execution with thread parking, similar in spirit to issue from [last 
year|https://issues.apache.org/jira/browse/CAMEL-22364] (happened for the same 
customer - their environments are clearly -cursed- blessed), but clearly much 
more complex in setup and causality chain
 - Reproduction was performed on my personal laptop running Linux OS, there is 
a possibility that different CPU/OS will cause different outcomes on reproducer
 - Focus of the reproduction was reproduction using unmodified camel/camel-jms 
to prove the issue can happen in the wild and is not only theoretical
 - AI confirmed potential presence of candidate causality chain that can lead 
to described stuck state and created a reproducer
 - Reproducer required changes to CPU settings for containers, thus necessity 
of root privileges. I used rootful docker with temporary facl on docker socket 
to run the reproducer (I usually use rootless podman)
 - After succesfull reproduction on camel 4.8.9, the reproducer was updated to 
4.21.0 and subsequently to locally built and regularly updated snapshot of 
master from camel git repo for 4.22.0 (this was in weeks pre-release)
 - The reproduction of issue on 4.22.0 snapshot hit much faster than 4.8.9, 
however after querying AI to confirm the reproduced issue really matches 
theoretized scenario A, AI identified scenario B which is caused by Spring 
7.0.x adding verification step to recovery inside of spring-jms, which causes 
setting of varaiable in camel-jms prematurely while MQ is still unstable
 - After isolating Scenario B I refocused AI to focus on reproduction of 
Scenario A and was succesfull with reproduction on camel 4.22.0 snapshot. 
Scenario A is complicated thread-parking induced issue. According to AI, it is 
much more likely to happen on old 4.8.9 than new 4.22.0, however it is still 
possible (as is seen in succesfull reproducer), thus Murphys laws would make it 
happen within 12 hours of deployed upgrade ;)
 - I instructed AI to double-confirm the reproduction of both scenarios by 
creating probes in source code using java agent and new Java 25 classfile API. 
it chose injection of custom JFR events and verified the scenarios
 - Both issues were also successfully reproduced on camel 4.22.0 final release
Artifacts (AI generated, I assume availability of AI assistance, per AI 
activity on camel JIRA/Github):
 - Public GitHub repository link: 
[https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026]
 
([https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026.git])
 - Reproducer: folder ~/Reproducer (see ~/Reproducer/README.md), REQUIRES 
rootfull containers, expects docker with rw facl set on docker socket
 - Human-friendly interactive overview of both scenarios (html, created also 
for me so i can better understand the scenarios): primary scenario-based, based 
on theoretical best-case scenario - 
"/explanation_docs/interactive/scenario/index.html". For complex scenario A 
there is also {~}"{~}/explanation_docs/interactive/debugger/index.html", based 
on real reproducer log.
 - AI (and human ;)) readable markdown resources: 
"~/explanation_docs/markdown/*.md"

Postscript:
 - I instructed AI to theoretize similar scenarios on camel-sjms. It 
successfully proposed several scenarios of unknown viability, even claimed some 
are worse than ones in camel-jms. AI readable markdown can be found in git in 
file ""~/explanation_docs/markdown/Unproven_camel_sjms.md". As this was outside 
of my assignment, i unfortunately didn't have time to explore it further, 
however I noticed you employed AI to do checks and fix several issues for 
4.22.0 so I included it so you can explore this.
 - When trying to reproduce scenario A on camel 4.22.0, I instructed AI to 
perform minimal fix of scenario B as it shadowed A in most use-cases, I was 
warned that naive fix for B might introduce scenario C that will cause the same 
issue in different steps (scenario is briefly described in resources)


> Camel-jms InOut pattern on to(...) with temporary queues can enter infinitely 
> looping error state
> -------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24401
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24401
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jms
>    Affects Versions: 4.22.0
>         Environment: OpenShift (customer production environemnt, on 
> enterprise license)
> Local OpenSuse Linux distribution for reproduciton + Docker
> JDK 21 and JDK 25
>            Reporter: Vladimir Dobos
>            Priority: Major
>
> Today I bring you another "juicy" camel-jms threading issue :) (much juicier 
> than [last year one|https://issues.apache.org/jira/browse/CAMEL-22364])
> Companion git repo: 
> [https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026]
>  
> ([https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026.git])
> Overview:
>  - This issue describes two use-cases where thread of camel-jms InOut to(...) 
> endpoint gets stuck +infinitely+ looping on "Failed to resolve replyTo 
> destination on the exchange" error for each processed request, when using 
> temporary reply queue (see Exception.txt in linked git repository), unable to 
> +ever+ recover (which means the route is theoretically reported as live, 
> although it does not work)
>  - The issue implies that replyTo got stuck on null permanently somehow, 
> which on first glance should never happen :/
>  - Issue was reported on IBM MQ, however it should be a general problem for 
> any MQ broker
>  - This ticket reports 2 issues dubbed scenario A and scenario B, both are 
> succession of (different) steps, that will result in the same outcome inside 
> of camel-jms
>  - The scenario A depicts (most probable) cause of real situation that 
> happened on our customers OpenShift running many Camel Main Java route DSL 
> (no Spring Boot) based microservices, scenario B was found accidentaly during 
> the analysis and search of A, after upgrading to camel 4.21.0/4.22.0
>  - Our customer mentioned this issue occuring several times during last 
> year+, but they only observed it happening very occasionaly (once every 2-3 
> months) on less critical services, only in production environment, never on 
> dev or test
>  - After this issue occurred on critical services in production with 
> side-effect of necessiating regulatory reporting, we were called to fully 
> diagnose the issue
> Natural occurrence background (for last occurrance, we don't know about 
> previous ones):
>  - OpenShift cluster
>  - Issue happened on one OpenShift worker after destabilization of storage 
> caused by live patching
>  - More than one service on same worker were affected, however not all of 
> them. With no found common characteristics besides camel-jms usage (affectees 
> and survivors were pointed to both same and different MQ managers randomly 
> between them)
>  - The messaging broker is IBM MQ
>  - Routes in affected microservices are called by http using rest(...) and 
> call mix of camel-jms and http/rest backends
>  - The camel version is 4.8.9 (with planned update to 4.22.0 this fall), 
> again to reiterate - java code camel routes, Camel Main without Spring Boot
>  - The logging level in production is set to ERROR, there were unfortunately 
> no abnormal "leading cause" log lines before the critical "Failed to resolve 
> replyTo destination on the exchange" exception, we saw only end state in the 
> logs, nothing that lead to it was logged. This is why the scenario A is 
> depicted as "most probable" cause, as i was unable to find different scenario 
> on camel-jms 4.8.9 that can cause the issue
>  - There was no reproduction of this issue outside of our customers 
> production environment before I started the analysis
> AI Usage
>  - Most of exact diagnosis and reproduction was performed with heavy AI 
> assistance
>  - AI used was mostly Claude Fable, Calude Opus 5 with small parts being done 
> by GPT 5.6 Sol
>  - Claude Fable was used mostly due to frequent hitting of content-filters 
> for cybersecurity on 5.6 Sol, Opus 5 was used when we hit content filtering 
> on Fable (tweaking of networking and CPU resources and specific cli commands 
> required for reproduction unfortunately cause quite frequent false-positive 
> flagging, especialy on GPT 5.6 Sol)
>  - We use Github Copilot as AI harness (enterprise ghe domain as we need EU 
> data residency)
>  - Analysis was heavily human-guided as AI had propensity to dig itself into 
> very deep hole it could not escape from ;)
>  - This text is 100% human created ;)
> Diagnosis steps:
>  - After manually reviewing the code, my lead theory was some sort of out-of 
> order execution with thread parking, similar in spirit to issue from [last 
> year|https://issues.apache.org/jira/browse/CAMEL-22364] (happened for the 
> same customer - their environments are clearly -cursed- blessed), but clearly 
> much more complex in setup and causality chain
>  - Reproduction was performed on my personal laptop running Linux OS, there 
> is a possibility that different CPU/OS will cause different outcomes on 
> reproducer
>  - Focus of the reproduction was reproduction using unmodified 
> camel/camel-jms to prove the issue can happen in the wild and is not only 
> theoretical
>  - AI confirmed potential presence of candidate causality chain that can lead 
> to described stuck state and created a reproducer
>  - Reproducer required changes to CPU settings for containers, thus necessity 
> of root privileges. I used rootful docker with temporary facl on docker 
> socket to run the reproducer (I usually use rootless podman)
>  - After succesfull reproduction on camel 4.8.9, the reproducer was updated 
> to 4.21.0 and subsequently to locally built and regularly updated snapshot of 
> master from camel git repo for 4.22.0 (this was in weeks pre-release)
>  - The reproduction of issue on 4.22.0 snapshot hit much faster than 4.8.9, 
> however after querying AI to confirm the reproduced issue really matches 
> theoretized scenario A, AI identified scenario B which is caused by Spring 
> 7.0.x adding verification step to recovery inside of spring-jms, which causes 
> setting of varaiable in camel-jms prematurely while MQ is still unstable
>  - After isolating Scenario B I refocused AI to focus on reproduction of 
> Scenario A and was succesfull with reproduction on camel 4.22.0 snapshot. 
> Scenario A is complicated thread-parking induced issue. According to AI, it 
> is much more likely to happen on old 4.8.9 than new 4.22.0, however it is 
> still possible (as is seen in succesfull reproducer), thus Murphys laws would 
> make it happen within 12 hours of deployed upgrade ;)
>  - I instructed AI to double-confirm the reproduction of both scenarios by 
> creating probes in source code using java agent and new Java 25 classfile 
> API. it chose injection of custom JFR events and verified the scenarios
>  - Both issues were also successfully reproduced on camel 4.22.0 final release
> Artifacts (AI generated, I assume availability of AI assistance, per AI 
> activity on camel JIRA/Github):
>  - Public GitHub repository link: 
> [https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026]
>  
> ([https://github.com/vdobos-trask/Reproducer_Camel_Jms_Failed_ReplyTo_Destination_2026.git])
>  - Reproducer: folder ~/Reproducer (see ~/Reproducer/README.md), REQUIRES 
> rootfull containers, expects docker with rw facl set on docker socket
>  - Human-friendly interactive overview of both scenarios (html, created also 
> for me so i can better understand the scenarios): primary scenario-based, 
> based on theoretical best-case scenario - 
> "/explanation_docs/interactive/scenario/index.html". For complex scenario A 
> there is also {~}"{~}/explanation_docs/interactive/debugger/index.html", 
> based on real reproducer log.
>  - AI (and human ;)) readable markdown resources: 
> "~/explanation_docs/markdown/*.md"
> Postscript:
>  - I instructed AI to theoretize similar scenarios on camel-sjms. It 
> successfully proposed several scenarios of unknown viability, even claimed 
> some are worse than ones in camel-jms. AI readable markdown can be found in 
> git in file ""~/explanation_docs/markdown/Unproven_camel_sjms.md". As this 
> was outside of my assignment, i unfortunately didn't have time to explore it 
> further, however I noticed you employed AI to do checks and fix several 
> issues for 4.22.0 so I included it so you can explore this.
>  - When trying to reproduce scenario A on camel 4.22.0, I instructed AI to 
> perform minimal fix of scenario B as it shadowed A in most use-cases, I was 
> warned that naive fix for B might introduce scenario C that will cause the 
> same issue in different steps (scenario is briefly described in resources)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to