operator-framework / operator-framework/java-operator-sdk

Method Reconciler#reconcile is not triggered when resource is deleted.

Offen
#3,621 5 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Java
Sterne
944
Forks
242
Ø Merge
1 T. 4 Std.
Gemergte PRs (30 T.)
43

Beschreibung

Bug Report

I wanted to create metric exporter for certain resource type.
For this I implemented Reconciler with triggerReconcilerOnAllEvents enabled (introducerd in JOSDK 5.2) to receive all events (create, update and delete).

Method Reconciler#reconcile is not triggered when resource is deleted.

What did you do?
@ControllerConfiguration(triggerReconcilerOnAllEvents = true, generationAwareEventProcessing = false)
public class MyResourceReconciler implements Reconciler<MyResource>{

    private static final Logger LOG = Logger.getLogger(MyResourceReconciler.class);

    @Override
    public UpdateControl<MyResource> reconcile(MyResource resource, Context<MyResource> context) throws Exception {
	   LOG.infof("Resource %s/%s event", resource.getMetadata().getNamespace(), resource.getMetadata().getName());
        if(context.isPrimaryResourceDeleted()){
            LOG.infof("deleted");
            return UpdateControl.noUpdate();
        }
        LOG.infof("created/updated");
        return UpdateControl.noUpdate();
    }

}
What did you expect to see?

When I create, update and delete resource I expected to see in logs:

INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-92) Resource mynamespace/myresource event
INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-92) created/updated
INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-93) Resource mynamespace/myresource event
INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-93) created/updated
INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-93) Resource mynamespace/myresource event
INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-93) deleted
What did you see instead? Under which circumstances?

When I create, update and delete resource I see in logs:

INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-92) Resource mynamespace/myresource event
INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-92) created/updated
INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-93) Resource mynamespace/myresource event
INFO  [com.test.MyResourceReconciler] (ReconcilerExecutor-myresourcereconciler-93) created/updated
Environment

Kubernetes cluster type:

OpenShift 4.19.43

$ Mention java-operator-sdk version from pom.xml file

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.quarkus.platform</groupId>
                <artifactId>quarkus-bom</artifactId>
                <version>3.39.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>io.quarkus.platform</groupId>
                <artifactId>quarkus-operator-sdk-bom</artifactId>
                <version>3.39.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependency>
        <groupId>io.quarkiverse.operatorsdk</groupId>
        <artifactId>quarkus-operator-sdk</artifactId>
    </dependency>

resolves to: io.javaoperatorsdk:operator-framework-core:5.5.0

$ java -version

openjdk version "25.0.4.1" 2026-08-18 LTS
OpenJDK Runtime Environment Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS, mixed mode, sharing)

$ kubectl version

Client Version: 4.19.0-202608112108.p2.gb2a93a6.assembly.stream.el9-b2a93a6
Kustomize Version: v5.5.0
Kubernetes Version: v1.32.13

Additional context
  • resources does not have finalizers
  • adding defaultFilters = false to ControllerConfiguration did not helped

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere das Problem mit dem bereitgestellten MyResourceReconciler und der ControllerConfiguration und verfolge anschließend den Ereignisverarbeitungspfad bis zu Reconciler#reconcile für Löschereignisse. Erledigt ist die Aufgabe, wenn eine Löschung eine Reconciliation mit context.isPrimaryResourceDeleted() true auslöst, während das Verhalten bei Erstellung und Aktualisierung unverändert bleibt; füge Tests zur Abdeckung hinzu oder aktualisiere sie, falls die relevanten Tests zur Ereignisverarbeitung gefunden werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java, kubernetes
Bereich
devops, infrastructure
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Aktiv
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.