[ 
https://issues.apache.org/jira/browse/CAMEL-25857?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18131399#comment-18131399
 ] 

Claus Ibsen commented on CAMEL-25857:
-------------------------------------

Merged to main in https://github.com/apache/camel/pull/28380 (commit 
688db726024e), fixed in 4.24.0.

_Claude Code on behalf of davsclaus_

> camel-kubernetes - when the first watch of a watch consumer cannot be created 
> (API server unreachable, 403), the consumer never watches, nothing is logged, 
> and the route stays started
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-25857
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25857
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-kubernetes
>            Reporter: shashank
>            Assignee: shashank
>            Priority: Major
>             Fix For: 4.24.0
>
>
> The watch consumers of camel-kubernetes ({{kubernetes-pods}}, {{-services}}, 
> {{-deployments}}, {{-config-maps}}, {{-custom-resources}}, {{-events}}, 
> {{-hpa}}, {{-namespaces}}, {{-nodes}}, {{-replication-controllers}} and 
> {{openshift-deploymentconfigs}}) submit their watch task to their executor 
> once, in {{doStart}} (main 20cdb309f7d0, for example 
> {{KubernetesPodsConsumer}} line 63):
> {code:java}
> podsWatcher = new PodsConsumerTask();
> executor.submit(podsWatcher);
> {code}
> The task calls the fabric8 {{watch(...)}}, which throws a 
> {{KubernetesClientException}} when the watch cannot be created: the API 
> server cannot be reached, or answers 403 because the RBAC rules of the 
> service account are not applied yet (a Role/RoleBinding applied after the 
> Deployment), or 5xx during an API server upgrade. The exception ends the task 
> inside the {{Future}} returned by {{submit}}, which nobody reads. So nothing 
> is logged, the consumer never tries again, and the route stays started 
> without receiving any event, until the route or the application is restarted.
> CAMEL-25273 made the consumers watch again when the client closes a watch 
> with an error, with a backoff when watching again fails 
> ({{KubernetesHelper.watchAgain}}); its description lists the failed first 
> watch as not in scope. The first watch is the only path left without a retry.
> *Fix*: a new {{KubernetesHelper.watch(consumer, executor, task)}} runs the 
> first watch on the executor of the consumer; on failure it logs a WARN 
> ("Failed to watch for <consumer>, trying again in 1000 ms") and tries again 
> with the backoff of {{watchAgain}} (1 s, doubling up to 30 s) until the watch 
> is created or the consumer is stopped. The 11 consumers call it instead of 
> {{executor.submit(task)}}.
> *Tests*: new {{KubernetesPodsConsumerFirstWatchFailsTest}} (fabric8 mock 
> server, as {{KubernetesPodsConsumerWatchClosedTest}}): the first watch 
> request gets 403, the second one an {{ADDED}} pod. On main it fails with 
> {{mock://result Received message count. Expected: <1> but was: <0>}}, and the 
> test log has no line about the 403. With the fix it passes. camel-kubernetes 
> unit tests with the fix: 180 run, 0 failures, 6 skipped.
> *How it was found*: a review of consumers that run their receive loop or 
> watch on their own thread, looking for an exception that ends it while the 
> route stays started; then the JUnit test above. Not run against a real 
> cluster.
> *Affected*: main and camel-4.23.x (with CAMEL-25273); camel-4.22.x, 
> camel-4.18.x and camel-4.14.x have the same {{executor.submit}} of the first 
> watch, and there a watch closed with an error is not retried either 
> (CAMEL-25273 is fixed in 4.23.0 only) (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