Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bumping to Quarkus 3.18.x or 3.19.x causes exception of "Couldn't instantiate DependentResource" #1059

Closed
gonmmarques opened this issue Mar 7, 2025 · 6 comments · Fixed by #1064
Assignees

Comments

@gonmmarques
Copy link

gonmmarques commented Mar 7, 2025

For context, i'm currently running Quarkus 3.17.8 and Kotlin 2.0.21. Also using Quarkus Operator SDK (version defined via the Quarkus Platform).

I have a Reconciler with a DependentResource, and that DependentResource has a dependency that is being injected by Quarkus:

@ControllerConfiguration(
    dependents = [
        Dependent(
            type = MyDR::class
        )
    ],
)
class UserReconciler(
    private val dep: Dependency,
) : Reconciler<User>
@KubernetesDependent
@Singleton
class MyDR(
    private val dep: Dependency,
) : CRUDKubernetesDependentResource<RoleBinding, User>(RoleBinding::class.java),
    BulkDependentResource<RoleBinding, User> {

This works and has been working.

Now when upgrading to Quarkus 3.18.x or even 3.19.x (for simplification I'm using 3.19.1), I have done all the needed changes for JOSDK v5 (in the example above, use the @Workflow annotation to declare a dependent resource for example) and it is failing to start with:

2025-03-07 09:15:30,485 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step io.quarkiverse.operatorsdk.deployment.QuarkusControllerConfigurationBuildStep#createControllerConfigurations threw an exception: io.javaoperatorsdk.operator.OperatorException: Couldn't instantiate DependentResource 'org.example.MyDR'.
at io.javaoperatorsdk.operator.api.config.Utils.instantiateAndConfigureIfNeeded(Utils.java:238)
at io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResourceFactory.associatedResourceType(DependentResourceFactory.java:32)
at io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentConverter.createInformerConfig(KubernetesDependentConverter.java:47)
at io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentConverter.configFrom(KubernetesDependentConverter.java:30)
at io.quarkiverse.operatorsdk.deployment.QuarkusControllerConfigurationBuildStep$1.configFrom(QuarkusControllerConfigurationBuildStep.java:68)
at io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentConverter.configFrom(KubernetesDependentConverter.java:12)
at io.javaoperatorsdk.operator.api.config.dependent.DependentResourceConfigurationResolver.configureSpecFromConfigured(DependentResourceConfigurationResolver.java:57)
at io.quarkiverse.operatorsdk.deployment.QuarkusControllerConfigurationBuildStep.createDependentResourceSpec(QuarkusControllerConfigurationBuildStep.java:483)
at io.quarkiverse.operatorsdk.deployment.QuarkusControllerConfigurationBuildStep.lambda$initializeWorkflowIfNeeded$13(QuarkusControllerConfigurationBuildStep.java:317)
at java.base/java.util.LinkedHashMap$LinkedValues.forEach(LinkedHashMap.java:833)
at io.quarkiverse.operatorsdk.deployment.QuarkusControllerConfigurationBuildStep.initializeWorkflowIfNeeded(QuarkusControllerConfigurationBuildStep.java:316)
at io.quarkiverse.operatorsdk.deployment.QuarkusControllerConfigurationBuildStep.createConfiguration(QuarkusControllerConfigurationBuildStep.java:299)
at io.quarkiverse.operatorsdk.deployment.QuarkusControllerConfigurationBuildStep.lambda$createControllerConfigurations$3(QuarkusControllerConfigurationBuildStep.java:121)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1787)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at io.quarkiverse.operatorsdk.deployment.QuarkusControllerConfigurationBuildStep.createControllerConfigurations(QuarkusControllerConfigurationBuildStep.java:132)
at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:733)
at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:856)
at io.quarkus.builder.BuildContext.run(BuildContext.java:255)
at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)
at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)
at java.base/java.lang.Thread.run(Thread.java:1583)
at org.jboss.threads.JBossThread.run(JBossThread.java:499)
Caused by: java.lang.IllegalStateException: Couldn't find a no-arg constructor for org.example.MyDR
at io.javaoperatorsdk.operator.api.config.Utils.getConstructor(Utils.java:248)
at io.javaoperatorsdk.operator.api.config.Utils.instantiateAndConfigureIfNeeded(Utils.java:227)
... 30 more
Caused by: java.lang.NoSuchMethodException: org.example.MyDR.()
at java.base/java.lang.Class.getConstructor0(Class.java:3761)
at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2930)
at io.javaoperatorsdk.operator.api.config.Utils.getConstructor(Utils.java:245)
... 31 more

Thanks in advance.

@metacosm metacosm self-assigned this Mar 7, 2025
@metacosm
Copy link
Member

This seems like a bug, indeed. Investigating. Thank you for the report and the information!

@metacosm
Copy link
Member

metacosm commented Mar 13, 2025

It should be addressed with #1064. If you get a change to try it out, let me know if it works and I will cut a new release.

@gonmmarques
Copy link
Author

gonmmarques commented Mar 13, 2025

Hey @metacosm

Thanks for the quick feedback. Sure I can try it out, is there a snapshot/R.C version artifact published that I can use to test?

@metacosm
Copy link
Member

OK, I will merge then so that a snapshot can be deployed.

@metacosm
Copy link
Member

The snapshot version can be found at: https://s01.oss.sonatype.org/content/repositories/snapshots/io/quarkiverse/operatorsdk/
(7.1.1-SNAPSHOT)

@gonmmarques
Copy link
Author

Hello again @metacosm

Yes, it seems to be all good now. Thanks a lot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants