From ab7c01f982a3d34097e6b66716f0d2e8fa3897c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Sat, 9 Mar 2024 12:59:55 +0100 Subject: [PATCH 01/13] improve: use fixed thread pool explicitly (#2265) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../api/config/ConfigurationService.java | 32 ++++++++++++------- .../config/ConfigurationServiceOverrider.java | 8 +++++ .../api/config/ExecutorServiceManager.java | 10 ------ .../processing/event/EventProcessorTest.java | 1 - 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java index 53bfc75df9..92859421eb 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java @@ -4,6 +4,7 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.function.Consumer; import org.slf4j.Logger; @@ -24,8 +25,6 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; import io.javaoperatorsdk.operator.processing.dependent.workflow.ManagedWorkflowFactory; -import static io.javaoperatorsdk.operator.api.config.ExecutorServiceManager.newThreadPoolExecutor; - /** An interface from which to retrieve configuration information. */ public interface ConfigurationService { @@ -127,14 +126,18 @@ default boolean checkCRDAndValidateLocalModel() { return false; } - int DEFAULT_RECONCILIATION_THREADS_NUMBER = 200; + int DEFAULT_RECONCILIATION_THREADS_NUMBER = 50; + /** + * @deprecated Not used anymore in the default implementation + */ + @Deprecated(forRemoval = true) int MIN_DEFAULT_RECONCILIATION_THREADS_NUMBER = 10; /** - * The maximum number of threads the operator can spin out to dispatch reconciliation requests to - * reconcilers + * The number of threads the operator can spin out to dispatch reconciliation requests to + * reconcilers with the default executors * - * @return the maximum number of concurrent reconciliation threads + * @return the number of concurrent reconciliation threads */ default int concurrentReconciliationThreads() { return DEFAULT_RECONCILIATION_THREADS_NUMBER; @@ -143,17 +146,24 @@ default int concurrentReconciliationThreads() { /** * The minimum number of threads the operator starts in the thread pool for reconciliations. * + * @deprecated not used anymore by default executor implementation * @return the minimum number of concurrent reconciliation threads */ + @Deprecated(forRemoval = true) default int minConcurrentReconciliationThreads() { return MIN_DEFAULT_RECONCILIATION_THREADS_NUMBER; } int DEFAULT_WORKFLOW_EXECUTOR_THREAD_NUMBER = DEFAULT_RECONCILIATION_THREADS_NUMBER; + /** + * @deprecated Not used anymore in the default implementation + */ + @Deprecated(forRemoval = true) int MIN_DEFAULT_WORKFLOW_EXECUTOR_THREAD_NUMBER = MIN_DEFAULT_RECONCILIATION_THREADS_NUMBER; /** - * Retrieves the maximum number of threads the operator can spin out to be used in the workflows. + * Number of threads the operator can spin out to be used in the workflows with the default + * executor. * * @return the maximum number of concurrent workflow threads */ @@ -164,8 +174,10 @@ default int concurrentWorkflowExecutorThreads() { /** * The minimum number of threads the operator starts in the thread pool for workflows. * + * @deprecated not used anymore by default executor implementation * @return the minimum number of concurrent workflow threads */ + @Deprecated(forRemoval = true) default int minConcurrentWorkflowExecutorThreads() { return MIN_DEFAULT_WORKFLOW_EXECUTOR_THREAD_NUMBER; } @@ -191,13 +203,11 @@ default Metrics getMetrics() { } default ExecutorService getExecutorService() { - return newThreadPoolExecutor(minConcurrentReconciliationThreads(), - concurrentReconciliationThreads()); + return Executors.newFixedThreadPool(concurrentReconciliationThreads()); } default ExecutorService getWorkflowExecutorService() { - return newThreadPoolExecutor(minConcurrentWorkflowExecutorThreads(), - concurrentWorkflowExecutorThreads()); + return Executors.newFixedThreadPool(concurrentWorkflowExecutorThreads()); } default boolean closeClientOnStop() { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java index 5879383464..12a8a5c699 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java @@ -218,13 +218,21 @@ public int concurrentWorkflowExecutorThreads() { original.concurrentWorkflowExecutorThreads()); } + /** + * @deprecated Not used anymore in the default implementation + */ + @Deprecated(forRemoval = true) @Override public int minConcurrentReconciliationThreads() { return minConcurrentReconciliationThreads != null ? minConcurrentReconciliationThreads : original.minConcurrentReconciliationThreads(); } + /** + * @deprecated Not used anymore in the default implementation + */ @Override + @Deprecated(forRemoval = true) public int minConcurrentWorkflowExecutorThreads() { return minConcurrentWorkflowExecutorThreads != null ? minConcurrentWorkflowExecutorThreads : original.minConcurrentWorkflowExecutorThreads(); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ExecutorServiceManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ExecutorServiceManager.java index 3ea05e7e0d..112ab7188a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ExecutorServiceManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ExecutorServiceManager.java @@ -8,8 +8,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; -import java.util.concurrent.LinkedBlockingDeque; -import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.Function; @@ -35,14 +33,6 @@ public class ExecutorServiceManager { start(configurationService); } - public static ExecutorService newThreadPoolExecutor(int minThreads, int maxThreads) { - minThreads = Utils.ensureValid(minThreads, "minimum number of threads", MIN_THREAD_NUMBER); - maxThreads = Utils.ensureValid(maxThreads, "maximum number of threads", minThreads + 1); - - return new ThreadPoolExecutor(minThreads, maxThreads, 1, TimeUnit.MINUTES, - new LinkedBlockingDeque<>()); - } - /** * Uses cachingExecutorService from this manager. Use this only for tasks, that don't have dynamic * nature, in sense that won't grow with the number of inputs (thus kubernetes resources) diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java index 9d538713c1..93e58a55c6 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java @@ -434,7 +434,6 @@ void executionOfReconciliationShouldNotStartIfProcessorStopped() throws Interrup new BaseConfigurationService(), o -> { o.withConcurrentReconciliationThreads(1); - o.withMinConcurrentReconciliationThreads(1); }); eventProcessor = spy(new EventProcessor(controllerConfiguration(null, rateLimiterMock, configurationService), From 15ff8b54480545eac30726b56140c41224b2ad86 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 08:34:23 +0100 Subject: [PATCH 02/13] chore(deps): bump log4j.version from 2.23.0 to 2.23.1 (#2276) Bumps `log4j.version` from 2.23.0 to 2.23.1. Updates `org.apache.logging.log4j:log4j-slf4j-impl` from 2.23.0 to 2.23.1 Updates `org.apache.logging.log4j:log4j-core` from 2.23.0 to 2.23.1 Updates `org.apache.logging.log4j:log4j2-core` from 2.23.0 to 2.23.1 --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-slf4j-impl dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.apache.logging.log4j:log4j2-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c23fb0b3c6..31e02083c1 100644 --- a/pom.xml +++ b/pom.xml @@ -46,7 +46,7 @@ 5.10.1 6.10.0 1.7.36 - 2.23.0 + 2.23.1 5.11.0 3.14.0 0.21.0 From 30cc18a1831a3a38760472d37dc7ae2af2a90119 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 08:35:10 +0100 Subject: [PATCH 03/13] chore(deps): bump io.github.git-commit-id:git-commit-id-maven-plugin (#2277) Bumps [io.github.git-commit-id:git-commit-id-maven-plugin](https://github.com/git-commit-id/git-commit-id-maven-plugin) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/git-commit-id/git-commit-id-maven-plugin/releases) - [Commits](https://github.com/git-commit-id/git-commit-id-maven-plugin/compare/v8.0.0...v8.0.1) --- updated-dependencies: - dependency-name: io.github.git-commit-id:git-commit-id-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 31e02083c1..7a8e99abe6 100644 --- a/pom.xml +++ b/pom.xml @@ -73,7 +73,7 @@ 1.6.13 3.0.0 3.1.1 - 8.0.0 + 8.0.1 2.23.0 1.0 1.9.0 From e4495f846090f31a2e3ed70ada0239f09da53b4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 09:01:28 +0100 Subject: [PATCH 04/13] chore(deps): bump org.apache.maven.plugins:maven-gpg-plugin (#2282) Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/apache/maven-gpg-plugin/releases) - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.1.0...maven-gpg-plugin-3.2.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-gpg-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- operator-framework-bom/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/operator-framework-bom/pom.xml b/operator-framework-bom/pom.xml index 4367d104d2..a4fb8b6845 100644 --- a/operator-framework-bom/pom.xml +++ b/operator-framework-bom/pom.xml @@ -61,7 +61,7 @@ 1.6.13 - 3.1.0 + 3.2.0 3.3.0 3.6.3 diff --git a/pom.xml b/pom.xml index 7a8e99abe6..6e4f422692 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ 3.3.0 3.3.0 3.3.2 - 3.1.0 + 3.2.0 1.6.13 3.0.0 3.1.1 From 7b2d07893b4d7294c2bddb4db67c4cfb73639076 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 09:01:51 +0100 Subject: [PATCH 05/13] chore(deps): bump io.micrometer:micrometer-core from 1.12.3 to 1.12.4 (#2281) Bumps [io.micrometer:micrometer-core](https://github.com/micrometer-metrics/micrometer) from 1.12.3 to 1.12.4. - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.12.3...v1.12.4) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6e4f422692..7039cd6eed 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ 3.25.3 4.2.0 2.7.3 - 1.12.3 + 1.12.4 4.12.0 3.1.8 0.9.6 From 0029b678b1b31c8d1519b372257a0062a1e1a4e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Tue, 12 Mar 2024 09:49:36 +0100 Subject: [PATCH 06/13] improve: remote stale check (#2283) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is already done by Openshift CI Signed-off-by: Attila Mészáros --- .github/workflows/stale-issues-and-prs.yml | 32 ---------------------- 1 file changed, 32 deletions(-) delete mode 100644 .github/workflows/stale-issues-and-prs.yml diff --git a/.github/workflows/stale-issues-and-prs.yml b/.github/workflows/stale-issues-and-prs.yml deleted file mode 100644 index db295a49b6..0000000000 --- a/.github/workflows/stale-issues-and-prs.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: 'Close stale issues and PRs' -on: - workflow_dispatch: - schedule: - - cron: '30 1 * * *' - -jobs: - stale: - runs-on: ubuntu-latest - steps: - - uses: actions/stale@v9 - with: - days-before-issue-stale: 60 - days-before-pr-stale: 60 - days-before-issue-close: 14 - days-before-pr-close: 14 - stale-issue-message: > - This issue is stale because it has been open 60 days with no activity. - Remove stale label or comment or this will be closed in 14 days. - close-issue-message: > - This issue was closed because it has been stalled for 14 days with no activity. - stale-pr-message: > - This PR is stale because it has been open 60 days with no activity. - Remove stale label or comment or this will be closed in 14 days. - close-pr-message: > - This PR was closed because it has been stalled for 10 days with no activity. - stale-issue-label: 'stale' - exempt-issue-labels: 'needs-discussion,help wanted,never stale,feature' - stale-pr-label: 'stale' - exempt-pr-labels: 'never stale' - operations-per-run: 500 - ascending: true \ No newline at end of file From 9674154516e891a5abc416a975b8ee6b6664fe9a Mon Sep 17 00:00:00 2001 From: Chris Laprun Date: Wed, 13 Mar 2024 12:10:09 +0100 Subject: [PATCH 07/13] fix: date parsing after 8.0.0 release of git-commit-id (#2286) Signed-off-by: Chris Laprun --- .../java/io/javaoperatorsdk/operator/api/config/Utils.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java index 19d8a73689..6971de6476 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java @@ -6,7 +6,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.text.SimpleDateFormat; import java.time.Instant; import java.util.Arrays; import java.util.Date; @@ -57,9 +56,7 @@ public static Version loadFromProperties() { try { String time = properties.getProperty("git.build.time"); if (time != null) { - builtTime = - // RFC 822 date is the default format used by git-commit-id-plugin - new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(time); + builtTime = Date.from(Instant.parse(time)); } else { builtTime = Date.from(Instant.EPOCH); } From 9fa2b684cea5a1eb6947afabdcd0a9da5b0ae31e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 13 Mar 2024 16:21:54 +0000 Subject: [PATCH 08/13] Set new SNAPSHOT version into pom files. --- bootstrapper-maven-plugin/pom.xml | 2 +- caffeine-bounded-cache-support/pom.xml | 2 +- micrometer-support/pom.xml | 2 +- operator-framework-bom/pom.xml | 2 +- operator-framework-core/pom.xml | 2 +- operator-framework-junit5/pom.xml | 2 +- operator-framework/pom.xml | 2 +- pom.xml | 2 +- sample-operators/leader-election/pom.xml | 2 +- sample-operators/mysql-schema/pom.xml | 2 +- sample-operators/pom.xml | 2 +- sample-operators/tomcat-operator/pom.xml | 2 +- sample-operators/webpage/pom.xml | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/bootstrapper-maven-plugin/pom.xml b/bootstrapper-maven-plugin/pom.xml index 54eff9484f..203232a79f 100644 --- a/bootstrapper-maven-plugin/pom.xml +++ b/bootstrapper-maven-plugin/pom.xml @@ -5,7 +5,7 @@ java-operator-sdk io.javaoperatorsdk - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT bootstrapper diff --git a/caffeine-bounded-cache-support/pom.xml b/caffeine-bounded-cache-support/pom.xml index dcb293e86d..b3b15ef3c0 100644 --- a/caffeine-bounded-cache-support/pom.xml +++ b/caffeine-bounded-cache-support/pom.xml @@ -5,7 +5,7 @@ java-operator-sdk io.javaoperatorsdk - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT 4.0.0 diff --git a/micrometer-support/pom.xml b/micrometer-support/pom.xml index 0ecfd38d9c..9448f4fb34 100644 --- a/micrometer-support/pom.xml +++ b/micrometer-support/pom.xml @@ -5,7 +5,7 @@ java-operator-sdk io.javaoperatorsdk - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT 4.0.0 diff --git a/operator-framework-bom/pom.xml b/operator-framework-bom/pom.xml index a4fb8b6845..f5b6a7ff9f 100644 --- a/operator-framework-bom/pom.xml +++ b/operator-framework-bom/pom.xml @@ -5,7 +5,7 @@ io.javaoperatorsdk operator-framework-bom - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT Operator SDK - Bill of Materials pom Java SDK for implementing Kubernetes operators diff --git a/operator-framework-core/pom.xml b/operator-framework-core/pom.xml index 9f29d69e28..2f57cdfc88 100644 --- a/operator-framework-core/pom.xml +++ b/operator-framework-core/pom.xml @@ -6,7 +6,7 @@ io.javaoperatorsdk java-operator-sdk - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT ../pom.xml diff --git a/operator-framework-junit5/pom.xml b/operator-framework-junit5/pom.xml index d7ca656556..8e3baddfb9 100644 --- a/operator-framework-junit5/pom.xml +++ b/operator-framework-junit5/pom.xml @@ -5,7 +5,7 @@ java-operator-sdk io.javaoperatorsdk - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT 4.0.0 diff --git a/operator-framework/pom.xml b/operator-framework/pom.xml index e1cad88810..beabd00dce 100644 --- a/operator-framework/pom.xml +++ b/operator-framework/pom.xml @@ -5,7 +5,7 @@ java-operator-sdk io.javaoperatorsdk - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 7039cd6eed..48ff031200 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.javaoperatorsdk java-operator-sdk - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT Operator SDK for Java Java SDK for implementing Kubernetes operators pom diff --git a/sample-operators/leader-election/pom.xml b/sample-operators/leader-election/pom.xml index 648417c8fb..351d31a00c 100644 --- a/sample-operators/leader-election/pom.xml +++ b/sample-operators/leader-election/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk sample-operators - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT sample-leader-election diff --git a/sample-operators/mysql-schema/pom.xml b/sample-operators/mysql-schema/pom.xml index a9b43df1e1..aa27625bd2 100644 --- a/sample-operators/mysql-schema/pom.xml +++ b/sample-operators/mysql-schema/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk sample-operators - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT sample-mysql-schema-operator diff --git a/sample-operators/pom.xml b/sample-operators/pom.xml index e383d1e038..62b8b6f8ed 100644 --- a/sample-operators/pom.xml +++ b/sample-operators/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk java-operator-sdk - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT sample-operators diff --git a/sample-operators/tomcat-operator/pom.xml b/sample-operators/tomcat-operator/pom.xml index 2311d22d57..904d030974 100644 --- a/sample-operators/tomcat-operator/pom.xml +++ b/sample-operators/tomcat-operator/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk sample-operators - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT sample-tomcat-operator diff --git a/sample-operators/webpage/pom.xml b/sample-operators/webpage/pom.xml index 4ba8eb8991..0dca7ed97e 100644 --- a/sample-operators/webpage/pom.xml +++ b/sample-operators/webpage/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk sample-operators - 4.8.1-SNAPSHOT + 4.8.2-SNAPSHOT sample-webpage-operator From 42334830944bb09c2d405c55f19859f4c6ed59d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 07:36:29 +0100 Subject: [PATCH 09/13] chore(deps): bump org.apache.maven.plugins:maven-gpg-plugin (#2294) Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.2.0 to 3.2.1. - [Release notes](https://github.com/apache/maven-gpg-plugin/releases) - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.0...maven-gpg-plugin-3.2.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-gpg-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- operator-framework-bom/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/operator-framework-bom/pom.xml b/operator-framework-bom/pom.xml index f5b6a7ff9f..64d4e47183 100644 --- a/operator-framework-bom/pom.xml +++ b/operator-framework-bom/pom.xml @@ -61,7 +61,7 @@ 1.6.13 - 3.2.0 + 3.2.1 3.3.0 3.6.3 diff --git a/pom.xml b/pom.xml index 48ff031200..ca6720593c 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ 3.3.0 3.3.0 3.3.2 - 3.2.0 + 3.2.1 1.6.13 3.0.0 3.1.1 From 0b17878ca5497d97838faa0bb8754ca61b8bd414 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 08:16:47 +0100 Subject: [PATCH 10/13] chore(deps): bump io.github.git-commit-id:git-commit-id-maven-plugin (#2295) Bumps [io.github.git-commit-id:git-commit-id-maven-plugin](https://github.com/git-commit-id/git-commit-id-maven-plugin) from 8.0.1 to 8.0.2. - [Release notes](https://github.com/git-commit-id/git-commit-id-maven-plugin/releases) - [Commits](https://github.com/git-commit-id/git-commit-id-maven-plugin/compare/v8.0.1...v8.0.2) --- updated-dependencies: - dependency-name: io.github.git-commit-id:git-commit-id-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca6720593c..7f72c869a0 100644 --- a/pom.xml +++ b/pom.xml @@ -73,7 +73,7 @@ 1.6.13 3.0.0 3.1.1 - 8.0.1 + 8.0.2 2.23.0 1.0 1.9.0 From 43b8591d96776e1c7c7ef815d5cb5fb2725ca8e0 Mon Sep 17 00:00:00 2001 From: Steven Hawkins Date: Mon, 25 Mar 2024 04:16:51 -0400 Subject: [PATCH 11/13] fix: ignore server managed fields for SSA matching (#2309) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Steven Hawkins Signed-off-by: Attila Mészáros --- ...BasedGenericKubernetesResourceMatcher.java | 48 ++++++++++--------- ...-managed-fields-additional-controller.yaml | 2 +- .../kubernetes/nginx-deployment.yaml | 1 + 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java index d699ff2822..bcfaa52d1a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java @@ -41,6 +41,10 @@ public class SSABasedGenericKubernetesResourceMatcher { public static final String APPLY_OPERATION = "Apply"; public static final String DOT_KEY = "."; + private static final List IGNORED_METADATA = + Arrays.asList("creationTimestamp", "deletionTimestamp", + "generation", "selfLink", "uid"); + @SuppressWarnings("unchecked") public static SSABasedGenericKubernetesResourceMatcher getInstance() { return INSTANCE; @@ -58,11 +62,10 @@ public static SSABasedGenericKubernetesResourceMatcher context) { - var optionalManagedFieldsEntry = - checkIfFieldManagerExists(actual, context.getControllerConfiguration().fieldManager()); + var optionalManagedFieldsEntry = checkIfFieldManagerExists(actual, + context.getControllerConfiguration().fieldManager()); // If no field is managed by our controller, that means the controller hasn't touched the // resource yet and the resource probably doesn't match the desired state. Not matching here // means that the resource will need to be updated and since this will be done using SSA, the @@ -86,7 +89,8 @@ public boolean matches(R actual, R desired, Context context) { var prunedActual = new HashMap(actualMap.size()); keepOnlyManagedFields(prunedActual, actualMap, - managedFieldsEntry.getFieldsV1().getAdditionalProperties(), objectMapper); + managedFieldsEntry.getFieldsV1().getAdditionalProperties(), + objectMapper); removeIrrelevantValues(desiredMap); @@ -110,9 +114,8 @@ private void sanitizeState(R actual, R desired, Map actualMap) { for (int i = 0; i < claims; i++) { if (desiredStatefulSet.getSpec().getVolumeClaimTemplates().get(i).getSpec() .getVolumeMode() == null) { - Optional - .ofNullable(GenericKubernetesResource.get(actualMap, "spec", "volumeClaimTemplates", - i, "spec")) + Optional.ofNullable( + GenericKubernetesResource.get(actualMap, "spec", "volumeClaimTemplates", i, "spec")) .map(Map.class::cast).ifPresent(m -> m.remove("volumeMode")); } if (desiredStatefulSet.getSpec().getVolumeClaimTemplates().get(i).getStatus() == null) { @@ -131,6 +134,7 @@ private static void removeIrrelevantValues(Map desiredMap) { var metadata = (Map) desiredMap.get(METADATA_KEY); metadata.remove(NAME_KEY); metadata.remove(NAMESPACE_KEY); + IGNORED_METADATA.forEach(metadata::remove); if (metadata.isEmpty()) { desiredMap.remove(METADATA_KEY); } @@ -163,7 +167,8 @@ private static void keepOnlyManagedFields(Map result, } else { // basically if we should traverse further fillResultsAndTraverseFurther(result, actualMap, managedFields, objectMapper, key, - keyInActual, managedFieldValue); + keyInActual, + managedFieldValue); } } else { // this should handle the case when the value is complex in the actual map (not just a @@ -181,8 +186,9 @@ private static void keepOnlyManagedFields(Map result, @SuppressWarnings("unchecked") private static void fillResultsAndTraverseFurther(Map result, - Map actualMap, Map managedFields, - KubernetesSerialization objectMapper, String key, String keyInActual, + Map actualMap, + Map managedFields, KubernetesSerialization objectMapper, String key, + String keyInActual, Object managedFieldValue) { var emptyMapValue = new HashMap(); result.put(keyInActual, emptyMapValue); @@ -223,8 +229,9 @@ private static void handleListKeyEntrySet(Map result, if (DOT_KEY.equals(listEntry.getKey())) { continue; } - var actualListEntry = selectListEntryBasedOnKey(keyWithoutPrefix(listEntry.getKey()), - actualValueList, objectMapper); + var actualListEntry = + selectListEntryBasedOnKey(keyWithoutPrefix(listEntry.getKey()), actualValueList, + objectMapper); targetValuesByIndex.put(actualListEntry.getKey(), actualListEntry.getValue()); managedEntryByIndex.put(actualListEntry.getKey(), (Map) listEntry.getValue()); } @@ -301,8 +308,7 @@ private static boolean isKeyPrefixedSkippingDotKey(Set @SuppressWarnings("unchecked") private static java.util.Map.Entry> selectListEntryBasedOnKey( String key, - List> values, - KubernetesSerialization objectMapper) { + List> values, KubernetesSerialization objectMapper) { Map ids = objectMapper.unmarshal(key, Map.class); List> possibleTargets = new ArrayList<>(1); int index = -1; @@ -314,9 +320,8 @@ private static java.util.Map.Entry> selectListEntry } } if (possibleTargets.isEmpty()) { - throw new IllegalStateException( - "Cannot find list element for key:" + key + ", in map: " - + values.stream().map(Map::keySet).collect(Collectors.toList())); + throw new IllegalStateException("Cannot find list element for key:" + key + ", in map: " + + values.stream().map(Map::keySet).collect(Collectors.toList())); } if (possibleTargets.size() > 1) { throw new IllegalStateException( @@ -327,7 +332,6 @@ private static java.util.Map.Entry> selectListEntry return new AbstractMap.SimpleEntry<>(finalIndex, possibleTargets.get(0)); } - private Optional checkIfFieldManagerExists(R actual, String fieldManager) { var targetManagedFields = actual.getMetadata().getManagedFields().stream() // Only the apply operations are interesting for us since those were created properly be SSA @@ -338,14 +342,14 @@ private Optional checkIfFieldManagerExists(R actual, String .collect(Collectors.toList()); if (targetManagedFields.isEmpty()) { log.debug("No field manager exists for resource {} with name: {} and operation Apply ", - actual.getKind(), actual.getMetadata().getName()); + actual.getKind(), + actual.getMetadata().getName()); return Optional.empty(); } // this should not happen in theory if (targetManagedFields.size() > 1) { - throw new OperatorException( - "More than one field manager exists with name: " + fieldManager + "in resource: " + - actual.getKind() + " with name: " + actual.getMetadata().getName()); + throw new OperatorException("More than one field manager exists with name: " + fieldManager + + "in resource: " + actual.getKind() + " with name: " + actual.getMetadata().getName()); } return Optional.of(targetManagedFields.get(0)); } diff --git a/operator-framework-core/src/test/resources/io/javaoperatorsdk/operator/processing/dependent/kubernetes/deployment-with-managed-fields-additional-controller.yaml b/operator-framework-core/src/test/resources/io/javaoperatorsdk/operator/processing/dependent/kubernetes/deployment-with-managed-fields-additional-controller.yaml index 5e0be88433..d82b5c8933 100644 --- a/operator-framework-core/src/test/resources/io/javaoperatorsdk/operator/processing/dependent/kubernetes/deployment-with-managed-fields-additional-controller.yaml +++ b/operator-framework-core/src/test/resources/io/javaoperatorsdk/operator/processing/dependent/kubernetes/deployment-with-managed-fields-additional-controller.yaml @@ -4,7 +4,7 @@ metadata: annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: "2023-06-01T08:43:47Z" - generation: 1 + generation: 2 managedFields: - apiVersion: apps/v1 fieldsType: FieldsV1 diff --git a/operator-framework-core/src/test/resources/io/javaoperatorsdk/operator/processing/dependent/kubernetes/nginx-deployment.yaml b/operator-framework-core/src/test/resources/io/javaoperatorsdk/operator/processing/dependent/kubernetes/nginx-deployment.yaml index dcf90a8fc7..5478ac1747 100644 --- a/operator-framework-core/src/test/resources/io/javaoperatorsdk/operator/processing/dependent/kubernetes/nginx-deployment.yaml +++ b/operator-framework-core/src/test/resources/io/javaoperatorsdk/operator/processing/dependent/kubernetes/nginx-deployment.yaml @@ -2,6 +2,7 @@ apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: "test" + generation: 1 spec: progressDeadlineSeconds: 600 revisionHistoryLimit: 10 From 89acf8d1bb2413e70f56aff8f824af2a15a2a184 Mon Sep 17 00:00:00 2001 From: Chris Laprun Date: Mon, 25 Mar 2024 11:04:45 +0100 Subject: [PATCH 12/13] feat: handle clustered resource on secondary to primary mapper init Fixes #2311 Signed-off-by: Chris Laprun --- .../operator/api/config/Utils.java | 24 +++++++++++------ .../KubernetesDependentResource.java | 26 +++++++++++++------ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java index 6971de6476..84f76d9883 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java @@ -119,9 +119,13 @@ static boolean getBooleanFromSystemPropsOrDefault(String propertyName, boolean d } public static Class getFirstTypeArgumentFromExtendedClass(Class clazz) { + return getTypeArgumentFromExtendedClassByIndex(clazz, 0); + } + + public static Class getTypeArgumentFromExtendedClassByIndex(Class clazz, int index) { try { Type type = clazz.getGenericSuperclass(); - return (Class) ((ParameterizedType) type).getActualTypeArguments()[0]; + return (Class) ((ParameterizedType) type).getActualTypeArguments()[index]; } catch (Exception e) { throw new RuntimeException(GENERIC_PARAMETER_TYPE_ERROR_PREFIX + clazz.getSimpleName() @@ -190,27 +194,31 @@ private static Optional> extractType(Class clazz, public static Class getFirstTypeArgumentFromSuperClassOrInterface(Class clazz, Class expectedImplementedInterface) { + return getTypeArgumentFromSuperClassOrInterfaceByIndex(clazz, expectedImplementedInterface, 0); + } + + public static Class getTypeArgumentFromSuperClassOrInterfaceByIndex(Class clazz, + Class expectedImplementedInterface, int index) { // first check super class if it exists try { final Class superclass = clazz.getSuperclass(); if (!superclass.equals(Object.class)) { try { - return getFirstTypeArgumentFromExtendedClass(clazz); + return getTypeArgumentFromExtendedClassByIndex(clazz, index); } catch (Exception e) { // try interfaces try { - return getFirstTypeArgumentFromInterface(clazz, expectedImplementedInterface); + return getTypeArgumentFromInterfaceByIndex(clazz, expectedImplementedInterface, index); } catch (Exception ex) { // try on the parent - return getFirstTypeArgumentFromSuperClassOrInterface(superclass, - expectedImplementedInterface); + return getTypeArgumentFromSuperClassOrInterfaceByIndex(superclass, + expectedImplementedInterface, index); } } } - return getFirstTypeArgumentFromInterface(clazz, expectedImplementedInterface); + return getTypeArgumentFromInterfaceByIndex(clazz, expectedImplementedInterface, index); } catch (Exception e) { - throw new OperatorException( - GENERIC_PARAMETER_TYPE_ERROR_PREFIX + clazz.getSimpleName(), e); + throw new OperatorException(GENERIC_PARAMETER_TYPE_ERROR_PREFIX + clazz.getSimpleName(), e); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java index b804b88a30..9da16aaf9a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java @@ -8,15 +8,18 @@ import org.slf4j.LoggerFactory; import io.fabric8.kubernetes.api.model.HasMetadata; +import io.fabric8.kubernetes.api.model.Namespaced; import io.fabric8.kubernetes.client.dsl.Resource; import io.javaoperatorsdk.operator.OperatorException; import io.javaoperatorsdk.operator.ReconcilerUtils; +import io.javaoperatorsdk.operator.api.config.Utils; import io.javaoperatorsdk.operator.api.config.dependent.Configured; import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.Constants; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext; import io.javaoperatorsdk.operator.api.reconciler.Ignore; +import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected; import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.DependentResourceConfigurator; import io.javaoperatorsdk.operator.processing.dependent.AbstractEventSourceHolderDependentResource; @@ -35,20 +38,27 @@ public abstract class KubernetesDependentResource> { private static final Logger log = LoggerFactory.getLogger(KubernetesDependentResource.class); - private final ResourceUpdaterMatcher updaterMatcher; private final boolean garbageCollected = this instanceof GarbageCollected; + private final boolean usingCustomResourceUpdateMatcher = this instanceof ResourceUpdaterMatcher; + @SuppressWarnings("unchecked") + private final ResourceUpdaterMatcher updaterMatcher = usingCustomResourceUpdateMatcher + ? (ResourceUpdaterMatcher) this + : GenericResourceUpdaterMatcher.updaterMatcherFor(resourceType()); + private final boolean clustered; private KubernetesDependentResourceConfig kubernetesDependentResourceConfig; - private final boolean usingCustomResourceUpdateMatcher; - @SuppressWarnings("unchecked") public KubernetesDependentResource(Class resourceType) { super(resourceType); + final var primaryResourceType = + Utils.getTypeArgumentFromSuperClassOrInterfaceByIndex(getClass(), DependentResource.class, + 1); + clustered = !Namespaced.class.isAssignableFrom(primaryResourceType); + } - usingCustomResourceUpdateMatcher = this instanceof ResourceUpdaterMatcher; - updaterMatcher = usingCustomResourceUpdateMatcher - ? (ResourceUpdaterMatcher) this - : GenericResourceUpdaterMatcher.updaterMatcherFor(resourceType); + protected KubernetesDependentResource(Class resourceType, boolean primaryIsClustered) { + super(resourceType); + clustered = primaryIsClustered; } @SuppressWarnings("unchecked") @@ -87,7 +97,7 @@ private SecondaryToPrimaryMapper getSecondaryToPrimaryMapper() { if (this instanceof SecondaryToPrimaryMapper) { return (SecondaryToPrimaryMapper) this; } else if (garbageCollected) { - return Mappers.fromOwnerReferences(false); + return Mappers.fromOwnerReferences(clustered); } else if (useNonOwnerRefBasedSecondaryToPrimaryMapping()) { return Mappers.fromDefaultAnnotations(); } else { From eab3bf084c7482ee4f1748e02f3af28cd28470de Mon Sep 17 00:00:00 2001 From: Chris Laprun Date: Mon, 25 Mar 2024 20:20:46 +0100 Subject: [PATCH 13/13] fix: make primary type computation overridable Overriding getPrimaryResourceType should allow to make things work even in deeper hierarchies. Signed-off-by: Chris Laprun --- .../GenericKubernetesDependentResource.java | 10 +++++++++- .../kubernetes/KubernetesDependentResource.java | 14 ++++++++------ .../workflow/AbstractWorkflowExecutorTest.java | 5 +++++ .../ConfigMapDeleterBulkDependentResource.java | 5 +++++ .../dependent/BaseDependentResource.java | 5 +++++ 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java index 98f2346577..9897ee71e2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java @@ -2,13 +2,14 @@ import io.fabric8.kubernetes.api.model.GenericKubernetesResource; import io.fabric8.kubernetes.api.model.HasMetadata; +import io.javaoperatorsdk.operator.api.config.Utils; import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; import io.javaoperatorsdk.operator.processing.GroupVersionKind; public class GenericKubernetesDependentResource

extends KubernetesDependentResource { - private GroupVersionKind groupVersionKind; + private final GroupVersionKind groupVersionKind; public GenericKubernetesDependentResource(GroupVersionKind groupVersionKind) { super(GenericKubernetesResource.class); @@ -19,6 +20,13 @@ protected InformerConfiguration.InformerConfigurationBuilder getPrimaryResourceType() { + return (Class

) Utils.getFirstTypeArgumentFromExtendedClass(getClass()); + } + + @SuppressWarnings("unused") public GroupVersionKind getGroupVersionKind() { return groupVersionKind; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java index 9da16aaf9a..80ed55a5ed 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java @@ -35,8 +35,8 @@ converter = KubernetesDependentConverter.class) public abstract class KubernetesDependentResource extends AbstractEventSourceHolderDependentResource> - implements DependentResourceConfigurator> { - + implements DependentResourceConfigurator>, + DependentResource { private static final Logger log = LoggerFactory.getLogger(KubernetesDependentResource.class); private final boolean garbageCollected = this instanceof GarbageCollected; private final boolean usingCustomResourceUpdateMatcher = this instanceof ResourceUpdaterMatcher; @@ -47,12 +47,9 @@ public abstract class KubernetesDependentResource kubernetesDependentResourceConfig; - public KubernetesDependentResource(Class resourceType) { super(resourceType); - final var primaryResourceType = - Utils.getTypeArgumentFromSuperClassOrInterfaceByIndex(getClass(), DependentResource.class, - 1); + final var primaryResourceType = getPrimaryResourceType(); clustered = !Namespaced.class.isAssignableFrom(primaryResourceType); } @@ -61,6 +58,11 @@ protected KubernetesDependentResource(Class resourceType, boolean primaryIsCl clustered = primaryIsClustered; } + @SuppressWarnings("unchecked") + protected Class

getPrimaryResourceType() { + return (Class

) Utils.getTypeArgumentFromExtendedClassByIndex(getClass(), 1); + } + @SuppressWarnings("unchecked") @Override public void configureWith(KubernetesDependentResourceConfig config) { diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java index 941c3fa434..0bde1620d8 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java @@ -42,6 +42,11 @@ public TestDependent(String name) { this.name = name; } + @Override + protected Class getPrimaryResourceType() { + return TestCustomResource.class; + } + @Override public ReconcileResult reconcile(TestCustomResource primary, Context context) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/ConfigMapDeleterBulkDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/ConfigMapDeleterBulkDependentResource.java index 29a9af89e7..cc3b150104 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/ConfigMapDeleterBulkDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/ConfigMapDeleterBulkDependentResource.java @@ -34,6 +34,11 @@ public ConfigMapDeleterBulkDependentResource() { super(ConfigMap.class); } + @Override + protected Class getPrimaryResourceType() { + return BulkDependentTestCustomResource.class; + } + @Override public Map desiredResources(BulkDependentTestCustomResource primary, Context context) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/BaseDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/BaseDependentResource.java index 08e7e5fe2e..eee439cbfe 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/BaseDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/BaseDependentResource.java @@ -16,6 +16,11 @@ public BaseDependentResource(Class resourceType, String component) { this.component = component; } + @Override + protected Class getPrimaryResourceType() { + return ComplexDependentCustomResource.class; + } + protected String name(ComplexDependentCustomResource primary) { return String.format("%s-%s", component, primary.getSpec().getProjectId()); }