Andrea Cosentino created CAMEL-24382:
----------------------------------------
Summary: camel-azure-cosmosdb: change-feed consumer checkpoints
the lease before the exchange is processed, losing events on failure
Key: CAMEL-24382
URL: https://issues.apache.org/jira/browse/CAMEL-24382
Project: Camel
Issue Type: Bug
Components: camel-azure
Reporter: Andrea Cosentino
Assignee: Andrea Cosentino
Fix For: 4.22.0
h3. Problem
{{CosmosDbConsumer.onEventListener}} dispatches the exchange fire-and-forget
and returns immediately:
{code:java}
exchange.getExchangeExtension().addOnCompletion(onCompletion);
getAsyncProcessor().process(exchange, EmptyAsyncCallback.get());
{code}
The change feed is driven by the Azure SDK {{ChangeFeedProcessor}} built with a
synchronous {{handleChanges(Consumer<List<...>>)}} handler (see
{{CosmosDbContainerOperations.captureEventsWithChangeFeed}}). The SDK
checkpoints the lease once that handler returns - which happens as soon as
{{onEventListener}} has *queued* the exchange, i.e. *before* the route has
processed it.
{{ConsumerOnCompletion}} only implements {{onFailure}} (it logs). So when the
route fails, the lease has already advanced and the batch is never redelivered:
the change feed is effectively at-most-once and silently loses data on any
downstream failure or on shutdown mid-batch.
h3. Fix
Defer the checkpoint until the exchange completes - process synchronously
inside the handler (block until the AsyncCallback fires) or adopt the
{{Mono}}-returning change-feed handler so the SDK only checkpoints after
successful processing. Confirm SDK checkpoint timing against the decompiled
azure-cosmos jar (as for CAMEL-24158); throughput/back-pressure and shutdown
behaviour need care.
Found reviewing the camel-azure modules not covered by the July 2026 review
(CAMEL-24158/24159). Affects main (4.22.0-SNAPSHOT).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)