> unhealthyEventSource
}
return res;
}
+
+ /**
+ * Retrieves the {@link RegisteredController} associated with the specified controller name or
+ * {@code null} if no such controller is registered.
+ *
+ * @param controllerName the name of the {@link RegisteredController} to retrieve
+ * @return the {@link RegisteredController} associated with the specified controller name or
+ * {@code null} if no such controller is registered
+ * @since 5.1.2
+ */
+ @SuppressWarnings({"unchecked", "unused"})
+ public RegisteredController extends HasMetadata> getRegisteredController(
+ String controllerName) {
+ checkIfStarted();
+ return registeredControllers.stream()
+ .filter(rc -> rc.getConfiguration().getName().equals(controllerName))
+ .findFirst()
+ .orElse(null);
+ }
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java
index 438f7d91a9..891f199dbe 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java
@@ -30,6 +30,12 @@
import static io.javaoperatorsdk.operator.api.config.ControllerConfiguration.CONTROLLER_NAME_AS_FIELD_MANAGER;
+/**
+ * A default {@link ConfigurationService} implementation, resolving {@link Reconciler}s
+ * configuration when it has already been resolved before. If this behavior is not adequate, please
+ * use {@link AbstractConfigurationService} instead as a base for your {@code ConfigurationService}
+ * implementation.
+ */
public class BaseConfigurationService extends AbstractConfigurationService {
private static final String LOGGER_NAME = "Default ConfigurationService implementation";
@@ -149,10 +155,12 @@ private static void configureFromAnnotatedReconciler(
@Override
protected void logMissingReconcilerWarning(String reconcilerKey, String reconcilersNameMessage) {
- logger.warn(
- "Configuration for reconciler '{}' was not found. {}",
- reconcilerKey,
- reconcilersNameMessage);
+ if (!createIfNeeded()) {
+ logger.warn(
+ "Configuration for reconciler '{}' was not found. {}",
+ reconcilerKey,
+ reconcilersNameMessage);
+ }
}
@SuppressWarnings("unused")
@@ -318,6 +326,13 @@ private ResolvedControllerConfiguration
controllerCon
informerConfig);
}
+ /**
+ * @deprecated This method was meant to allow subclasses to prevent automatic creation of the
+ * configuration when not found. This functionality is now removed, if you want to be able to
+ * prevent automated, on-demand creation of a reconciler's configuration, please use the
+ * {@link AbstractConfigurationService} implementation instead as base for your extension.
+ */
+ @Deprecated(forRemoval = true)
protected boolean createIfNeeded() {
return true;
}
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 18e74d29a9..41134e64ac 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
@@ -28,7 +28,6 @@
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResource;
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResourceConfig;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.ResourceUpdaterMatcher;
import io.javaoperatorsdk.operator.processing.dependent.workflow.ManagedWorkflowFactory;
import io.javaoperatorsdk.operator.processing.event.source.controller.ControllerEventSource;
@@ -396,9 +395,6 @@ default boolean shouldUseSSA(
Class extends KubernetesDependentResource> dependentResourceType,
Class extends HasMetadata> resourceType,
KubernetesDependentResourceConfig extends HasMetadata> config) {
- if (ResourceUpdaterMatcher.class.isAssignableFrom(dependentResourceType)) {
- return false;
- }
Boolean useSSAConfig =
Optional.ofNullable(config).map(KubernetesDependentResourceConfig::useSSA).orElse(null);
// don't use SSA for certain resources by default, only if explicitly overridden
@@ -489,7 +485,6 @@ default Set> withPreviousAnnotationForDependentReso
*
* @return if resource version should be parsed (as integer)
* @since 4.5.0
- * @return if resource version should be parsed (as integer)
*/
default boolean parseResourceVersionsForEventFilteringAndCaching() {
return false;
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java
index 1b5eefd7ff..1bd98c12d6 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java
@@ -21,8 +21,7 @@ private UpdateControl(P resource, boolean patchResource, boolean patchStatus) {
}
/**
- * Preferred way to update the status. It does not do optimistic locking. Uses JSON Patch to patch
- * the resource.
+ * Preferred way to update the status. Uses JSON Patch to patch the resource.
*
* Note that this does not work, if the {@link CustomResource#initStatus()} is implemented,
* since it breaks the diffing process. Don't implement it if using this method. There is also an
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java
deleted file mode 100644
index d893ff3e86..0000000000
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
-
-import io.fabric8.kubernetes.api.model.HasMetadata;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-
-public interface ResourceUpdaterMatcher {
-
- R updateResource(R actual, R desired, Context> context);
-
- boolean matches(R actual, R desired, Context> context);
-}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java
index 065e790ba4..9e29305b51 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java
@@ -144,9 +144,11 @@ protected void doRun(DependentResourceNode dependentResourceNode) {
log.debug("Reconciling for primary: {} node: {} ", primaryID, dependentResourceNode);
ReconcileResult reconcileResult = dependentResource.reconcile(primary, context);
final var detailBuilder = createOrGetResultFor(dependentResourceNode);
- detailBuilder.withReconcileResult(reconcileResult).markAsVisited();
- if (isConditionMet(dependentResourceNode.getReadyPostcondition(), dependentResourceNode)) {
+ boolean isReadyPostconditionMet =
+ isConditionMet(dependentResourceNode.getReadyPostcondition(), dependentResourceNode);
+ detailBuilder.withReconcileResult(reconcileResult).markAsVisited();
+ if (isReadyPostconditionMet) {
log.debug(
"Setting already reconciled for: {} primaryID: {}", dependentResourceNode, primaryID);
handleDependentsReconcile(dependentResourceNode);
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java
index b52dc278f2..c029a54170 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java
@@ -95,7 +95,7 @@ private InformerEventSource(
parseResourceVersions);
// If there is a primary to secondary mapper there is no need for primary to secondary index.
primaryToSecondaryMapper = configuration.getPrimaryToSecondaryMapper();
- if (primaryToSecondaryMapper == null) {
+ if (useSecondaryToPrimaryIndex()) {
primaryToSecondaryIndex =
// The index uses the secondary to primary mapper (always present) to build the index
new DefaultPrimaryToSecondaryIndex<>(configuration.getSecondaryToPrimaryMapper());
@@ -157,6 +157,14 @@ public void onDelete(R resource, boolean b) {
}
}
+ @Override
+ public synchronized void start() {
+ super.start();
+ // this makes sure that on first reconciliation all resources are
+ // present on the index
+ manager().list().forEach(primaryToSecondaryIndex::onAddOrUpdate);
+ }
+
private synchronized void onAddOrUpdate(
Operation operation, R newObject, R oldObject, Runnable superOnOp) {
var resourceID = ResourceID.fromResource(newObject);
diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSourceTest.java
index 3205bca523..a08989c8ce 100644
--- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSourceTest.java
+++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSourceTest.java
@@ -57,7 +57,12 @@ void setup() {
.thenReturn(mock(SecondaryToPrimaryMapper.class));
when(informerEventSourceConfiguration.getResourceClass()).thenReturn(Deployment.class);
- informerEventSource = new InformerEventSource<>(informerEventSourceConfiguration, clientMock);
+ informerEventSource =
+ new InformerEventSource<>(informerEventSourceConfiguration, clientMock) {
+ // mocking start
+ @Override
+ public synchronized void start() {}
+ };
var mockControllerConfig = mock(ControllerConfiguration.class);
when(mockControllerConfig.getConfigurationService()).thenReturn(new BaseConfigurationService());
diff --git a/operator-framework-junit5/pom.xml b/operator-framework-junit5/pom.xml
index 07bfa9cd1c..8c8a349af0 100644
--- a/operator-framework-junit5/pom.xml
+++ b/operator-framework-junit5/pom.xml
@@ -4,7 +4,7 @@
io.javaoperatorsdk
java-operator-sdk
- 5.1.2-SNAPSHOT
+ 5.1.3-SNAPSHOT
operator-framework-junit-5
diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java
index 00bf7e8380..794bc11d9a 100644
--- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java
+++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java
@@ -111,6 +111,10 @@ public T create(T resource) {
return kubernetesClient.resource(resource).inNamespace(namespace).create();
}
+ public T serverSideApply(T resource) {
+ return kubernetesClient.resource(resource).inNamespace(namespace).serverSideApply();
+ }
+
public T replace(T resource) {
return kubernetesClient.resource(resource).inNamespace(namespace).replace();
}
diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java
index 3e6ad35e52..54cb57544d 100644
--- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java
+++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java
@@ -54,6 +54,7 @@ public class LocallyRunOperatorExtension extends AbstractOperatorExtension {
private final List> additionalCustomResourceDefinitions;
private final Map registeredControllers;
private final Map crdMappings;
+ private final Consumer beforeStartHook;
private LocallyRunOperatorExtension(
List reconcilers,
@@ -68,7 +69,8 @@ private LocallyRunOperatorExtension(
Consumer configurationServiceOverrider,
Function namespaceNameSupplier,
Function perClassNamespaceNameSupplier,
- List additionalCrds) {
+ List additionalCrds,
+ Consumer beforeStartHook) {
super(
infrastructure,
infrastructureTimeout,
@@ -82,6 +84,7 @@ private LocallyRunOperatorExtension(
this.portForwards = portForwards;
this.localPortForwards = new ArrayList<>(portForwards.size());
this.additionalCustomResourceDefinitions = additionalCustomResourceDefinitions;
+ this.beforeStartHook = beforeStartHook;
configurationServiceOverrider =
configurationServiceOverrider != null
? configurationServiceOverrider.andThen(
@@ -298,6 +301,10 @@ protected void before(ExtensionContext context) {
});
crdMappings.clear();
+ if (beforeStartHook != null) {
+ beforeStartHook.accept(this);
+ }
+
LOGGER.debug("Starting the operator locally");
this.operator.start();
}
@@ -356,6 +363,7 @@ public static class Builder extends AbstractBuilder {
private final List portForwards;
private final List> additionalCustomResourceDefinitions;
private final List additionalCRDs = new ArrayList<>();
+ private Consumer beforeStartHook;
private KubernetesClient kubernetesClient;
protected Builder() {
@@ -424,6 +432,15 @@ public Builder withAdditionalCRD(String... paths) {
return this;
}
+ /**
+ * Used to initialize resources when the namespace is generated but the operator is not started
+ * yet.
+ */
+ public Builder withBeforeStartHook(Consumer beforeStartHook) {
+ this.beforeStartHook = beforeStartHook;
+ return this;
+ }
+
public LocallyRunOperatorExtension build() {
return new LocallyRunOperatorExtension(
reconcilers,
@@ -438,7 +455,8 @@ public LocallyRunOperatorExtension build() {
configurationServiceOverrider,
namespaceNameSupplier,
perClassNamespaceNameSupplier,
- additionalCRDs);
+ additionalCRDs,
+ beforeStartHook);
}
}
diff --git a/operator-framework/pom.xml b/operator-framework/pom.xml
index 18cbda43cf..9324f16835 100644
--- a/operator-framework/pom.xml
+++ b/operator-framework/pom.xml
@@ -4,7 +4,7 @@
io.javaoperatorsdk
java-operator-sdk
- 5.1.2-SNAPSHOT
+ 5.1.3-SNAPSHOT
operator-framework
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessCustomResource.java
new file mode 100644
index 0000000000..b9701c94bd
--- /dev/null
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessCustomResource.java
@@ -0,0 +1,13 @@
+package io.javaoperatorsdk.operator.baseapi.startsecondaryaccess;
+
+import io.fabric8.kubernetes.api.model.Namespaced;
+import io.fabric8.kubernetes.client.CustomResource;
+import io.fabric8.kubernetes.model.annotation.Group;
+import io.fabric8.kubernetes.model.annotation.ShortNames;
+import io.fabric8.kubernetes.model.annotation.Version;
+
+@Group("sample.javaoperatorsdk")
+@Version("v1")
+@ShortNames("ssac")
+public class StartupSecondaryAccessCustomResource extends CustomResource
+ implements Namespaced {}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessIT.java
new file mode 100644
index 0000000000..61fc40803c
--- /dev/null
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessIT.java
@@ -0,0 +1,53 @@
+package io.javaoperatorsdk.operator.baseapi.startsecondaryaccess;
+
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.fabric8.kubernetes.api.model.ConfigMap;
+import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
+import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
+
+import static io.javaoperatorsdk.operator.baseapi.startsecondaryaccess.StartupSecondaryAccessReconciler.LABEL_KEY;
+import static io.javaoperatorsdk.operator.baseapi.startsecondaryaccess.StartupSecondaryAccessReconciler.LABEL_VALUE;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.awaitility.Awaitility.await;
+
+class StartupSecondaryAccessIT {
+
+ public static final int SECONDARY_NUMBER = 200;
+
+ @RegisterExtension
+ static LocallyRunOperatorExtension extension =
+ LocallyRunOperatorExtension.builder()
+ .withReconciler(new StartupSecondaryAccessReconciler())
+ .withBeforeStartHook(
+ ex -> {
+ var primary = new StartupSecondaryAccessCustomResource();
+ primary.setMetadata(new ObjectMetaBuilder().withName("test1").build());
+ primary = ex.serverSideApply(primary);
+
+ for (int i = 0; i < SECONDARY_NUMBER; i++) {
+ ConfigMap cm = new ConfigMap();
+ cm.setMetadata(
+ new ObjectMetaBuilder()
+ .withLabels(Map.of(LABEL_KEY, LABEL_VALUE))
+ .withNamespace(ex.getNamespace())
+ .withName("cm" + i)
+ .build());
+ cm.addOwnerReference(primary);
+ ex.serverSideApply(cm);
+ }
+ })
+ .build();
+
+ @Test
+ void reconcilerSeeAllSecondaryResources() {
+ var reconciler = extension.getReconcilerOfType(StartupSecondaryAccessReconciler.class);
+
+ await().untilAsserted(() -> assertThat(reconciler.isReconciled()).isTrue());
+
+ assertThat(reconciler.isSecondaryAndCacheSameAmount()).isTrue();
+ }
+}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessReconciler.java
new file mode 100644
index 0000000000..a2c51fdafd
--- /dev/null
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessReconciler.java
@@ -0,0 +1,75 @@
+package io.javaoperatorsdk.operator.baseapi.startsecondaryaccess;
+
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.fabric8.kubernetes.api.model.ConfigMap;
+import io.javaoperatorsdk.operator.api.config.informer.InformerEventSourceConfiguration;
+import io.javaoperatorsdk.operator.api.reconciler.Context;
+import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
+import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
+import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.processing.event.source.EventSource;
+import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
+
+import static io.javaoperatorsdk.operator.baseapi.startsecondaryaccess.StartupSecondaryAccessIT.SECONDARY_NUMBER;
+
+@ControllerConfiguration
+public class StartupSecondaryAccessReconciler
+ implements Reconciler {
+
+ private static final Logger log = LoggerFactory.getLogger(StartupSecondaryAccessReconciler.class);
+
+ public static final String LABEL_KEY = "app";
+ public static final String LABEL_VALUE = "secondary-test";
+
+ private InformerEventSource cmInformer;
+
+ private boolean secondaryAndCacheSameAmount = true;
+ private boolean reconciled = false;
+
+ @Override
+ public UpdateControl reconcile(
+ StartupSecondaryAccessCustomResource resource,
+ Context context) {
+
+ var secondary = context.getSecondaryResources(ConfigMap.class);
+ var cached = cmInformer.list().toList();
+
+ log.info(
+ "Secondary number: {}, cached: {}, expected: {}",
+ secondary.size(),
+ cached.size(),
+ SECONDARY_NUMBER);
+
+ if (secondary.size() != cached.size()) {
+ secondaryAndCacheSameAmount = false;
+ }
+ reconciled = true;
+ return UpdateControl.noUpdate();
+ }
+
+ @Override
+ public List> prepareEventSources(
+ EventSourceContext context) {
+ cmInformer =
+ new InformerEventSource<>(
+ InformerEventSourceConfiguration.from(
+ ConfigMap.class, StartupSecondaryAccessCustomResource.class)
+ .withLabelSelector(LABEL_KEY + "=" + LABEL_VALUE)
+ .build(),
+ context);
+ return List.of(cmInformer);
+ }
+
+ public boolean isSecondaryAndCacheSameAmount() {
+ return secondaryAndCacheSameAmount;
+ }
+
+ public boolean isReconciled() {
+ return reconciled;
+ }
+}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefIT.java
index ae5cd25895..1b71c79448 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefIT.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefIT.java
@@ -44,6 +44,22 @@ void dependentResourceCanReferenceEachOther() {
assertThat(operator.get(Secret.class, TEST_RESOURCE_NAME + i)).isNotNull();
}
});
+
+ for (int i = 0; i < EXECUTION_NUMBER; i++) {
+ operator.delete(testResource(i));
+ }
+ await()
+ .timeout(Duration.ofSeconds(30))
+ .untilAsserted(
+ () -> {
+ for (int i = 0; i < EXECUTION_NUMBER; i++) {
+ assertThat(
+ operator.get(
+ DependentResourceCrossRefResource.class,
+ testResource(i).getMetadata().getName()))
+ .isNull();
+ }
+ });
}
DependentResourceCrossRefResource testResource(int n) {
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefReconciler.java
index 5d54ecdabe..247174838c 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefReconciler.java
@@ -5,6 +5,9 @@
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.kubernetes.api.model.Secret;
@@ -26,6 +29,8 @@
@ControllerConfiguration
public class DependentResourceCrossRefReconciler
implements Reconciler {
+ private static final Logger log =
+ LoggerFactory.getLogger(DependentResourceCrossRefReconciler.class);
public static final String SECRET_NAME = "secret";
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
@@ -48,6 +53,7 @@ public ErrorStatusUpdateControl updateErrorSt
DependentResourceCrossRefResource resource,
Context context,
Exception e) {
+ log.error("Status update on error", e);
errorHappened = true;
return ErrorStatusUpdateControl.noStatusUpdate();
}
diff --git a/pom.xml b/pom.xml
index f4dd22edbc..0dbd0879d8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
io.javaoperatorsdk
java-operator-sdk
- 5.1.2-SNAPSHOT
+ 5.1.3-SNAPSHOT
pom
Operator SDK for Java
Java SDK for implementing Kubernetes operators
@@ -44,13 +44,6 @@
https://github.com/operator-framework/java-operator-sdk/tree/main
-
-
- ossrh
- https://oss.sonatype.org/content/repositories/snapshots
-
-
-
UTF-8
17
@@ -59,38 +52,39 @@
java-operator-sdk
https://sonarcloud.io
jdk
- 5.13.0
+ 5.13.4
7.3.1
2.0.17
- 2.24.3
+ 2.25.1
5.18.0
- 3.17.0
+ 3.18.0
0.21.0
1.13.0
- 3.27.3
+ 3.27.4
4.3.0
2.7.3
- 1.15.1
- 3.2.0
+ 1.15.3
+ 3.2.2
0.9.14
- 2.19.0
- 4.15
+ 2.20.0
+ 4.16
2.11
3.14.0
3.5.3
+ 0.8.0
3.11.2
3.3.1
3.3.1
3.4.2
3.5.0
- 3.2.7
+ 3.2.8
1.7.0
3.0.0
3.1.4
9.0.2
- 3.4.5
- 2.44.5
+ 3.4.6
+ 2.46.1
@@ -293,6 +287,15 @@
org.apache.maven.plugins
maven-source-plugin
${maven-source-plugin.version}
+
+
+ attach-sources
+
+ jar
+
+ verify
+
+
org.apache.maven.plugins
@@ -515,14 +518,6 @@
org.apache.maven.plugins
maven-source-plugin
-
-
- attach-sources
-
- jar
-
-
-
org.apache.maven.plugins
@@ -544,14 +539,15 @@
- org.sonatype.plugins
- nexus-staging-maven-plugin
- ${nexus-staging-maven-plugin.version}
+ org.sonatype.central
+ central-publishing-maven-plugin
+ ${central-publishing-maven-plugin.version}
true
- ossrh
- https://oss.sonatype.org/
- true
+ central
+ true
+ true
+ published
diff --git a/sample-operators/controller-namespace-deletion/pom.xml b/sample-operators/controller-namespace-deletion/pom.xml
index 9a87338da5..312e2fb199 100644
--- a/sample-operators/controller-namespace-deletion/pom.xml
+++ b/sample-operators/controller-namespace-deletion/pom.xml
@@ -5,7 +5,7 @@
io.javaoperatorsdk
sample-operators
- 5.1.2-SNAPSHOT
+ 5.1.3-SNAPSHOT
sample-controller-namespace-deletion
diff --git a/sample-operators/leader-election/pom.xml b/sample-operators/leader-election/pom.xml
index ca74158ae6..f01406b132 100644
--- a/sample-operators/leader-election/pom.xml
+++ b/sample-operators/leader-election/pom.xml
@@ -5,7 +5,7 @@
io.javaoperatorsdk
sample-operators
- 5.1.2-SNAPSHOT
+ 5.1.3-SNAPSHOT
sample-leader-election
diff --git a/sample-operators/mysql-schema/pom.xml b/sample-operators/mysql-schema/pom.xml
index 94b2f93769..cf1be19cbb 100644
--- a/sample-operators/mysql-schema/pom.xml
+++ b/sample-operators/mysql-schema/pom.xml
@@ -5,7 +5,7 @@
io.javaoperatorsdk
sample-operators
- 5.1.2-SNAPSHOT
+ 5.1.3-SNAPSHOT
sample-mysql-schema-operator
diff --git a/sample-operators/pom.xml b/sample-operators/pom.xml
index 2f1c9c1645..7763767a1f 100644
--- a/sample-operators/pom.xml
+++ b/sample-operators/pom.xml
@@ -5,7 +5,7 @@
io.javaoperatorsdk
java-operator-sdk
- 5.1.2-SNAPSHOT
+ 5.1.3-SNAPSHOT
sample-operators
diff --git a/sample-operators/tomcat-operator/pom.xml b/sample-operators/tomcat-operator/pom.xml
index 38d6b4ec0c..3a9b640db8 100644
--- a/sample-operators/tomcat-operator/pom.xml
+++ b/sample-operators/tomcat-operator/pom.xml
@@ -5,7 +5,7 @@
io.javaoperatorsdk
sample-operators
- 5.1.2-SNAPSHOT
+ 5.1.3-SNAPSHOT
sample-tomcat-operator
diff --git a/sample-operators/webpage/pom.xml b/sample-operators/webpage/pom.xml
index 7f118be1bb..d3a691a93a 100644
--- a/sample-operators/webpage/pom.xml
+++ b/sample-operators/webpage/pom.xml
@@ -5,7 +5,7 @@
io.javaoperatorsdk
sample-operators
- 5.1.2-SNAPSHOT
+ 5.1.3-SNAPSHOT
sample-webpage-operator