When any backup secret is not found reconciliation cycle stop working
Summary
When any backup secret of a sgbackupconfig associated to a sgcluster is not found reconciliation cycle stop working for all the sgclusters.
Current Behaviour
Reconciliation cycle stop working for all the sgclusters.
Steps to reproduce
- Create a sgbackupconfig and one or more secret referenced in the sgbackupconfig
- Create an sgcluster referencing the sgbackupconfig
- Create an sgcluster not referencing the sgbackupconfig
- Remove any of the secret created in step 1
Expected Behaviour
Reconciliation cycle stop working for for the sgcluster referencing the sgbackupconfig that reference the removed secret.
Possible Solution
Collect secrets (and in general any other required resource) inside the reconciliation phase of a sgcluster (or sgdistirbutedlogs).
Environment
- StackGres version: 0.9.5
- Kubernetes version: 1.16.15
- Cloud provider or hardware configuration: 8 cores / 16GB RAM
Relevant logs and/or screenshots
2021-04-06 07:32:35,121 ERROR [io.st.op.co.ClusterReconciliationCycle] (Cluster-ReconciliationCycle) Cluster reconciliation cycle loop was interrupted: java.lang.IllegalStateException: Secret operator-backup-api-606c0cdd.test not found
at io.stackgres.operator.controller.ClusterReconciliationCycle.lambda$getSecret$25(ClusterReconciliationCycle.java:479)
at java.base/java.util.Optional.orElseThrow(Optional.java:408)
at io.stackgres.operator.controller.ClusterReconciliationCycle.getSecret(ClusterReconciliationCycle.java:478)
at io.stackgres.operator.controller.ClusterReconciliationCycle.lambda$getBackupSecrets$19(ClusterReconciliationCycle.java:468)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState$0(StreamSpliterators.java:294)
at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.fillBuffer(StreamSpliterators.java:206)
at java.base/java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.doAdvance(StreamSpliterators.java:161)
at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.tryAdvance(StreamSpliterators.java:300)
at java.base/java.util.Spliterators$1Adapter.hasNext(Spliterators.java:681)
at org.jooq.lambda.Seq$1ClassifyingIterator.fetchClassifying(Seq.java:9522)
at org.jooq.lambda.Seq$1ClassifyingIterator.hasNext(Seq.java:9548)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:132)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at org.jooq.lambda.SeqImpl.collect(SeqImpl.java:190)
at io.stackgres.operator.controller.ClusterReconciliationCycle.getBackupSecrets(ClusterReconciliationCycle.java:470)
at io.stackgres.operator.controller.ClusterReconciliationCycle.lambda$getBackupContext$8(ClusterReconciliationCycle.java:348)
at java.base/java.util.Optional.map(Optional.java:265)
at io.stackgres.operator.controller.ClusterReconciliationCycle.getBackupContext(ClusterReconciliationCycle.java:346)
at io.stackgres.operator.controller.ClusterReconciliationCycle.getClusterConfig(ClusterReconciliationCycle.java:257)
at io.stackgres.operator.controller.ClusterReconciliationCycle.mapResourceToContext(ClusterReconciliationCycle.java:248)
at io.stackgres.operator.controller.ClusterReconciliationCycle.mapResourceToContext(ClusterReconciliationCycle.java:93)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at io.stackgres.operator.controller.StackGresReconciliationCycle.getExistingContexts(StackGresReconciliationCycle.java:47)
at io.stackgres.operatorframework.reconciliation.ReconciliationCycle.reconciliationCycle(ReconciliationCycle.java:102)
at io.stackgres.operatorframework.reconciliation.ReconciliationCycle.reconciliationCycleLoop(ReconciliationCycle.java:87)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)