Skip to content

Error deleting a custom resources #2679

Closed
@jalonsomagnolia

Description

@jalonsomagnolia

Bug Report

After upgrading to the java-operator-sdk 5.0, we have the following error when we try to delete a custom resource:

09:43:21 ERROR [io.ja.op.pr.ev.EventProcessor] (ReconcilerExecutor-subscriptionreconciler-46) Error during event processing ExecutionScope{ resource id: ResourceID{name='postman', namespace='paas-admin-api'}, version: 861762903}: io.javaoperatorsdk.operator.OperatorException: io.javaoperatorsdk.operator.OperatorException: java.lang.UnsupportedOperationException: Implement this
	at io.javaoperatorsdk.operator.processing.Controller.cleanup(Controller.java:216)
	at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.handleCleanup(ReconciliationDispatcher.java:245)
	at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.handleDispatch(ReconciliationDispatcher.java:91)
	at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.handleExecution(ReconciliationDispatcher.java:66)
	at io.javaoperatorsdk.operator.processing.event.EventProcessor$ReconcilerExecutor.run(EventProcessor.java:444)
	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)
Caused by: io.javaoperatorsdk.operator.OperatorException: java.lang.UnsupportedOperationException: Implement this
	at io.javaoperatorsdk.operator.monitoring.micrometer.MicrometerMetrics.lambda$timeControllerExecution$0(MicrometerMetrics.java:151)
	at io.micrometer.core.instrument.composite.CompositeTimer.record(CompositeTimer.java:69)
	at io.javaoperatorsdk.operator.monitoring.micrometer.MicrometerMetrics.timeControllerExecution(MicrometerMetrics.java:147)
	at io.javaoperatorsdk.operator.processing.Controller.cleanup(Controller.java:164)
	... 7 more
Caused by: java.lang.UnsupportedOperationException: Implement this
	at io.javaoperatorsdk.operator.processing.dependent.workflow.Workflow.cleanup(Workflow.java:20)
	at io.javaoperatorsdk.operator.processing.Controller$2.execute(Controller.java:199)
	at io.javaoperatorsdk.operator.processing.Controller$2.execute(Controller.java:165)
	at io.javaoperatorsdk.operator.monitoring.micrometer.MicrometerMetrics.lambda$timeControllerExecution$0(MicrometerMetrics.java:149)
	... 10 more

Everything worked fine before moving to 5.0.

Our controller is configured with something like this:

@Slf4j
@RequiredArgsConstructor
@ControllerConfiguration(
    informer = @Informer(
        namespaces = WATCH_ALL_NAMESPACES,
    ),
    generationAwareEventProcessing = false
)
public class SubscriptionReconciler implements Reconciler<K8Subscription>, Cleaner<K8Subscription> {

       //// more code here

      @Override
    public DeleteControl cleanup(K8Subscription subscription, Context<K8Subscription> context) {
        log.info("cleanup {}", subscription);
   }
}

The code fails before calling our cleanup.

Checking the controller code, where the error is being thrown, I can see

// The cleanup is called also when explicit invocation is true, but the cleaner is not
              // implemented
              if (managedWorkflow.hasCleaner() || !explicitWorkflowInvocation) {
                workflowCleanupResult = managedWorkflow.cleanup(resource, context);
              }

Shouldn't be insteadif (managedWorkflow.hasCleaner() || explicitWorkflowInvocation) { (so only when explicitWorkflowInvocation = true). By default @Workflow has explicitWorkflowInvocation = false, so I understand that unless you want to implement a workflow, this code shouldn't be called.

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