Skip to content

next (v5.6; do not mege) - #3474

Open
csviri wants to merge 12 commits into
mainfrom
next
Open

next (v5.6; do not mege)#3474
csviri wants to merge 12 commits into
mainfrom
next

Conversation

@csviri

@csviri csviri commented Jul 3, 2026

Copy link
Copy Markdown
Collaborator

No description provided.

Copilot AI review requested due to automatic review settings July 3, 2026 06:53
@openshift-ci
openshift-ci Bot requested review from metacosm and xstefank July 3, 2026 06:53

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Maven project/module versions across Java Operator SDK and its submodules, presumably in preparation for the next development cycle.

Changes:

  • Bumped the root project version in pom.xml.
  • Updated all module parent version references to match the new root version.
  • Updated the standalone operator-framework-bom artifact version.

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated 17 comments.

Show a summary per file
File Description
pom.xml Updates root project version used across the multi-module build.
operator-framework-core/pom.xml Aligns module parent version with the root project version.
operator-framework/pom.xml Aligns module parent version with the root project version.
operator-framework-junit/pom.xml Aligns module parent version with the root project version.
operator-framework-bom/pom.xml Updates BOM artifact version to match the intended release line.
micrometer-support/pom.xml Aligns module parent version with the root project version.
caffeine-bounded-cache-support/pom.xml Aligns module parent version with the root project version.
bootstrapper-maven-plugin/pom.xml Aligns module parent version with the root project version.
test-index-processor/pom.xml Aligns module parent version with the root project version.
migration/pom.xml Aligns module parent version with the root project version.
sample-operators/pom.xml Aligns sample parent version with the root project version.
sample-operators/webpage/pom.xml Aligns sample module parent version with the sample reactor version.
sample-operators/tomcat-operator/pom.xml Aligns sample module parent version with the sample reactor version.
sample-operators/operations/pom.xml Aligns sample module parent version with the sample reactor version.
sample-operators/mysql-schema/pom.xml Aligns sample module parent version with the sample reactor version.
sample-operators/leader-election/pom.xml Aligns sample module parent version with the sample reactor version.
sample-operators/controller-namespace-deletion/pom.xml Aligns sample module parent version with the sample reactor version.

Comment thread pom.xml
<groupId>io.javaoperatorsdk</groupId>
<artifactId>java-operator-sdk</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>java-operator-sdk</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>java-operator-sdk</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>java-operator-sdk</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>operator-framework-bom</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>sample-operators</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>sample-operators</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>sample-operators</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>sample-operators</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>sample-operators</artifactId>
<version>5.4.1-SNAPSHOT</version>
<version>999-SNAPSHOT</version>
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jul 18, 2026
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jul 19, 2026
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
Copilot AI review requested due to automatic review settings July 22, 2026 13:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 17 out of 17 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (17)

pom.xml:24

  • The project version was changed to 999-SNAPSHOT, which will publish/build artifacts under an unexpected version and doesn't align with the stated v5.5 line. Revert to the previous snapshot version (or the intended next v5.5.x version).
  <version>999-SNAPSHOT</version>

operator-framework-core/pom.xml:24

  • The parent version was changed to 999-SNAPSHOT, which will make this module resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

operator-framework/pom.xml:24

  • The parent version was changed to 999-SNAPSHOT, which will make this module resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

operator-framework-junit/pom.xml:24

  • The parent version was changed to 999-SNAPSHOT, which will make this module resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

operator-framework-bom/pom.xml:24

  • The BOM version was changed to 999-SNAPSHOT, which will publish an unexpected BOM coordinate/version. Revert to the previous snapshot version (or the intended next v5.5.x version).
  <version>999-SNAPSHOT</version>

migration/pom.xml:24

  • The parent version was changed to 999-SNAPSHOT, which will make this module resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

micrometer-support/pom.xml:24

  • The parent version was changed to 999-SNAPSHOT, which will make this module resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

caffeine-bounded-cache-support/pom.xml:24

  • The parent version was changed to 999-SNAPSHOT, which will make this module resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

bootstrapper-maven-plugin/pom.xml:25

  • The parent version was changed to 999-SNAPSHOT, which will make this plugin resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

