Closed
Description
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