-
Task
-
Resolution: Done
-
Undefined
-
None
-
2.4.0.GA
-
None
-
False
-
None
-
False
-
-
- Reduce log level for "ERROR AbstractOperator:xxx - Watcher closed with exception in namespace xxx" and "io.fabric8.kubernetes.client.WatcherException: too old resource version"(1)(2)
- Problem:
- When an ERROR log is logged, users will assume that a fault exists in the system and that specific improvements are required.
- However, if this error log occurs, the connection is automatically made again, and the user can ignore this error. So It should also not expect the user to perform any concrete operation.
- Solution:
- I believe INFO or WARN log level would be appropriate.
- Or, provides documentation or knowledge to explain the error.
- Or, the error log should include a solution or confirmation that the users should perform when this error occurs.
- As another solution, to prevent this exception from occurring, the implementation could be changed using the SharedInformer API: https://rohaan.medium.com/introduction-to-fabric8-kubernetes-java-client-informer-api-b945082d69af
(1) https://github.com/strimzi/strimzi-kafka-operator/blob/d4f3bdd0bc2ed29b0a012faa55d07f8e301edeef/operator-common/src/main/java/io/strimzi/operator/common/AbstractOperator.java#L490
(2) error log example
2023-04-28 02:04:14 ERROR AbstractOperator:483 - Watcher closed with exception in namespace example-project io.fabric8.kubernetes.client.WatcherException: too old resource version: 25747580 (25747657) at io.fabric8.kubernetes.client.dsl.internal.AbstractWatchManager.onStatus(AbstractWatchManager.java:288) ~[io.fabric8.kubernetes-client-6.2.0.redhat-00003.jar:?] at io.fabric8.kubernetes.client.dsl.internal.AbstractWatchManager.onMessage(AbstractWatchManager.java:260) ~[io.fabric8.kubernetes-client-6.2.0.redhat-00003.jar:?] at io.fabric8.kubernetes.client.dsl.internal.WatchConnectionManager.onMessage(WatchConnectionManager.java:113) ~[io.fabric8.kubernetes-client-6.2.0.redhat-00003.jar:?] at io.fabric8.kubernetes.client.dsl.internal.WatcherWebSocketListener.onMessage(WatcherWebSocketListener.java:55) ~[io.fabric8.kubernetes-client-6.2.0.redhat-00003.jar:?] at io.fabric8.kubernetes.client.okhttp.OkHttpWebSocketImpl$BuilderImpl$1.onMessage(OkHttpWebSocketImpl.java:105) ~[io.fabric8.kubernetes-httpclient-okhttp-6.2.0.redhat-00003.jar:?] at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.java:323) ~[com.squareup.okhttp3.okhttp-3.12.12.redhat-00001.jar:3.12.12.redhat-00001] at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.java:219) ~[com.squareup.okhttp3.okhttp-3.12.12.redhat-00001.jar:3.12.12.redhat-00001] at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.java:105) ~[com.squareup.okhttp3.okhttp-3.12.12.redhat-00001.jar:3.12.12.redhat-00001] at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.java:274) ~[com.squareup.okhttp3.okhttp-3.12.12.redhat-00001.jar:3.12.12.redhat-00001] at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:214) ~[com.squareup.okhttp3.okhttp-3.12.12.redhat-00001.jar:3.12.12.redhat-00001] at okhttp3.RealCall$AsyncCall.execute(RealCall.java:203) ~[com.squareup.okhttp3.okhttp-3.12.12.redhat-00001.jar:3.12.12.redhat-00001] at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) ~[com.squareup.okhttp3.okhttp-3.12.12.redhat-00001.jar:3.12.12.redhat-00001] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?] at java.lang.Thread.run(Thread.java:829) ~[?:?] Caused by: io.fabric8.kubernetes.client.KubernetesClientException: too old resource version: 25747580 (25747657)