From 9804dd8e90313fb39233b949168a076f85d091ec Mon Sep 17 00:00:00 2001 From: Dongbo Xiao Date: Wed, 10 Feb 2021 21:06:23 -0500 Subject: [PATCH] keep namespaces processed in batches --- .../kubernetes/operator/DomainRecheck.java | 6 ++-- .../oracle/kubernetes/operator/MainTest.java | 33 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/operator/src/main/java/oracle/kubernetes/operator/DomainRecheck.java b/operator/src/main/java/oracle/kubernetes/operator/DomainRecheck.java index 89ee51962a9..3eaf7880520 100644 --- a/operator/src/main/java/oracle/kubernetes/operator/DomainRecheck.java +++ b/operator/src/main/java/oracle/kubernetes/operator/DomainRecheck.java @@ -132,6 +132,7 @@ Step readExistingNamespaces() { } private class NamespaceListResponseStep extends DefaultResponseStep { + Step current = getNext(); private NamespaceListResponseStep() { super(new Namespaces.NamespaceListAfterStep(domainNamespaces)); @@ -168,8 +169,9 @@ private Step createNextSteps(Set namespacesToStartNow) { RunInParallel.perNamespace(namespacesToStartNow, DomainRecheck.this::createNamespaceReview)); } } - nextSteps.add(getNext()); - return Step.chain(nextSteps.toArray(new Step[0])); + nextSteps.add(current); + current = Step.chain(nextSteps.toArray(new Step[0])); + return current; } private Set getNamespacesToStart(List namespaceNames) { diff --git a/operator/src/test/java/oracle/kubernetes/operator/MainTest.java b/operator/src/test/java/oracle/kubernetes/operator/MainTest.java index 914a0e4be25..12fc06c7045 100644 --- a/operator/src/test/java/oracle/kubernetes/operator/MainTest.java +++ b/operator/src/test/java/oracle/kubernetes/operator/MainTest.java @@ -337,6 +337,10 @@ private List getStartingNamespaces() { return Arrays.stream(NAMESPACES).filter(domainNamespaces::isStarting).collect(Collectors.toList()); } + private List getStartingNamespaces(String...namespaces) { + return Arrays.stream(namespaces).filter(domainNamespaces::isStarting).collect(Collectors.toList()); + } + @NotNull DomainRecheck createDomainRecheck() { return new DomainRecheck(delegate); @@ -427,6 +431,35 @@ private void defineSelectionStrategy(SelectionStrategy selectionStrategy) { TuningParameters.getInstance().put(Namespaces.SELECTION_STRATEGY_KEY, selectionStrategy.toString()); } + @Test + public void whenNamespacesListedInMultipleChunks_allNamespacesStarted() { + loggerControl.withLogLevel(Level.WARNING).collectLogMessages(logRecords, MessageKeys.NAMESPACE_IS_MISSING); + + defineSelectionStrategy(SelectionStrategy.List); + String namespaceString = "NS1,NS" + MULTICHUNK_LAST_NAMESPACE_NUM; + HelmAccessStub.defineVariable(HelmAccess.OPERATOR_DOMAIN_NAMESPACES, namespaceString); + createNamespaces(MULTICHUNK_LAST_NAMESPACE_NUM); + + testSupport.runSteps(createDomainRecheck().readExistingNamespaces()); + + assertThat(getStartingNamespaces("NS1", "NS" + MULTICHUNK_LAST_NAMESPACE_NUM), + contains("NS1", "NS" + MULTICHUNK_LAST_NAMESPACE_NUM)); + } + + @Test + public void whenNamespacesListedInMoreThanTwoChunks_allNamespacesStarted() { + loggerControl.withLogLevel(Level.WARNING).collectLogMessages(logRecords, MessageKeys.NAMESPACE_IS_MISSING); + int lastNSNumber = DEFAULT_CALL_LIMIT * 3 + 1; + defineSelectionStrategy(SelectionStrategy.List); + String namespaceString = "NS1,NS" + lastNSNumber; + HelmAccessStub.defineVariable(HelmAccess.OPERATOR_DOMAIN_NAMESPACES, namespaceString); + createNamespaces(lastNSNumber); + + testSupport.runSteps(createDomainRecheck().readExistingNamespaces()); + + assertThat(getStartingNamespaces("NS1", "NS" + lastNSNumber), contains("NS1", "NS" + lastNSNumber)); + } + @Test public void whenNamespacesListedInMultipleChunks_dontDeclarePresentNamespacesAsMissing() { loggerControl.withLogLevel(Level.WARNING).collectLogMessages(logRecords, MessageKeys.NAMESPACE_IS_MISSING);