From 207177c8bb038530236dc32ffd5f382974de432e Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 2 Aug 2023 13:15:18 +0200 Subject: Since redundancy is created late in the process we need to access it via a provider instead of providing in the constructor. --- .../vespa/model/content/ContentSearchCluster.java | 10 ++++++---- .../com/yahoo/vespa/model/content/Redundancy.java | 4 ++++ .../com/yahoo/vespa/model/search/SearchNode.java | 20 ++++++++++---------- .../vespa/model/search/test/SearchNodeTest.java | 2 +- 4 files changed, 21 insertions(+), 15 deletions(-) (limited to 'config-model') diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java index 0b07ef59410..8dc58a33e04 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java @@ -35,7 +35,6 @@ import java.util.Optional; import java.util.Objects; import java.util.TreeMap; import java.util.function.Predicate; -import java.util.stream.Collectors; /** * Encapsulates the various options for search in a content model. @@ -44,7 +43,8 @@ import java.util.stream.Collectors; public class ContentSearchCluster extends TreeConfigProducer implements ProtonConfig.Producer, DispatchNodesConfig.Producer, - DispatchConfig.Producer + DispatchConfig.Producer, + Redundancy.Provider { private static final int DEFAULT_DOC_STORE_COMPRESSION_LEVEL = 3; @@ -303,7 +303,7 @@ public class ContentSearchCluster extends TreeConfigProducer if (element == null) { searchNode = SearchNode.create(parent, "" + node.getDistributionKey(), node.getDistributionKey(), spec, clusterName, node, flushOnShutdown, tuning, resourceLimits, deployState.isHosted(), - fractionOfMemoryReserved, redundancy, deployState.featureFlags()); + fractionOfMemoryReserved, this, deployState.featureFlags()); searchNode.setHostResource(node.getHostResource()); searchNode.initService(deployState); @@ -312,7 +312,7 @@ public class ContentSearchCluster extends TreeConfigProducer tls.initService(deployState); } else { searchNode = new SearchNode.Builder(""+node.getDistributionKey(), spec, clusterName, node, flushOnShutdown, - tuning, resourceLimits, fractionOfMemoryReserved, redundancy) + tuning, resourceLimits, fractionOfMemoryReserved, this) .build(deployState, parent, element.getXml()); tls = new TransactionLogServer.Builder(clusterName, syncTransactionLog).build(deployState, searchNode, element.getXml()); } @@ -494,4 +494,6 @@ public class ContentSearchCluster extends TreeConfigProducer @Override public String toString() { return "content cluster '" + clusterName + "'"; } + public Redundancy redundancy() { return redundancy; } + } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/Redundancy.java b/config-model/src/main/java/com/yahoo/vespa/model/content/Redundancy.java index 616dcbbc760..e883e87d36c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/Redundancy.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/Redundancy.java @@ -64,4 +64,8 @@ public class Redundancy implements StorDistributionConfig.Producer, ProtonConfig builder.distribution(distBuilder); } + public interface Provider { + Redundancy redundancy(); + } + } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java index f238d30308b..53da4d31488 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java @@ -70,7 +70,7 @@ public class SearchNode extends AbstractService implements private final Optional tuning; private final Optional resourceLimits; private final double fractionOfMemoryReserved; - private final Redundancy redundancy; + private final Redundancy.Provider redundancyProvider; public static class Builder extends VespaDomBuilder.DomConfigProducerBuilderBase { @@ -82,11 +82,11 @@ public class SearchNode extends AbstractService implements private final Optional tuning; private final Optional resourceLimits; private final double fractionOfMemoryReserved; - private final Redundancy redundancy; + private final Redundancy.Provider redundancyProvider; public Builder(String name, NodeSpec nodeSpec, String clusterName, ContentNode node, boolean flushOnShutdown, Optional tuning, Optional resourceLimits, - double fractionOfMemoryReserved, Redundancy redundancy) { + double fractionOfMemoryReserved, Redundancy.Provider redundancyprovider) { this.name = name; this.nodeSpec = nodeSpec; this.clusterName = clusterName; @@ -95,7 +95,7 @@ public class SearchNode extends AbstractService implements this.tuning = tuning; this.resourceLimits = resourceLimits; this.fractionOfMemoryReserved = fractionOfMemoryReserved; - this.redundancy = redundancy; + this.redundancyProvider = redundancyprovider; } @Override @@ -103,7 +103,7 @@ public class SearchNode extends AbstractService implements Element producerSpec) { return SearchNode.create(ancestor, name, contentNode.getDistributionKey(), nodeSpec, clusterName, contentNode, flushOnShutdown, tuning, resourceLimits, deployState.isHosted(), - fractionOfMemoryReserved, redundancy, deployState.featureFlags()); + fractionOfMemoryReserved, redundancyProvider, deployState.featureFlags()); } } @@ -111,10 +111,10 @@ public class SearchNode extends AbstractService implements public static SearchNode create(TreeConfigProducer parent, String name, int distributionKey, NodeSpec nodeSpec, String clusterName, AbstractService serviceLayerService, boolean flushOnShutdown, Optional tuning, Optional resourceLimits, - boolean isHostedVespa, double fractionOfMemoryReserved, Redundancy redundancy, + boolean isHostedVespa, double fractionOfMemoryReserved, Redundancy.Provider redundancyProvider, ModelContext.FeatureFlags featureFlags) { SearchNode node = new SearchNode(parent, name, distributionKey, nodeSpec, clusterName, serviceLayerService, flushOnShutdown, - tuning, resourceLimits, isHostedVespa, fractionOfMemoryReserved, redundancy); + tuning, resourceLimits, isHostedVespa, fractionOfMemoryReserved, redundancyProvider); if (featureFlags.loadCodeAsHugePages()) { node.addEnvironmentVariable("VESPA_LOAD_CODE_AS_HUGEPAGES", true); } @@ -127,7 +127,7 @@ public class SearchNode extends AbstractService implements private SearchNode(TreeConfigProducer parent, String name, int distributionKey, NodeSpec nodeSpec, String clusterName, AbstractService serviceLayerService, boolean flushOnShutdown, Optional tuning, Optional resourceLimits, boolean isHostedVespa, - double fractionOfMemoryReserved, Redundancy redundancy) { + double fractionOfMemoryReserved, Redundancy.Provider redundancyProvider) { super(parent, name); this.distributionKey = distributionKey; this.serviceLayerService = serviceLayerService; @@ -144,7 +144,7 @@ public class SearchNode extends AbstractService implements // Properties are set in DomSearchBuilder this.tuning = tuning; this.resourceLimits = resourceLimits; - this.redundancy = redundancy; + this.redundancyProvider = redundancyProvider; setPropertiesElastic(clusterName, distributionKey); addEnvironmentVariable("OMP_NUM_THREADS", 1); } @@ -286,7 +286,7 @@ public class SearchNode extends AbstractService implements if (nodeResources.isPresent()) { var nodeResourcesTuning = new NodeResourcesTuning(nodeResources.get(), tuning.map(Tuning::threadsPerSearch).orElse(1), - fractionOfMemoryReserved, redundancy); + fractionOfMemoryReserved, redundancyProvider.redundancy()); nodeResourcesTuning.getConfig(builder); tuning.ifPresent(t -> t.getConfig(builder)); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java index b357a3e6718..191fc9e63bb 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java @@ -50,7 +50,7 @@ public class SearchNodeTest { private static SearchNode createSearchNode(MockRoot root, String name, int distributionKey, NodeSpec nodeSpec, boolean flushOnShutDown, boolean isHosted, ModelContext.FeatureFlags featureFlags) { return SearchNode.create(root, name, distributionKey, nodeSpec, "mycluster", null, flushOnShutDown, - Optional.empty(), Optional.empty(), isHosted, 0.0, new Redundancy(1,1,1,1,1), featureFlags); + Optional.empty(), Optional.empty(), isHosted, 0.0, () -> new Redundancy(1,1,1,1,1), featureFlags); } private static SearchNode createSearchNode(MockRoot root) { -- cgit v1.2.3