shashank created CAMEL-25275:
--------------------------------

             Summary: camel-consul - the key/value and event consumers stop 
watching for good after one failed query, while the route stays started
                 Key: CAMEL-25275
                 URL: https://issues.apache.org/jira/browse/CAMEL-25275
             Project: Camel
          Issue Type: Bug
          Components: camel-consul
            Reporter: shashank


The {{consul:kv}} and {{consul:event}} consumers watch with a chain of blocking 
queries: the callback of each query ({{ConsulResponseCallback.onComplete}} / 
{{EventResponseCallback.onComplete}}) processes the answer and starts the next 
query. The failure callback only reports the exception:

{code:java}
@Override
public void onFailure(Throwable throwable) {
    onError(throwable);   // exception handler, nothing else
}
{code}

So when a single query fails (the Consul agent restarts, a network error, a 500 
while the Consul cluster has no leader, a read timeout), no further query is 
started: the consumer receives no change anymore, for good, while the route 
stays started. Only one WARN line from the exception handler shows it.

h3. Reproduction

Unit tests with a mocked {{Consul}} client ({{consulClient=#consul}}):
* {{ConsulKeyValueWatchTest}}: the first {{getValue}} fails with 
{{ConsulException}}: main never calls {{getValue}} again ({{Wanted 2 times ... 
But was 1 time}}); with the fix the second query answers and the value reaches 
the route.
* {{ConsulEventWatchTest}}: the same for {{listEvents}}.

h3. Proposed fix

* {{ConsulKeyValueConsumer}}: after a failure, query the key again after 
{{blockSeconds}} (at least one second, so that an agent that is down is not 
queried in a loop), on a single-thread scheduler of the consumer (started and 
shut down with it, as {{ConsulEventConsumer}} already does).
* {{ConsulEventConsumer}}: after a failure, schedule the next query as after an 
answer (its {{watch()}} already waits {{blockSeconds}}, see CAMEL-12418).
Both only while the consumer runs. With the fix the two tests pass and the 
camel-consul unit tests pass (6; the 27 ITs need Docker). {{mockito-core}} is 
added as a test dependency.

Affected: 4.14.x, 4.18.x and main (same code since 2017).

Duplicate check (2026-10-02): JIRA component camel-consul and text "consul" (90 
issues): watch related are CAMEL-12418 (CPU load, the scheduling delay), 
CAMEL-12511 (NPE on start), CAMEL-10073; none about failures. GitHub pull 
requests "consul consumer": none.

_Filed with Claude Code on behalf of allthingssecurity._




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

Reply via email to