Skip to content

failed invoking InformerEventSource event handler: null: java.lang.NullPointerException #2694

Closed
@matteriben

Description

@matteriben

I'm updating to version 5. I ran an existing test that creates many custom resources which need to be reconciled and noticed that I would occasionally see these errors in the logs.

2025-02-21 12:11:43,724 ERROR [io.fab.kub.cli.inf.imp.cac.SharedProcessor] (-1324526451-pool-1-thread-3) v1/configmaps failed invoking InformerEventSource{resourceClass: ConfigMap} event handler: null: java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:233)
	at io.quarkus.vertx.mdc.provider.LateBoundMDCProvider.putLocal(LateBoundMDCProvider.java:147)
	at io.quarkus.vertx.mdc.provider.LateBoundMDCProvider.put(LateBoundMDCProvider.java:63)
	at org.jboss.logmanager.MDC.put(MDC.java:90)
	at org.slf4j.impl.Slf4jMDCAdapter.put(Slf4jMDCAdapter.java:32)
	at org.slf4j.MDC.put(MDC.java:123)
	at io.javaoperatorsdk.operator.processing.MDCUtils.addResourceInfo(MDCUtils.java:36)
	at java.base/java.util.Optional.ifPresent(Optional.java:178)
	at io.javaoperatorsdk.operator.processing.event.EventProcessor.submitReconciliationExecution(EventProcessor.java:128)
	at io.javaoperatorsdk.operator.processing.event.EventProcessor.handleMarkedEventForResource(EventProcessor.java:119)
	at io.javaoperatorsdk.operator.processing.event.EventProcessor.handleEvent(EventProcessor.java:109)
	at io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource.lambda$propagateEvent$4(InformerEventSource.java:230)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource.propagateEvent(InformerEventSource.java:220)
	at io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource.onAddOrUpdate(InformerEventSource.java:175)
	at io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource.onUpdate(InformerEventSource.java:140)
	at io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource.onUpdate(InformerEventSource.java:68)
	at io.fabric8.kubernetes.client.informers.impl.cache.ProcessorListener$UpdateNotification.handle(ProcessorListener.java:96)
	at io.fabric8.kubernetes.client.informers.impl.cache.ProcessorListener.add(ProcessorListener.java:50)
	at io.fabric8.kubernetes.client.informers.impl.cache.SharedProcessor.lambda$distribute$0(SharedProcessor.java:92)
	at io.fabric8.kubernetes.client.informers.impl.cache.SharedProcessor.lambda$distribute$1(SharedProcessor.java:115)
	at io.fabric8.kubernetes.client.utils.internal.SerialExecutor.lambda$execute$0(SerialExecutor.java:57)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)

I verified this behavior with both 5.0.1 and 5.0.2. I believe is this caused by a data race between the two points below.

Write originalResource.getMetadata().setResourceVersion(null):

originalResource.getMetadata().setResourceVersion(null);
resource.getMetadata().setResourceVersion(null);
try {
if (useSSA) {
var managedFields = resource.getMetadata().getManagedFields();
try {
resource.getMetadata().setManagedFields(null);
var res = resource(resource);
return res.subresource("status").patch(new PatchContext.Builder()
.withFieldManager(fieldManager)
.withForce(true)
.withPatchType(PatchType.SERVER_SIDE_APPLY)
.build());
} finally {
resource.getMetadata().setManagedFields(managedFields);
}
} else {
var res = resource(originalResource);
return res.editStatus(r -> resource);
}
} finally {
// restore initial resource version
originalResource.getMetadata().setResourceVersion(resourceVersion);

Read resource.getMetadata().getResourceVersion():

MDC.put(RESOURCE_VERSION, resource.getMetadata().getResourceVersion());

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions