Skip to content

Custom resource informer's event handler's onUpdate stops working after pod is restarted #3295

@asardaes

Description

@asardaes

Hello, I am currently trying to write a Kubernetes controller using io.fabric8:kubernetes-client:5.5.0. As of now, I have only tested basic logic with an informer:

flinkJobInformer = sharedInformerFactory.sharedIndexInformerForCustomResource(FlinkJobCustomResource.class, resyncPeriodSeconds * 1000L);
flinkJobInformer.addEventHandler(new FlinkJobHandler());
sharedInformerFactory.startAllRegisteredInformers().get();

The handler does nothing except log what it received.

After initial deployment, everything works as expected. But if I manually restart the pod where my controller is running after I already created some custom resources, I start seeing these exceptions after every resync:

2021-07-02T11:46:50,645+00 ERROR io.fabric8.kubernetes.client.informers.cache.ProcessorListener [pool-2-thread-1] Failed invoking com.dummy.kubernetes.controller.v1.FlinkJobHandler@60861d36 event handler:
io.fabric8.kubernetes.api.model.GenericKubernetesResource cannot be cast to com.dummy.kubernetes.model.v1.FlinkJobCustomResource
java.lang.ClassCastException: io.fabric8.kubernetes.api.model.GenericKubernetesResource cannot be cast to com.dummy.kubernetes.model.v1.FlinkJobCustomResource
        at com.dummy.kubernetes.controller.v1.FlinkJobHandler.onUpdate(FlinkJobHandler.java:9)
        at io.fabric8.kubernetes.client.informers.cache.ProcessorListener$UpdateNotification.handle(ProcessorListener.java:92)
        at io.fabric8.kubernetes.client.informers.cache.ProcessorListener.add(ProcessorListener.java:51)
        at io.fabric8.kubernetes.client.informers.cache.SharedProcessor.lambda$distribute$0(SharedProcessor.java:90)
        at io.fabric8.kubernetes.client.utils.SerialExecutor.lambda$execute$0(SerialExecutor.java:40)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Does anyone know why this happens?

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions