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
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 4367d104d2..64d4e47183 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
@@ -61,7 +61,7 @@
1.6.13
- 3.1.0
+ 3.2.1
3.3.0
3.6.3
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-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/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..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
@@ -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);
}
@@ -122,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()
@@ -193,27 +194,31 @@ private static Optional extends Class>> 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/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 b804b88a30..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
@@ -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;
@@ -32,23 +35,32 @@
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 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 = getPrimaryResourceType();
+ 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")
+ protected Class getPrimaryResourceType() {
+ return (Class
) Utils.getTypeArgumentFromExtendedClassByIndex(getClass(), 1);
}
@SuppressWarnings("unchecked")
@@ -87,7 +99,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 {
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