diff options
Diffstat (limited to 'config-model')
21 files changed, 97 insertions, 45 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java index 046eef65eb5..8befbb48016 100644 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java @@ -156,10 +156,11 @@ public class DeployState implements ConfigDefinitionStore { } public static HostProvisioner getDefaultModelHostProvisioner(ApplicationPackage applicationPackage) { - if (applicationPackage.getHosts() == null) { - return new SingleNodeProvisioner(); - } else { - return new HostsXmlProvisioner(applicationPackage.getHosts()); + try (Reader hostsReader = applicationPackage.getHosts()) { + return hostsReader == null ? new SingleNodeProvisioner() : new HostsXmlProvisioner(hostsReader); + } + catch (IOException e) { + throw new IllegalStateException("Could not read hosts.xml", e); } } diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java index 397b11661e5..d0e8afa5616 100644 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java @@ -41,6 +41,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea private String sequencerType = "LATENCY"; private String responseSequencerType = "ADAPTIVE"; private int responseNumThreads = 2; + private int maxPendingMoveOps = 10; private Optional<EndpointCertificateSecrets> endpointCertificateSecrets = Optional.empty(); private AthenzDomain athenzDomain; private ApplicationRoles applicationRoles; @@ -51,6 +52,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea private boolean enableAutomaticReindexing = false; private boolean reconfigurableZookeeperServer = false; private boolean useBucketExecutorForLidSpaceCompact; + private boolean useBucketExecutorForBucketMove; private boolean enableFeedBlockInDistributor = false; private double maxDeadBytesRatio = 0.2; private int clusterControllerMaxHeapSizeInMb = 512; @@ -77,6 +79,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea @Override public Optional<ApplicationRoles> applicationRoles() { return Optional.ofNullable(applicationRoles); } @Override public String responseSequencerType() { return responseSequencerType; } @Override public int defaultNumResponseThreads() { return responseNumThreads; } + @Override public int maxPendingMoveOps() { return maxPendingMoveOps; } @Override public boolean skipCommunicationManagerThread() { return false; } @Override public boolean skipMbusRequestThread() { return false; } @Override public boolean skipMbusReplyThread() { return false; } @@ -87,6 +90,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea @Override public boolean enableAutomaticReindexing() { return enableAutomaticReindexing; } @Override public boolean reconfigurableZookeeperServer() { return reconfigurableZookeeperServer; } @Override public boolean useBucketExecutorForLidSpaceCompact() { return useBucketExecutorForLidSpaceCompact; } + @Override public boolean useBucketExecutorForBucketMove() { return useBucketExecutorForBucketMove; } @Override public boolean enableFeedBlockInDistributor() { return enableFeedBlockInDistributor; } @Override public double maxDeadBytesRatio() { return maxDeadBytesRatio; } @Override public int clusterControllerMaxHeapSizeInMb() { return clusterControllerMaxHeapSizeInMb; } @@ -117,6 +121,10 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea responseNumThreads = numThreads; return this; } + public TestProperties setMaxPendingMoveOps(int moveOps) { + maxPendingMoveOps = moveOps; + return this; + } public TestProperties setDefaultTermwiseLimit(double limit) { defaultTermwiseLimit = limit; return this; @@ -194,6 +202,11 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea return this; } + public TestProperties useBucketExecutorForBucketMove(boolean enabled) { + useBucketExecutorForBucketMove = enabled; + return this; + } + public TestProperties enableFeedBlockInDistributor(boolean enabled) { enableFeedBlockInDistributor = enabled; return this; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java b/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java index 04660f2b990..6e16b1a120e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java @@ -194,16 +194,14 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon } /** - * Gets the ports metainfo object. The service implementation - * must populate this object in the constructor. + * Gets the ports metainfo object. The service implementation must populate this object in the constructor. */ public PortsMeta getPortsMeta() { return portsMeta; } /** - * Computes and returns the i'th port for this service, based on - * this Service's baseport. + * Computes and returns the i'th port for this service, based on this Service's baseport. * * @param i the offset from 'basePort' of the port to return * @return the i'th port relative to the base port. diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java index 27fb0f444ef..78d9dd473b3 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -67,9 +68,11 @@ public class HostResource implements Comparable<HostResource> { List<Integer> allocateService(DeployLogger deployLogger, AbstractService service, int wantedPort) { ports().useLogger(deployLogger); List<Integer> ports = hostPorts.allocatePorts(service, wantedPort); - assert (getService(service.getServiceName()) == null) : - ("There is already a service with name '" + service.getServiceName() + "' registered on " + this + - ". Most likely a programming error - all service classes must have unique names, even in different packages!"); + if (getService(service.getServiceName()) != null) + throw new IllegalStateException("There is already a service with name '" + service.getServiceName() + + "' registered on " + this + ". " + + "Most likely a programming error - " + + "all service classes must have unique names, even in different packages!"); services.put(service.getServiceName(), service); return ports; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/PortAllocBridge.java b/config-model/src/main/java/com/yahoo/vespa/model/PortAllocBridge.java index ac518b3a7d9..87db852e682 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/PortAllocBridge.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/PortAllocBridge.java @@ -10,13 +10,14 @@ import java.util.List; * This class acts as a bridge between NetworkPortRequestor and HostPorts * for a single call to allocatePorts(), gathering the resulting port * allocations in a list of integers. + * * @author arnej */ public class PortAllocBridge { - private HostPorts host; - private NetworkPortRequestor service; - private List<Integer> ports = new ArrayList<>(); + private final HostPorts host; + private final NetworkPortRequestor service; + private final List<Integer> ports = new ArrayList<>(); public PortAllocBridge(HostPorts host, NetworkPortRequestor service) { this.host = host; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/PortFinder.java b/config-model/src/main/java/com/yahoo/vespa/model/PortFinder.java index 3d5cbcd0e6e..968f8399e4b 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/PortFinder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/PortFinder.java @@ -41,7 +41,7 @@ public class PortFinder { String key = request.key(); if (byKeys.containsKey(key)) { int port = byKeys.get(key).port; - log.log(Level.FINE, "Re-using port "+port+" for allocation "+request+" on "+host); + log.log(Level.FINE, "Re-using port "+port+" for allocation " + request + " on " + host); return port; } int port = request.port; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java index 660c47d037d..44bade4cd84 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java @@ -418,7 +418,6 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri * @param configId the config id for the config client * @return the builder if a producer was found, and it did apply config, null otherwise */ - @SuppressWarnings("unchecked") @Override public ConfigInstance.Builder getConfig(ConfigInstance.Builder builder, String configId) { checkId(configId); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java index 3879df52390..e37f558c2ce 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java @@ -134,7 +134,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { return cfgs; } - private List<Slobrok> getSlobroks(DeployState deployState, AbstractConfigProducer parent, Element slobroksE) { + private List<Slobrok> getSlobroks(DeployState deployState, AbstractConfigProducer<?> parent, Element slobroksE) { List<Slobrok> slobs = new ArrayList<>(); if (slobroksE != null) { slobs = getExplicitSlobrokSetup(deployState, parent, slobroksE); @@ -142,16 +142,12 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { return slobs; } - private List<Slobrok> getExplicitSlobrokSetup(DeployState deployState, AbstractConfigProducer parent, Element slobroksE) { - List<Slobrok> slobs = new ArrayList<>(); - List<Element> slobsE = XML.getChildren(slobroksE, "slobrok"); + private List<Slobrok> getExplicitSlobrokSetup(DeployState deployState, AbstractConfigProducer<?> parent, Element slobroksE) { + List<Slobrok> slobroks = new ArrayList<>(); int i = 0; - for (Element e : slobsE) { - Slobrok slob = new SlobrokBuilder(i).build(deployState, parent, e); - slobs.add(slob); - i++; - } - return slobs; + for (Element e : XML.getChildren(slobroksE, "slobrok")) + slobroks.add(new SlobrokBuilder(i++).build(deployState, parent, e)); + return slobroks; } private static class LogserverBuilder extends DomConfigProducerBuilder<Logserver> { @@ -184,6 +180,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { } private static class SlobrokBuilder extends DomConfigProducerBuilder<Slobrok> { + int i; public SlobrokBuilder(int i) { @@ -194,6 +191,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { protected Slobrok doBuild(DeployState deployState, AbstractConfigProducer parent, Element spec) { return new Slobrok(parent, i); } + } private static class ClusterControllerBuilder extends DomConfigProducerBuilder<ClusterControllerContainer> { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java index 42af94b1d8e..a1db3c43f1c 100755 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java @@ -187,6 +187,7 @@ public abstract class ContainerCluster<CONTAINER extends Container> addSimpleComponent("com.yahoo.container.jdisc.ContainerThreadFactory"); addSimpleComponent("com.yahoo.container.handler.VipStatus"); addSimpleComponent(com.yahoo.container.handler.ClustersStatus.class.getName()); + addSimpleComponent("com.yahoo.container.jdisc.DisabledConnectionLogProvider"); addJaxProviders(); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/QueryProfiles.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/QueryProfiles.java index 4736a207659..a001d66bc7b 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/QueryProfiles.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/QueryProfiles.java @@ -70,7 +70,7 @@ public class QueryProfiles implements Serializable, QueryProfilesConfig.Producer ? "" : "In particular, the tensors (" + String.join(", ", tensorFields) + ") will be interpreted as strings, not tensors if sent in requests. ") + - "See https://docs.vespa.ai/documentation/query-profiles.html"); + "See https://docs.vespa.ai/en/query-profiles.html"); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index d9543c2e917..0c0c3f59e88 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -31,7 +31,6 @@ import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.Zone; import com.yahoo.container.logging.FileConnectionLog; -import com.yahoo.jdisc.http.server.jetty.VoidConnectionLog; import com.yahoo.osgi.provider.model.ComponentModel; import com.yahoo.search.rendering.RendererRegistry; import com.yahoo.searchdefinition.derived.RankProfileList; @@ -350,8 +349,6 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { // Add connection log if access log is configured if (cluster.getAllComponents().stream().anyMatch(component -> component instanceof AccessLogComponent)) { cluster.addComponent(new ConnectionLogComponent(cluster, FileConnectionLog.class, "qrs")); - } else { - cluster.addComponent(new ConnectionLogComponent(cluster, VoidConnectionLog.class, "qrs")); } } @@ -387,7 +384,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { if (deployState.endpointCertificateSecrets().isPresent()) { boolean authorizeClient = deployState.zone().system().isPublic(); if (authorizeClient && deployState.tlsClientAuthority().isEmpty()) { - throw new RuntimeException("Client certificate authority security/clients.pem is missing - see: https://cloud.vespa.ai/security-model#data-plane"); + throw new RuntimeException("Client certificate authority security/clients.pem is missing - see: https://cloud.vespa.ai/en/security-model#data-plane"); } EndpointCertificateSecrets endpointCertificateSecrets = deployState.endpointCertificateSecrets().get(); @@ -725,7 +722,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { var hosts = hostSystem.allocateHosts(clusterSpec, capacity, log); return createNodesFromHosts(log, hosts, cluster); } - return singleHostContainerCluster(cluster, hostSystem.getHost(Container.SINGLENODE_CONTAINER_SERVICESPEC), context); + else { + return singleHostContainerCluster(cluster, hostSystem.getHost(Container.SINGLENODE_CONTAINER_SERVICESPEC), context); + } } private List<ApplicationContainer> singleHostContainerCluster(ApplicationContainerCluster cluster, HostResource host, ConfigModelContext context) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java index 705d2dc668d..37a2ef224fc 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java @@ -14,8 +14,6 @@ import com.yahoo.vespa.model.application.validation.RestartConfigs; /** * Common class for config producers for storage and distributor nodes. - * - * TODO: Author */ @RestartConfigs({StorCommunicationmanagerConfig.class, StorStatusConfig.class, StorServerConfig.class, LoadTypeConfig.class, MetricsmanagerConfig.class}) 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 0fdd39e70cf..0de111e459e 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 @@ -12,7 +12,6 @@ import com.yahoo.vespa.model.builder.xml.dom.DomSearchTuningBuilder; import com.yahoo.vespa.model.builder.xml.dom.ModelElement; import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder; import com.yahoo.vespa.model.content.cluster.ContentCluster; -import com.yahoo.vespa.model.content.cluster.DomResourceLimitsBuilder; import com.yahoo.vespa.model.search.AbstractSearchCluster; import com.yahoo.vespa.model.search.IndexedSearchCluster; import com.yahoo.vespa.model.search.NamedSchema; @@ -64,8 +63,10 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster> private final Map<StorageGroup, NodeSpec> groupToSpecMap = new LinkedHashMap<>(); private Optional<ResourceLimits> resourceLimits = Optional.empty(); private final ProtonConfig.Indexing.Optimize.Enum feedSequencerType; + private final int maxPendingMoveOps; private final double defaultFeedConcurrency; private final boolean useBucketExecutorForLidSpaceCompact; + private final boolean useBucketExecutorForBucketMove; private final double defaultMaxDeadBytesRatio; /** Whether the nodes of this cluster also hosts a container cluster in a hosted system */ @@ -204,9 +205,11 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster> this.globallyDistributedDocuments = globallyDistributedDocuments; this.flushOnShutdown = flushOnShutdown; this.combined = combined; + maxPendingMoveOps = featureFlags.maxPendingMoveOps(); feedSequencerType = convertFeedSequencerType(featureFlags.feedSequencerType()); defaultFeedConcurrency = featureFlags.feedConcurrency(); useBucketExecutorForLidSpaceCompact = featureFlags.useBucketExecutorForLidSpaceCompact(); + useBucketExecutorForBucketMove = featureFlags.useBucketExecutorForBucketMove(); defaultMaxDeadBytesRatio = featureFlags.maxDeadBytesRatio(); } @@ -263,7 +266,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster> } public void addSearchNode(DeployState deployState, ContentNode node, StorageGroup parentGroup, ModelElement element) { - AbstractConfigProducer parent = hasIndexedCluster() ? getIndexed() : this; + AbstractConfigProducer<?> parent = hasIndexedCluster() ? getIndexed() : this; NodeSpec spec = getNextSearchNodeSpec(parentGroup); SearchNode searchNode; @@ -429,7 +432,9 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster> } else { builder.indexing.optimize(feedSequencerType); } + builder.maintenancejobs.maxoutstandingmoveops(maxPendingMoveOps); builder.lidspacecompaction.usebucketexecutor(useBucketExecutorForLidSpaceCompact); + builder.bucketmove.usebucketexecutor(useBucketExecutorForBucketMove); } private boolean isGloballyDistributed(NewDocumentType docType) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/DispatchTuning.java b/config-model/src/main/java/com/yahoo/vespa/model/content/DispatchTuning.java index 0f9eb5341ab..3b694f8986c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/DispatchTuning.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/DispatchTuning.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.model.content; /** * Tuning of dispatching to content nodes, see the - * <a href="https://docs.vespa.ai/documentation/reference/services-content.html#dispatch-tuning">dispatch tuning documentation</a>. + * <a href="https://docs.vespa.ai/en/reference/services-content.html#dispatch-tuning">dispatch tuning documentation</a>. * * @author Simon Thoresen Hult */ diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java index 37619d3afc6..5a71f83e468 100644 --- a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java +++ b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java @@ -14,6 +14,7 @@ import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Zone; import com.yahoo.container.core.ApplicationMetadataConfig; import com.yahoo.search.config.QrStartConfig; +import com.yahoo.vespa.config.content.core.StorStatusConfig; import com.yahoo.vespa.config.search.core.ProtonConfig; import com.yahoo.vespa.model.HostResource; import com.yahoo.vespa.model.HostSystem; @@ -1509,6 +1510,7 @@ public class ModelProvisioningTest { assertEquals("Nodes in container cluster", 1, model.getContainerClusters().get("container1").getContainers().size()); assertEquals("Nodes in content cluster (downscaled)", 1, model.getContentClusters().get("content").getRootGroup().getNodes().size()); + model.getConfig(new StorStatusConfig.Builder(), "default"); } @Test diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexingModeChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexingModeChangeValidatorTest.java index ba9dfcdc388..d5c7fb78c89 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexingModeChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexingModeChangeValidatorTest.java @@ -37,7 +37,7 @@ public class IndexingModeChangeValidatorTest { catch (ValidationException e) { assertEquals("indexing-mode-change:\n" + "\tDocument type 'music' in cluster 'default' changed indexing mode from 'indexed' to 'streaming'\n" + - "To allow this add <allow until='yyyy-mm-dd'>indexing-mode-change</allow> to validation-overrides.xml, see https://docs.vespa.ai/documentation/reference/validation-overrides.html", + "To allow this add <allow until='yyyy-mm-dd'>indexing-mode-change</allow> to validation-overrides.xml, see https://docs.vespa.ai/en/reference/validation-overrides.html", e.getMessage()); } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java index 55234a3a96e..3a3dde0cf87 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java @@ -835,6 +835,34 @@ public class ContentBuilderTest extends DomBuilderTest { assertEquals(flag, config.lidspacecompaction().usebucketexecutor()); } + private void verifyThatFeatureFlagControlsUseBucketExecutorForBucketMove(boolean flag) { + DeployState.Builder deployStateBuilder = new DeployState.Builder().properties(new TestProperties().useBucketExecutorForBucketMove(flag)); + VespaModel model = new VespaModelCreatorWithMockPkg(new MockApplicationPackage.Builder() + .withServices(singleNodeContentXml()) + .withSearchDefinition(MockApplicationPackage.MUSIC_SEARCHDEFINITION) + .build()) + .create(deployStateBuilder); + ProtonConfig config = getProtonConfig(model.getContentClusters().values().iterator().next()); + assertEquals(flag, config.bucketmove().usebucketexecutor()); + } + + private void verifyThatFeatureFlagControlsMaxpendingMoveOps(int moveOps) { + DeployState.Builder deployStateBuilder = new DeployState.Builder().properties(new TestProperties().setMaxPendingMoveOps(moveOps)); + VespaModel model = new VespaModelCreatorWithMockPkg(new MockApplicationPackage.Builder() + .withServices(singleNodeContentXml()) + .withSearchDefinition(MockApplicationPackage.MUSIC_SEARCHDEFINITION) + .build()) + .create(deployStateBuilder); + ProtonConfig config = getProtonConfig(model.getContentClusters().values().iterator().next()); + assertEquals(moveOps, config.maintenancejobs().maxoutstandingmoveops()); + } + + @Test + public void verifyMaxPendingMoveOps() { + verifyThatFeatureFlagControlsMaxpendingMoveOps(13); + verifyThatFeatureFlagControlsMaxpendingMoveOps(107); + } + @Test public void verifyUseBucketExecutorForLidSpaceCompact() { verifyThatFeatureFlagControlsUseBucketExecutorForLidSpaceCompact(true); @@ -842,6 +870,12 @@ public class ContentBuilderTest extends DomBuilderTest { } @Test + public void verifyUseBucketExecutorForBucketMove() { + verifyThatFeatureFlagControlsUseBucketExecutorForBucketMove(true); + verifyThatFeatureFlagControlsUseBucketExecutorForBucketMove(false); + } + + @Test public void failWhenNoDocumentsElementSpecified() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The specified content engine requires the <documents> element to be specified."); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/search/test/QueryProfilesTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/container/search/test/QueryProfilesTestCase.java index d1d32df5b56..fc6c5aeb387 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/search/test/QueryProfilesTestCase.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/search/test/QueryProfilesTestCase.java @@ -151,7 +151,7 @@ public class QueryProfilesTestCase { assertEquals(1, logger.entries.size()); assertEquals("This application define query profile types, but has no query profiles referencing them " + "so they have no effect. " + - "See https://docs.vespa.ai/documentation/query-profiles.html", + "See https://docs.vespa.ai/en/query-profiles.html", logger.entries.get(0).message); } @@ -171,7 +171,7 @@ public class QueryProfilesTestCase { assertEquals("This application define query profile types, but has no query profiles referencing them " + "so they have no effect. " + "In particular, the tensors (vector, matrix) will be interpreted as strings, not tensors if sent in requests. " + - "See https://docs.vespa.ai/documentation/query-profiles.html", + "See https://docs.vespa.ai/en/query-profiles.html", logger.entries.get(0).message); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/AccessLogTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/AccessLogTest.java index 56f09eefe82..f3f3b2b1076 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/AccessLogTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/AccessLogTest.java @@ -8,16 +8,15 @@ import com.yahoo.container.logging.ConnectionLogConfig; import com.yahoo.container.logging.FileConnectionLog; import com.yahoo.container.logging.JSONAccessLog; import com.yahoo.container.logging.VespaAccessLog; -import com.yahoo.jdisc.http.server.jetty.VoidConnectionLog; import com.yahoo.vespa.model.container.ApplicationContainerCluster; import com.yahoo.vespa.model.container.component.Component; import org.junit.Test; import org.w3c.dom.Element; import static com.yahoo.text.StringUtilities.quote; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertEquals; /** * @author gjoranv @@ -127,8 +126,6 @@ public class AccessLogTest extends ContainerModelBuilderTestBase { nodesXml, "</container>" ); createModel(root, clusterElem); - Component<?, ?> voidConnectionLogComponent = getContainerComponent("default", VoidConnectionLog.class.getName()); - assertNotNull(voidConnectionLogComponent); Component<?, ?> fileConnectionLogComponent = getContainerComponent("default", FileConnectionLog.class.getName()); assertNull(fileConnectionLogComponent); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java index 35257686a5a..e0e4cbf19c0 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java @@ -728,7 +728,8 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { .build(); createModel(root, state, null, clusterElem); } catch (RuntimeException e) { - assertEquals(e.getMessage(), "Client certificate authority security/clients.pem is missing - see: https://cloud.vespa.ai/security-model#data-plane"); + assertEquals("Client certificate authority security/clients.pem is missing - see: https://cloud.vespa.ai/en/security-model#data-plane", + e.getMessage()); return; } fail(); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java index 7484095c5bc..ce8d2c193b9 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java @@ -6,12 +6,14 @@ import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.model.ConfigModelRegistry; import com.yahoo.config.model.NullConfigModelRegistry; import com.yahoo.config.model.api.HostProvisioner; +import com.yahoo.config.model.api.Provisioned; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.deploy.TestProperties; import com.yahoo.config.model.provision.Host; import com.yahoo.config.model.provision.Hosts; import com.yahoo.config.model.provision.InMemoryProvisioner; import com.yahoo.config.model.provision.SingleNodeProvisioner; +import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeResources; |