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

Claus Ibsen resolved CAMEL-26045.
---------------------------------
    Resolution: Fixed

Fixed via https://github.com/apache/camel/pull/28533

> camel-azure-cosmosdb - stopping one endpoint closes the CosmosAsyncClient set 
> on the component or autowired, which all endpoints share
> --------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26045
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26045
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-azure
>            Reporter: shashank
>            Assignee: shashank
>            Priority: Major
>             Fix For: 4.24.0
>
>
> {{CosmosDbEndpoint.doStart}} takes the {{CosmosAsyncClient}} of the 
> configuration (the {{cosmosAsyncClient}} option, {{@Metadata(autowired = 
> true)}}) or creates one, and {{doStop}} closes whichever client it has (main 
> 9f839f4bcc9d). A client set on the component or autowired from the registry 
> is shared by every azure-cosmosdb endpoint, and often by the application too 
> (for example a Spring bean used by Spring Data Cosmos). 
> {{AbstractCamelContext.removeRoute}} stops the endpoints that only the 
> removed route used. So removing or reloading one route closes the client, and 
> every other azure-cosmosdb endpoint and the application fail their requests 
> until the application is restarted. azure-cosmos 4.75.0 
> {{CosmosAsyncClient.close()}} closes its {{AsyncDocumentClient}}.
> *Fix*: the endpoint remembers whether it created the client and closes only a 
> client it created, as azure-servicebus, eventhubs and vertexai do and as 
> CAMEL-25288 did for dapr. Upgrade guide (4.24): a client set on the component 
> or autowired is no longer closed by Camel.
> *Tests*: new {{CosmosDbEndpointClientLifecycleTest}}, 2 tests.
> * {{removingARouteDoesNotCloseTheSharedClient}} (a Mockito 
> {{CosmosAsyncClient}} in the registry, autowired into two routes; one route 
> is removed) fails on main: {{shared.close(); Never wanted here: ... But 
> invoked here: ... CosmosDbEndpoint.doStop}};
> * {{anEndpointClosesTheClientItCreated}} 
> ({{mockStatic(CosmosDbClientFactory)}}) is a control that passes on main and 
> with the fix: a client the endpoint created is closed on stop, and a start 
> after a stop creates a new one.
> Unit tests of camel-azure-cosmosdb with the fix: 23 run, 0 failures.
> *How it was found*: propagation of our fix pattern "stop closes a client that 
> came from an option/component" (CAMEL-25288, CAMEL-25276, CAMEL-25907).
> *Not changed* (follow-up if wanted): {{CosmosDbConsumer}} and 
> {{CosmosDbProducer}} wrap the endpoint's client once, in {{doInit}}. After a 
> CamelContext stop and start, an endpoint that created its own client creates 
> a new one, while a consumer or producer that is started again keeps the 
> closed one.
> *Affected*: main, camel-4.23.x, camel-4.22.x and camel-4.18.x (same 
> endpoint). Read, not run.
> _Filed with Claude Code on behalf of allthingssecurity._



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to