test-index-processor/pom.xml:25

  • The parent version was changed to 999-SNAPSHOT, which will make this module resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

sample-operators/pom.xml:25

  • The parent version was changed to 999-SNAPSHOT, which will make the samples aggregator resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

sample-operators/webpage/pom.xml:25

  • The parent version was changed to 999-SNAPSHOT, which will make this sample resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

sample-operators/tomcat-operator/pom.xml:25

  • The parent version was changed to 999-SNAPSHOT, which will make this sample resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

sample-operators/operations/pom.xml:25

  • The parent version was changed to 999-SNAPSHOT, which will make this sample resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

sample-operators/mysql-schema/pom.xml:25

  • The parent version was changed to 999-SNAPSHOT, which will make this sample resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

sample-operators/leader-election/pom.xml:25

  • The parent version was changed to 999-SNAPSHOT, which will make this sample resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

sample-operators/controller-namespace-deletion/pom.xml:25

  • The parent version was changed to 999-SNAPSHOT, which will make this sample resolve against an unexpected parent version. Revert to the previous snapshot version (or the intended next v5.5.x version).
    <version>999-SNAPSHOT</version>

@csviri csviri changed the title next (v5.5; do not mege) next (v5.6; do not mege) Jul 28, 2026
…us (#3480)

Add integration tests that showcases handling explicit state in status. Both for simple managed/secondary resources and using a dependent resource.


Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 29, 2026 07:21

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 28 out of 28 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (3)

pom.xml:24

  • Project version is set to 999-SNAPSHOT, which doesn’t align with the PR title targeting v5.6 and looks like a placeholder version. This will publish artifacts under an unexpected coordinate; set the intended next snapshot version (e.g., 5.6.0-SNAPSHOT) and keep all module parent versions consistent with it.
  <version>999-SNAPSHOT</version>

operator-framework/pom.xml:24

  • Module parent version is set to 999-SNAPSHOT. If the intent is v5.6, this should match the root project version (e.g., 5.6.0-SNAPSHOT) to avoid producing/publishing modules under an unexpected version.
    <version>999-SNAPSHOT</version>

operator-framework-bom/pom.xml:24

  • BOM version is set to 999-SNAPSHOT, which appears to be a placeholder and doesn’t match the PR’s v5.6 intent. Use the intended snapshot version (e.g., 5.6.0-SNAPSHOT) so consumers don’t import an unexpected BOM version.
  <version>999-SNAPSHOT</version>

* feat: pool informers so controllers and event sources can share them

Every InformerEventSource used to create its own SharedIndexInformer, so an
operator whose controllers all watch the same secondary type - ConfigMap and
Secret being the usual suspects - opened one watch connection and kept one cache
per controller for the very same resources.

Informers are now handed out by an InformerPool obtained from the
ConfigurationService, keyed by an InformerClassifier. Event sources whose
classifiers are equal are backed by one informer; the pool reference counts its
users and stops the informer once the last one releases it. The classifier is
made up of everything that decides what an informer watches and how: the
KubernetesClient instance (compared by identity, since two clients for the same
API server may still differ in credentials, impersonation or TLS material), the
resource class or the group/version/kind for generic resources, the namespace,
the label, field and shard selectors, and the item store.

Two components are deliberately not part of that identity. The informerListLimit
is excluded, so event sources that disagree only on it still share an informer,
keeping the limit of whichever one created it and logging a warning. Indexers are
excluded because they can be added to a running informer: they are registered
under a name qualified with the controller and event source that added them, so
index names stay private to an event source while callers keep using their own
names, and they are removed again when that event source releases the informer.

Two strategies ship: DefaultInformerPool shares as described and is the default,
NonSharingInformerPool creates a dedicated informer per event source for anyone
wanting to opt out. Either is selected with
ConfigurationServiceOverrider#withInformerPool, and a custom strategy extends
AbstractInformerPool, which already creates the informers from a classifier,
starts them and waits for their caches to sync, leaving the subclass only the
question of whether and when an informer is shared.

Consequently informer creation and startup moved out of InformerWrapper and
InformerManager into the pool, InformerManager acquires and releases informers
instead of owning them, and it removes its own event handler and indexers from an
informer that keeps running for others. An event source registered dynamically
against an already running shared informer needs no special handling: the client
replays the cache contents to a newly added handler.

Also in support of the above: ConfigurationService#informerPool, an
InformerEventSource constructor that no longer needs an EventSourceContext (the
one taking it is deprecated), the resource group/version/kind on
InformerConfiguration, equality and toString on FieldSelector, and equality of
GroupVersionKindPlural made consistent with its hashCode so that an unspecified
plural no longer splits informers.

The pooling itself is production ready; the configuration API around it is marked
experimental and may still change. Covered by unit tests for the pools, the
classifier, the wrapper and the manager, and by integration tests for sharing,
dynamic registration and de-registration that each run against both strategies.


Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
Copilot AI review requested due to automatic review settings August 1, 2026 18:59
private final AtomicBoolean blockNextRelease = new AtomicBoolean(true);

@Override
public <R extends HasMetadata> Optional<SharedIndexInformer<R>> releaseInformer(
}

@Override
public <R extends HasMetadata> Optional<SharedIndexInformer<R>> releaseInformer(
}

@Override
public InformerPool informerPool() {
Comment on lines +65 to +67
final var configurationService =
ConfigurationService.newOverriddenConfigurationService(
this.configurationService, o -> o.withKubernetesClient(client));

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 88 out of 88 changed files in this pull request and generated no new comments.

Suppressed comments (3)

pom.xml:25

  • The project version is set to 999-SNAPSHOT, which doesn’t match the PR title indicating a v5.6 branch and will produce artifacts with an unexpected coordinate. If this is intended to be the next development snapshot, use a 5.6.x-SNAPSHOT version (and keep all module parent versions aligned).
    operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/pool/NonSharingInformerPool.java:34
  • Use the generic diamond operator here to avoid a raw ConcurrentHashMap (this currently forces @SuppressWarnings({"unchecked", "rawtypes"}) to cover more than necessary).
  private final Map<ClassifierWithName, SharedIndexInformer> informers = new ConcurrentHashMap();

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java:502

  • ConfigurationService#informerPool() currently returns a new DefaultInformerPool instance on every call and doesn’t call setConfigurationService(this), which violates the method’s own contract (“same instance on every call”) and can disable cross-controller informer sharing (or break reference counting) for implementations that don’t override it. Consider caching and initializing the pool in the default implementation (or make it non-default and require implementations to provide a cached pool).
  @Experimental(
      "Only the configuration API around informer pooling could still change in a"
          + " non-backwards-compatible way, the pooling itself is prod ready.")
  default InformerPool informerPool() {
    return new DefaultInformerPool();

dependabot Bot added 3 commits August 1, 2026 21:27
Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/apache/maven-jar-plugin/releases)
- [Commits](apache/maven-jar-plugin@maven-jar-plugin-3.5.0...maven-jar-plugin-3.5.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-jar-plugin
  dependency-version: 3.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps `openrewrite.version` from 8.87.5 to 8.87.7.

Updates `org.openrewrite:rewrite-java` from 8.87.5 to 8.87.7
- [Release notes](https://github.com/openrewrite/rewrite/releases)
- [Commits](openrewrite/rewrite@v8.87.5...v8.87.7)

Updates `org.openrewrite:rewrite-maven` from 8.87.5 to 8.87.7
- [Release notes](https://github.com/openrewrite/rewrite/releases)
- [Commits](openrewrite/rewrite@v8.87.5...v8.87.7)

Updates `org.openrewrite:rewrite-test` from 8.87.5 to 8.87.7
- [Release notes](https://github.com/openrewrite/rewrite/releases)
- [Commits](openrewrite/rewrite@v8.87.5...v8.87.7)

Updates `org.openrewrite:rewrite-java-17` from 8.87.5 to 8.87.7
- [Release notes](https://github.com/openrewrite/rewrite/releases)
- [Commits](openrewrite/rewrite@v8.87.5...v8.87.7)

---
updated-dependencies:
- dependency-name: org.openrewrite:rewrite-java
  dependency-version: 8.87.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.openrewrite:rewrite-maven
  dependency-version: 8.87.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.openrewrite:rewrite-test
  dependency-version: 8.87.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
- dependency-name: org.openrewrite:rewrite-java-17
  dependency-version: 8.87.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…8.0 to 3.9.0 (#3515)

Signed-off-by: dependabot[bot] <support@github.com>
csviri and others added 5 commits August 1, 2026 21:27
)

Fabric8's no-context patch() fetches the resource from the server and
computes an RFC 6902 JSON Patch diff, which removes the fields omitted
from a partial resource (including the whole spec). Pass an explicit
JSON_MERGE PatchContext so the non-status merge patch operations really
send application/merge-patch+json.
…ator E2E test (#3513)

Adds a Maven-compiled Kotlin test source set to operator-framework-core
and a smoke test verifying that a checked (non-RuntimeException) Exception
thrown from a Kotlin DependentResource is properly caught and reported by
the workflow executor, so that retries are triggered as expected.

Kotlin does not have checked exceptions, so Kotlin code can throw a
checked Exception from an overridden method without declaring it, even
though the Java DependentResource#reconcile signature does not declare
`throws Exception`. Before #2965 this exception would not have been
caught by NodeExecutor, since it only handled RuntimeException, silently
swallowing the error and preventing retries.

Closes #2967

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: close class brace in Kotlin test; add Kotlin sample operator E2E

Fixes a missing closing brace left in KotlinCheckedExceptionDependentResourceTest.kt.

Adds a new sample-operators/kotlin-operator module: a minimalist Kotlin
operator (ConfigMapCopyReconciler) that copies a value from a custom
resource's spec into a ConfigMap, with a dual-mode (local/remote) E2E
test mirroring the other samples. This verifies deserialization via the
fabric8 client and the full reconciliation runtime when both the CR and
reconciler are implemented in Kotlin, addressing the maintainer's request
for broader coverage than the existing unit-level smoke test.


Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This needed to be fixed after rebase.

Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
Copilot AI review requested due to automatic review settings August 1, 2026 19:27
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 1, 2026
@openshift-ci

openshift-ci Bot commented Aug 1, 2026

Copy link
Copy Markdown

PR needs rebase.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 106 out of 106 changed files in this pull request and generated 1 comment.

Suppressed comments (3)

pom.xml:25

  • The root project version is set to 999-SNAPSHOT, which doesn’t match the PR title intent ("next (v5.6; …)") and will cause all produced artifacts to use an obviously placeholder version. Please set this to the intended next snapshot version and keep it consistent across all module parent references updated in this PR.
    operator-framework-core/pom.xml:26
  • This module now points at parent version 999-SNAPSHOT, which looks like a placeholder and will prevent aligning the module with the actual reactor parent version intended for the v5.6 line. Please update to the real parent snapshot version (and keep consistent with the root pom.xml).
  <parent>
    <groupId>io.javaoperatorsdk</groupId>
    <artifactId>java-operator-sdk</artifactId>
    <version>999-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

sample-operators/pom.xml:26

  • The sample-operators parent version is set to 999-SNAPSHOT, which appears to be a placeholder and should match the actual parent version used by the root project for the intended release line.

This is expected for a pool to set. Event if the underlying implementation would set it, this is the correct way to handle it.

Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
Copilot AI review requested due to automatic review settings August 3, 2026 08:03

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 106 out of 106 changed files in this pull request and generated no new comments.

Suppressed comments (2)

pom.xml:24

  • Setting the root project version to 999-SNAPSHOT looks like a placeholder rather than a real next development version. This will change published Maven coordinates (including the BOM) and can break downstream consumers and release tooling; if the intent is a regular version bump, it should use the correct semantic version and remain consistent across all child POM parent versions.
    operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java:491
  • The Javadoc requires informerPool() to return the same instance on every call, but the current default implementation constructs a new DefaultInformerPool each time. Any ConfigurationService implementation relying on the default method will silently disable informer sharing and can break reference-counting / release symmetry across different call sites.
   * <p><strong>Implementations must return the same instance on every call.</strong> The pool is
   * effectively a per-{@code ConfigurationService} singleton: controllers share informers only if
   * they resolve the same pool, and reference counting / informer shutdown are only correct if
   * {@code getInformer} and {@code releaseInformer} operate on that same instance. This is
   * intentionally not a {@code default} method, since a {@code default} could not cache the result

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants