Can not find candidate version of extension
When trying to create a cluster that uses a bunch of extensions, the Web Console reports an error:
Which points to nowhere in the docs:
Upon inspecting the HTTP calls to the REST API:
Request:
{"metadata":{"name":"kart","namespace":"demo"},"spec":{"postgresVersion":"latest","instances":"2","sgInstanceProfile":"size-small","pods":{"persistentVolume":{"size":"3Gi","storageClass":"gp2"},"disableConnectionPooling":false,"disableMetricsExporter":false,"disablePostgresUtil":false},"configurations":{"sgPostgresConfig":"pgconfig1"},"distributedLogs":{"sgDistributedLogs":"dsds"},"prometheusAutobind":true,"postgresServices":{"primary":{"enabled":true,"type":"ClusterIP","annotations":{}},"replicas":{"enabled":true,"type":"ClusterIP","annotations":{}}},"postgresExtensions":[{"name":"adminpack","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"btree_gist","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"btree_gin","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"citext","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"cube","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"dblink","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"dict_int","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"hstore","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"hstore_plpython3u","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"intagg","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"intarray","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"isn","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"jsonb_plperl","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"ltree","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"lo","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"pg_buffercache","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"pg_healpix","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"pg_prewarm","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"pg_stat_statements","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"pgbouncer_fdw","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"pgcrypto","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"plperl","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"pltcl","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"postgis","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"postgis_raster","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"postgis_tiger_geocoder","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"q3c","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"},{"name":"refint","version":"2.0","publisher":"com.ongres","repository":"https://extensions.stackgres.io/postgres/repository"}]}}
Response:
{"type":"Status","title":null,"detail":"","status":null,"fields":[]}
The operator log reveals clearly the problem:
2021-06-04 21:48:31,727 ERROR [io.st.op.ad.mu.MutationResource] (executor-thread-3) cannot proceed with request 2130dc98-ae3a-4181-bdcf-55853a0e3bc6 cause: Can not find candidate version of extension com.ongres/btree_gist for version 2.0[12/x86_64/linux]: java.lang.IllegalArgumentException: Can not find candidate version of extension com.ongres/btree_gist for version 2.0[12/x86_64/linux]
at io.stackgres.common.extension.ExtensionMetadataManager.lambda$getExtensionCandidateSameMajorBuild$2(ExtensionMetadataManager.java:71)
at java.util.Optional.orElseThrow(Optional.java:408)
at io.stackgres.common.extension.ExtensionMetadataManager.getExtensionCandidateSameMajorBuild(ExtensionMetadataManager.java:69)
at io.stackgres.operator.mutation.cluster.ClusterExtensionMetadataManager_ClientProxy.getExtensionCandidateSameMajorBuild(ClusterExtensionMetadataManager_ClientProxy.zig:226)
at io.stackgres.operator.mutation.cluster.ExtensionsChannelMutator.lambda$mutate$1(ExtensionsChannelMutator.java:61)
at org.jooq.lambda.Unchecked.lambda$consumer$17(Unchecked.java:694)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at org.jooq.lambda.Seq.lambda$zipWithIndex$103(Seq.java:6672)
at java.util.Spliterators$IteratorSpliterator.tryAdvance(Spliterators.java:1812)
at org.jooq.lambda.Seq.lambda$zipWithIndex$104(Seq.java:6671)
at org.jooq.lambda.SeqUtils$1.tryAdvance(SeqUtils.java:58)
at java.util.Spliterator.forEachRemaining(Spliterator.java:326)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
at org.jooq.lambda.SeqImpl.forEach(SeqImpl.java:150)
at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:274)
at java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at io.stackgres.operator.mutation.cluster.ExtensionsChannelMutator.lambda$mutate$2(ExtensionsChannelMutator.java:56)
at java.util.Optional.ifPresent(Optional.java:183)
at io.stackgres.operator.mutation.cluster.ExtensionsChannelMutator.mutate(ExtensionsChannelMutator.java:50)
at io.stackgres.operator.mutation.cluster.ExtensionsChannelMutator.mutate(ExtensionsChannelMutator.java:31)
at io.stackgres.operator.mutation.cluster.ExtensionsChannelMutator_ClientProxy.mutate(ExtensionsChannelMutator_ClientProxy.zig:327)
at io.stackgres.operator.mutation.cluster.ClusterPipeline.lambda$mutate$0(ClusterPipeline.java:36)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at io.stackgres.operator.mutation.cluster.ClusterPipeline.mutate(ClusterPipeline.java:38)
at io.stackgres.operator.mutation.cluster.ClusterPipeline.mutate(ClusterPipeline.java:21)
at io.stackgres.operator.mutation.cluster.ClusterPipeline_ClientProxy.mutate(ClusterPipeline_ClientProxy.zig:219)
at io.stackgres.operatorframework.admissionwebhook.mutating.MutationResource.mutate(MutationResource.java:47)
at io.stackgres.operator.mutation.ClusterMutationResource.mutate(ClusterMutationResource.java:46)
at java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:170)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:130)
at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:643)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:507)
at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:457)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:459)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:419)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:393)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:68)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:492)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:261)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:161)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:164)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:247)
at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:73)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:138)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.access$000(VertxRequestHandler.java:41)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:93)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
at java.lang.Thread.run(Thread.java:834)
at org.jboss.threads.JBossThread.run(JBossThread.java:501)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)
Removing btree_gist
extension leads to the exact same problem with btree_gin
extension. And then with citext
. Possibly others affected.