From 62f6fc99eba184210c28d1e480b67e6ec3629666 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 27 Apr 2022 15:36:43 +0200 Subject: No functional changes --- .../builder/xml/dom/chains/ChainsBuilder.java | 12 ++++---- .../builder/xml/dom/chains/ComponentsBuilder.java | 32 +++++++++++----------- .../xml/dom/chains/DomChainBuilderBase.java | 15 +++++----- .../builder/xml/dom/chains/DomChainsBuilder.java | 16 +++++------ .../dom/chains/docproc/DocprocChainsBuilder.java | 6 ++-- .../dom/chains/docproc/DomDocprocChainBuilder.java | 9 +++--- .../chains/docproc/DomDocprocChainsBuilder.java | 16 +++++------ .../chains/processing/DomProcessingBuilder.java | 13 ++++----- .../processing/DomProcessingChainBuilder.java | 10 +++---- .../chains/processing/ProcessingChainsBuilder.java | 5 ++-- .../dom/chains/search/DomGenericTargetBuilder.java | 2 +- .../xml/dom/chains/search/DomProviderBuilder.java | 11 +++----- .../dom/chains/search/DomSearchChainBuilder.java | 5 ++-- .../dom/chains/search/DomSearchChainsBuilder.java | 6 ++-- .../xml/dom/chains/search/DomSourceBuilder.java | 5 ++-- .../xml/dom/chains/search/SearchChainsBuilder.java | 4 +-- .../container/http/xml/FilterChainBuilder.java | 6 ++-- .../container/http/xml/FilterChainsBuilder.java | 6 ++-- 18 files changed, 84 insertions(+), 95 deletions(-) diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/ChainsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/ChainsBuilder.java index 5891347f6b4..c48968333ac 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/ChainsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/ChainsBuilder.java @@ -24,8 +24,8 @@ public class ChainsBuilder, CHAIN extends private final Map>> chainType2BuilderClass; // NOTE: The chain type string (key in chainType2BuilderClass) must match the xml tag name for the chain. - public ChainsBuilder(DeployState deployState, AbstractConfigProducer ancestor, List chainsElems, - Map outerComponentTypeByComponentName, + public ChainsBuilder(DeployState deployState, AbstractConfigProducer ancestor, List chainsElems, + Map> outerComponentTypeByComponentName, Map>> chainType2BuilderClass) { this.chainType2BuilderClass = chainType2BuilderClass; @@ -36,8 +36,8 @@ public class ChainsBuilder, CHAIN extends return Collections.unmodifiableCollection(chains); } - private void readChains(DeployState deployState, AbstractConfigProducer ancestor, List chainsElems, - Map outerSearcherTypeByComponentName) { + private void readChains(DeployState deployState, AbstractConfigProducer ancestor, List chainsElems, + Map> outerSearcherTypeByComponentName) { for (Map.Entry>> chainType : chainType2BuilderClass.entrySet()) { @@ -49,9 +49,9 @@ public class ChainsBuilder, CHAIN extends } } - private void readChain(DeployState deployState, AbstractConfigProducer ancestor, Element chainElem, + private void readChain(DeployState deployState, AbstractConfigProducer ancestor, Element chainElem, Class> builderClass, - Map outerSearcherTypeByComponentName) { + Map> outerSearcherTypeByComponentName) { DomChainBuilderBase builder = DomBuilderCreator.create(builderClass, outerSearcherTypeByComponentName); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/ComponentsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/ComponentsBuilder.java index 0d54b7b49f3..931b6807586 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/ComponentsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/ComponentsBuilder.java @@ -38,7 +38,7 @@ public class ComponentsBuilder> { // NOTE: the 'name' string must match the xml tag name for the component in services. public static class ComponentType> { - static List values = new ArrayList<>(); + static List> values = new ArrayList<>(); public static final ComponentType documentprocessor = new ComponentType<>("documentprocessor", DomDocumentProcessorBuilder.class); public static final ComponentType> searcher = new ComponentType<>("searcher", DomSearcherBuilder.class); public static final ComponentType processor = new ComponentType<>("processor", DomProcessorBuilder.class); @@ -63,7 +63,7 @@ public class ComponentsBuilder> { private final Set outerComponentReferences = new LinkedHashSet<>(); private final List componentDefinitions = new ArrayList<>(); - private final Map componentTypesByComponentName = new LinkedHashMap<>(); + private final Map> componentTypesByComponentName = new LinkedHashMap<>(); /** * @param ancestor The parent config producer @@ -73,18 +73,18 @@ public class ComponentsBuilder> { * every component is a definition, not a reference. */ ComponentsBuilder(DeployState deployState, - AbstractConfigProducer ancestor, + AbstractConfigProducer ancestor, Collection> componentTypes, List elementsContainingComponentElems, - Map outerComponentTypeByComponentName) { + Map> outerComponentTypeByComponentName) { readComponents(deployState, ancestor, componentTypes, elementsContainingComponentElems, unmodifiable(outerComponentTypeByComponentName)); } - private void readComponents(DeployState deployState, AbstractConfigProducer ancestor, + private void readComponents(DeployState deployState, AbstractConfigProducer ancestor, Collection> componentTypes, List elementsContainingComponentElems, - Map outerComponentTypeByComponentName) { + Map> outerComponentTypeByComponentName) { for (ComponentType componentType : componentTypes) { for (Element elemContainingComponentElems : elementsContainingComponentElems) { @@ -95,10 +95,10 @@ public class ComponentsBuilder> { } } - private void readComponent(DeployState deployState, AbstractConfigProducer ancestor, + private void readComponent(DeployState deployState, AbstractConfigProducer ancestor, Element componentElement, ComponentType componentType, - Map outerComponentTypeByComponentName) { + Map> outerComponentTypeByComponentName) { ComponentSpecification componentSpecification = XmlHelper.getIdRef(componentElement); @@ -109,9 +109,9 @@ public class ComponentsBuilder> { } } - private void readComponentReference(Element componentElement, ComponentType componentType, + private void readComponentReference(Element componentElement, ComponentType componentType, ComponentSpecification componentSpecification, - Map outerComponentTypeByComponentName) { + Map> outerComponentTypeByComponentName) { String componentName = componentSpecification.getName(); ensureTypesMatch(componentType, outerComponentTypeByComponentName.get(componentName), componentName); @@ -119,14 +119,14 @@ public class ComponentsBuilder> { outerComponentReferences.add(componentSpecification); } - private void readComponentDefinition(DeployState deployState, AbstractConfigProducer ancestor, Element componentElement, ComponentType componentType) { + private void readComponentDefinition(DeployState deployState, AbstractConfigProducer ancestor, Element componentElement, ComponentType componentType) { T component = componentType.createBuilder().build(deployState, ancestor, componentElement); componentDefinitions.add(component); updateComponentTypes(component.getComponentId(), componentType); } - private void updateComponentTypes(ComponentId componentId, ComponentType componentType) { - ComponentType oldType = componentTypesByComponentName.put(componentId.getName(), componentType); + private void updateComponentTypes(ComponentId componentId, ComponentType componentType) { + ComponentType oldType = componentTypesByComponentName.put(componentId.getName(), componentType); if (oldType != null) { ensureTypesMatch(componentType, oldType, componentId.getName()); } @@ -139,14 +139,14 @@ public class ComponentsBuilder> { " so no additional attributes or nested elements are allowed"); } - private void ensureTypesMatch(ComponentType type1, ComponentType type2, String componentName) { + private void ensureTypesMatch(ComponentType type1, ComponentType type2, String componentName) { if (!type1.equals(type2)) { throw new IllegalArgumentException("Two different types declared for the component with name '" + componentName + "' (" + type1.name + " != " + type2.name + ")."); } } - private Map unmodifiable(Map outerComponentTypeByComponentName) { + private Map> unmodifiable(Map> outerComponentTypeByComponentName) { return (outerComponentTypeByComponentName != null)? Collections.unmodifiableMap(outerComponentTypeByComponentName): Collections.emptyMap(); @@ -156,7 +156,7 @@ public class ComponentsBuilder> { return Collections.unmodifiableCollection(componentDefinitions); } - public Map getComponentTypeByComponentName() { + public Map> getComponentTypeByComponentName() { return Collections.unmodifiableMap(componentTypesByComponentName); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/DomChainBuilderBase.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/DomChainBuilderBase.java index 349a89afa0c..a6c9cca29e7 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/DomChainBuilderBase.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/DomChainBuilderBase.java @@ -8,9 +8,8 @@ import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder; import com.yahoo.vespa.model.container.component.chain.Chain; import com.yahoo.vespa.model.container.component.chain.ChainedComponent; import org.w3c.dom.Element; - -import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.Map; /** @@ -20,18 +19,18 @@ import java.util.Map; public abstract class DomChainBuilderBase, CHAIN extends Chain> extends VespaDomBuilder.DomConfigProducerBuilder { - private Collection> allowedComponentTypes; - protected final Map outerComponentTypeByComponentName; + private final Collection> allowedComponentTypes; + protected final Map> outerComponentTypeByComponentName; public DomChainBuilderBase(Collection> allowedComponentTypes, - Map outerComponentTypeByComponentName) { + Map> outerComponentTypeByComponentName) { this.allowedComponentTypes = allowedComponentTypes; this.outerComponentTypeByComponentName = outerComponentTypeByComponentName; } - public final CHAIN doBuild(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec) { + public final CHAIN doBuild(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec) { ComponentsBuilder componentsBuilder = - new ComponentsBuilder<>(deployState, ancestor, allowedComponentTypes, Arrays.asList(producerSpec), outerComponentTypeByComponentName); + new ComponentsBuilder<>(deployState, ancestor, allowedComponentTypes, List.of(producerSpec), outerComponentTypeByComponentName); ChainSpecification specWithoutInnerComponents = new ChainSpecificationBuilder(producerSpec).build(componentsBuilder.getOuterComponentReferences()); @@ -47,6 +46,6 @@ public abstract class DomChainBuilderBase, } } - protected abstract CHAIN buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, + protected abstract CHAIN buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, ChainSpecification specWithoutInnerComponents); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/DomChainsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/DomChainsBuilder.java index a5e09d206bf..2bc7e8f2658 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/DomChainsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/DomChainsBuilder.java @@ -38,13 +38,13 @@ class DomChainsBuilder, CHAIN extends Chai this.appPkgChainsDir = appPkgChainsDir; } - protected abstract CHAINS newChainsInstance(AbstractConfigProducer parent); + protected abstract CHAINS newChainsInstance(AbstractConfigProducer parent); @Override - protected final CHAINS doBuild(DeployState deployState, AbstractConfigProducer parent, Element chainsElement) { + protected final CHAINS doBuild(DeployState deployState, AbstractConfigProducer parent, Element chainsElement) { CHAINS chains = newChainsInstance(parent); - List allChainElements = allChainElements(deployState, parent, chainsElement); + List allChainElements = allChainElements(deployState, chainsElement); if (! allChainElements.isEmpty()) { ComponentsBuilder outerComponentsBuilder = readOuterComponents(deployState, chains, allChainElements); ChainsBuilder chainsBuilder = readChains(deployState, chains, allChainElements, @@ -56,7 +56,7 @@ class DomChainsBuilder, CHAIN extends Chai return chains; } - private List allChainElements(DeployState deployState, AbstractConfigProducer ancestor, Element chainsElement) { + private List allChainElements(DeployState deployState, Element chainsElement) { List chainsElements = new ArrayList<>(); if (outerChainsElem != null) chainsElements.add(outerChainsElem); @@ -68,18 +68,18 @@ class DomChainsBuilder, CHAIN extends Chai return chainsElements; } - private ComponentsBuilder readOuterComponents(DeployState deployState, AbstractConfigProducer ancestor, List chainsElems) { + private ComponentsBuilder readOuterComponents(DeployState deployState, AbstractConfigProducer ancestor, List chainsElems) { return new ComponentsBuilder<>(deployState, ancestor, allowedComponentTypes, chainsElems, null); } protected abstract - ChainsBuilder readChains(DeployState deployState, AbstractConfigProducer ancestor, List allChainsElems, - Map outerComponentTypeByComponentName); + ChainsBuilder readChains(DeployState deployState, AbstractConfigProducer ancestor, List allChainsElems, + Map> outerComponentTypeByComponentName); private void addOuterComponents(CHAINS chains, ComponentsBuilder outerComponentsBuilder) { assert (outerComponentsBuilder.getOuterComponentReferences().isEmpty()); - for (ChainedComponent outerComponent : outerComponentsBuilder.getComponentDefinitions()) { + for (ChainedComponent outerComponent : outerComponentsBuilder.getComponentDefinitions()) { chains.add(outerComponent); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DocprocChainsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DocprocChainsBuilder.java index 7d2a5a46bc4..17441b2d7cd 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DocprocChainsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DocprocChainsBuilder.java @@ -24,13 +24,13 @@ public class DocprocChainsBuilder extends ChainsBuilder>> chainType2builderClass = Collections.unmodifiableMap( - new LinkedHashMap>>() {{ + new LinkedHashMap<>() {{ put("docprocchain", DomDocprocChainBuilder.class); put("chain", DomDocprocChainBuilder.class); }}); - public DocprocChainsBuilder(DeployState deployState, AbstractConfigProducer ancestor, List docprocChainsElements, - Map outerSearcherTypeByComponentName) { + public DocprocChainsBuilder(DeployState deployState, AbstractConfigProducer ancestor, List docprocChainsElements, + Map> outerSearcherTypeByComponentName) { super(deployState, ancestor, docprocChainsElements, outerSearcherTypeByComponentName, chainType2builderClass); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DomDocprocChainBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DomDocprocChainBuilder.java index 299d8172f6c..d4393b2cd9e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DomDocprocChainBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DomDocprocChainBuilder.java @@ -10,8 +10,7 @@ import com.yahoo.vespa.model.builder.xml.dom.chains.DomChainBuilderBase; import com.yahoo.vespa.model.container.docproc.DocprocChain; import com.yahoo.vespa.model.container.docproc.DocumentProcessor; import org.w3c.dom.Element; - -import java.util.Arrays; +import java.util.List; import java.util.Map; /** @@ -21,12 +20,12 @@ import java.util.Map; */ public class DomDocprocChainBuilder extends DomChainBuilderBase { - public DomDocprocChainBuilder(Map outerComponentTypeByComponentName) { - super(Arrays.asList(ComponentsBuilder.ComponentType.documentprocessor), outerComponentTypeByComponentName); + public DomDocprocChainBuilder(Map> outerComponentTypeByComponentName) { + super(List.of(ComponentsBuilder.ComponentType.documentprocessor), outerComponentTypeByComponentName); } @Override - protected DocprocChain buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, + protected DocprocChain buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, ChainSpecification specWithoutInnerComponents) { Map, String> fieldNameSchemaMap = DocumentProcessorModelBuilder.parseFieldNameSchemaMap(producerSpec); return new DocprocChain(specWithoutInnerComponents, fieldNameSchemaMap); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DomDocprocChainsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DomDocprocChainsBuilder.java index dfb849b2e0f..ae22a6971bb 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DomDocprocChainsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/docproc/DomDocprocChainsBuilder.java @@ -1,17 +1,15 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.builder.xml.dom.chains.docproc; +import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; -import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.vespa.model.builder.xml.dom.chains.ComponentsBuilder.ComponentType; import com.yahoo.vespa.model.builder.xml.dom.chains.DomChainsBuilder; -import com.yahoo.vespa.model.container.docproc.DocprocChains; import com.yahoo.vespa.model.container.docproc.DocprocChain; +import com.yahoo.vespa.model.container.docproc.DocprocChains; import com.yahoo.vespa.model.container.docproc.DocumentProcessor; import org.w3c.dom.Element; - -import java.util.Arrays; import java.util.List; import java.util.Map; @@ -22,18 +20,18 @@ import java.util.Map; */ public class DomDocprocChainsBuilder extends DomChainsBuilder { public DomDocprocChainsBuilder(Element outerChainsElem, boolean supportDocprocChainsDir) { - super(outerChainsElem, Arrays.asList(ComponentType.documentprocessor), - supportDocprocChainsDir ? ApplicationPackage.DOCPROCCHAINS_DIR: null); + super(outerChainsElem, List.of(ComponentType.documentprocessor), + supportDocprocChainsDir ? ApplicationPackage.DOCPROCCHAINS_DIR: null); } @Override - protected DocprocChains newChainsInstance(AbstractConfigProducer parent) { + protected DocprocChains newChainsInstance(AbstractConfigProducer parent) { return new DocprocChains(parent, "docprocchains"); } @Override - protected DocprocChainsBuilder readChains(DeployState deployState, AbstractConfigProducer ancestor, List docprocChainsElements, - Map outerComponentTypeByComponentName) { + protected DocprocChainsBuilder readChains(DeployState deployState, AbstractConfigProducer ancestor, List docprocChainsElements, + Map> outerComponentTypeByComponentName) { return new DocprocChainsBuilder(deployState, ancestor, docprocChainsElements, outerComponentTypeByComponentName); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/DomProcessingBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/DomProcessingBuilder.java index 059cd157322..d29643c78e2 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/DomProcessingBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/DomProcessingBuilder.java @@ -1,17 +1,15 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.builder.xml.dom.chains.processing; +import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; -import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.vespa.model.builder.xml.dom.chains.ComponentsBuilder; import com.yahoo.vespa.model.builder.xml.dom.chains.DomChainsBuilder; import com.yahoo.vespa.model.container.processing.ProcessingChain; import com.yahoo.vespa.model.container.processing.ProcessingChains; import com.yahoo.vespa.model.container.processing.Processor; import org.w3c.dom.Element; - -import java.util.Arrays; import java.util.List; import java.util.Map; @@ -19,22 +17,21 @@ import java.util.Map; * Root builder of the processing model * * @author bratseth - * @since 5.1.6 */ public class DomProcessingBuilder extends DomChainsBuilder { public DomProcessingBuilder(Element outerChainsElem) { - super(outerChainsElem, Arrays.asList(ComponentsBuilder.ComponentType.processor), ApplicationPackage.PROCESSORCHAINS_DIR); + super(outerChainsElem, List.of(ComponentsBuilder.ComponentType.processor), ApplicationPackage.PROCESSORCHAINS_DIR); } @Override - protected ProcessingChains newChainsInstance(AbstractConfigProducer parent) { + protected ProcessingChains newChainsInstance(AbstractConfigProducer parent) { return new ProcessingChains(parent, "processing"); } @Override - protected ProcessingChainsBuilder readChains(DeployState deployState, AbstractConfigProducer ancestor, List processingChainsElements, - Map outerComponentTypeByComponentName) { + protected ProcessingChainsBuilder readChains(DeployState deployState, AbstractConfigProducer ancestor, List processingChainsElements, + Map> outerComponentTypeByComponentName) { return new ProcessingChainsBuilder(deployState, ancestor, processingChainsElements, outerComponentTypeByComponentName); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/DomProcessingChainBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/DomProcessingChainBuilder.java index 4f4845a06b1..fa6fff9dee3 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/DomProcessingChainBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/DomProcessingChainBuilder.java @@ -9,21 +9,19 @@ import com.yahoo.vespa.model.builder.xml.dom.chains.DomChainBuilderBase; import com.yahoo.vespa.model.container.processing.ProcessingChain; import com.yahoo.vespa.model.container.processing.Processor; import org.w3c.dom.Element; - -import java.util.Arrays; +import java.util.List; import java.util.Map; /** * @author bratseth - * @since 5.1.6 */ public class DomProcessingChainBuilder extends DomChainBuilderBase { - public DomProcessingChainBuilder(Map outerComponentTypeByComponentName) { - super(Arrays.asList(ComponentsBuilder.ComponentType.processor), outerComponentTypeByComponentName); + public DomProcessingChainBuilder(Map> outerComponentTypeByComponentName) { + super(List.of(ComponentsBuilder.ComponentType.processor), outerComponentTypeByComponentName); } - protected ProcessingChain buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, + protected ProcessingChain buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, ChainSpecification specWithoutInnerComponents) { return new ProcessingChain(specWithoutInnerComponents); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/ProcessingChainsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/ProcessingChainsBuilder.java index c33807b0741..f29b46cc327 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/ProcessingChainsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/processing/ProcessingChainsBuilder.java @@ -20,7 +20,6 @@ import java.util.Map; * Creates all processing chains from xml. * * @author bratseth - * @since 5.1.6 */ public class ProcessingChainsBuilder extends ChainsBuilder { @@ -30,8 +29,8 @@ public class ProcessingChainsBuilder extends ChainsBuilder processingChainsElements, - Map outerSearcherTypeByComponentName) { + public ProcessingChainsBuilder(DeployState deployState, AbstractConfigProducer ancestor, List processingChainsElements, + Map> outerSearcherTypeByComponentName) { super(deployState, ancestor, processingChainsElements, outerSearcherTypeByComponentName, chainType2builderClass); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomGenericTargetBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomGenericTargetBuilder.java index a220d08cf15..fd0c14db3c5 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomGenericTargetBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomGenericTargetBuilder.java @@ -19,7 +19,7 @@ import java.util.Map; */ abstract public class DomGenericTargetBuilder extends DomChainBuilderBase, T> { - DomGenericTargetBuilder(Map outerSearcherTypeByComponentName) { + DomGenericTargetBuilder(Map> outerSearcherTypeByComponentName) { super(Arrays.asList(ComponentsBuilder.ComponentType.searcher, ComponentsBuilder.ComponentType.federation), outerSearcherTypeByComponentName); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomProviderBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomProviderBuilder.java index 19c5c489f7e..b15c461f72f 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomProviderBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomProviderBuilder.java @@ -1,22 +1,19 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.builder.xml.dom.chains.search; -import com.yahoo.binaryprefix.BinaryPrefix; import com.yahoo.component.ComponentId; import com.yahoo.component.chain.model.ChainSpecification; import com.yahoo.config.model.deploy.DeployState; +import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.search.searchchain.model.federation.FederationOptions; import com.yahoo.search.searchchain.model.federation.LocalProviderSpec; import com.yahoo.text.XML; -import com.yahoo.config.model.producer.AbstractConfigProducer; -import com.yahoo.vespa.model.builder.xml.dom.BinaryScaledAmountParser; import com.yahoo.vespa.model.builder.xml.dom.chains.ComponentsBuilder; import com.yahoo.vespa.model.container.search.searchchain.GenericProvider; import com.yahoo.vespa.model.container.search.searchchain.LocalProvider; import com.yahoo.vespa.model.container.search.searchchain.Provider; import com.yahoo.vespa.model.container.search.searchchain.Source; import org.w3c.dom.Element; - import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -123,12 +120,12 @@ public class DomProviderBuilder extends DomGenericTargetBuilder { } } - public DomProviderBuilder(Map outerSearcherTypeByComponentName) { + public DomProviderBuilder(Map> outerSearcherTypeByComponentName) { super(outerSearcherTypeByComponentName); } @Override - protected Provider buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element providerElement, + protected Provider buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element providerElement, ChainSpecification specWithoutInnerComponents) { ProviderReader providerReader = new ProviderReader(providerElement); @@ -143,7 +140,7 @@ public class DomProviderBuilder extends DomGenericTargetBuilder { } - private Collection buildSources(DeployState deployState, AbstractConfigProducer ancestor, Element providerElement) { + private Collection buildSources(DeployState deployState, AbstractConfigProducer ancestor, Element providerElement) { List sources = new ArrayList<>(); for (Element sourceElement : XML.getChildren(providerElement, "source")) { sources.add(new DomSourceBuilder(outerComponentTypeByComponentName).build(deployState, ancestor, sourceElement)); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSearchChainBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSearchChainBuilder.java index 387bd916579..d4b65f85f3d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSearchChainBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSearchChainBuilder.java @@ -19,13 +19,14 @@ import java.util.Map; */ public class DomSearchChainBuilder extends DomChainBuilderBase, SearchChain> { - public DomSearchChainBuilder(Map outerSearcherTypeByComponentName) { + public DomSearchChainBuilder(Map> outerSearcherTypeByComponentName) { super(Arrays.asList(ComponentsBuilder.ComponentType.searcher, ComponentsBuilder.ComponentType.federation), outerSearcherTypeByComponentName); } - protected SearchChain buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, + protected SearchChain buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, ChainSpecification specWithoutInnerComponents) { return new SearchChain(specWithoutInnerComponents); } + } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSearchChainsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSearchChainsBuilder.java index b153ca68590..d4bd93f67c7 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSearchChainsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSearchChainsBuilder.java @@ -33,13 +33,13 @@ public class DomSearchChainsBuilder extends DomChainsBuilder, Search } @Override - protected SearchChains newChainsInstance(AbstractConfigProducer parent) { + protected SearchChains newChainsInstance(AbstractConfigProducer parent) { return new SearchChains(parent, "searchchains"); } @Override - protected SearchChainsBuilder readChains(DeployState deployState, AbstractConfigProducer ancestor, List searchChainsElements, - Map outerComponentTypeByComponentName) { + protected SearchChainsBuilder readChains(DeployState deployState, AbstractConfigProducer ancestor, List searchChainsElements, + Map> outerComponentTypeByComponentName) { return new SearchChainsBuilder(deployState, ancestor, searchChainsElements, outerComponentTypeByComponentName); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSourceBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSourceBuilder.java index 5d6bde5f0f8..a567e09fa7d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSourceBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/DomSourceBuilder.java @@ -16,11 +16,11 @@ import java.util.Map; * @author Tony Vaagenes */ public class DomSourceBuilder extends DomGenericTargetBuilder { - DomSourceBuilder(Map outerSearcherTypeByComponentName) { + DomSourceBuilder(Map> outerSearcherTypeByComponentName) { super(outerSearcherTypeByComponentName); } - protected Source buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, ChainSpecification specWithoutInnerComponents) { + protected Source buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, ChainSpecification specWithoutInnerComponents) { Source.GroupOption groupOption = XmlHelper.isReference(producerSpec) ? Source.GroupOption.participant : @@ -28,4 +28,5 @@ public class DomSourceBuilder extends DomGenericTargetBuilder { return new Source(specWithoutInnerComponents, readFederationOptions(producerSpec), groupOption); } + } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/SearchChainsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/SearchChainsBuilder.java index 298420e3a68..e13e741dd5d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/SearchChainsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/chains/search/SearchChainsBuilder.java @@ -31,8 +31,8 @@ public class SearchChainsBuilder extends ChainsBuilder, SearchChain> put("provider", DomProviderBuilder.class); }}); - public SearchChainsBuilder(DeployState deployState, AbstractConfigProducer ancestor, List searchChainsElements, - Map outerSearcherTypeByComponentName) { + public SearchChainsBuilder(DeployState deployState, AbstractConfigProducer ancestor, List searchChainsElements, + Map> outerSearcherTypeByComponentName) { super(deployState, ancestor, searchChainsElements, outerSearcherTypeByComponentName, chainType2builderClass); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/FilterChainBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/FilterChainBuilder.java index 334b41d5e8e..293480e6c7f 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/FilterChainBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/FilterChainBuilder.java @@ -19,15 +19,15 @@ import static com.yahoo.vespa.model.builder.xml.dom.chains.ComponentsBuilder.Com * @author Tony Vaagenes */ public class FilterChainBuilder extends DomChainBuilderBase> { - private static Collection> allowedComponentTypes = Collections.singleton(ComponentType.filter); + private static final Collection> allowedComponentTypes = Collections.singleton(ComponentType.filter); - public FilterChainBuilder(Map outerFilterTypeByComponentName) { + public FilterChainBuilder(Map> outerFilterTypeByComponentName) { super(allowedComponentTypes, outerFilterTypeByComponentName); } @Override - protected Chain buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, ChainSpecification specWithoutInnerComponents) { + protected Chain buildChain(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec, ChainSpecification specWithoutInnerComponents) { return new Chain<>(specWithoutInnerComponents); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/FilterChainsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/FilterChainsBuilder.java index e85e853f989..c75d8225843 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/FilterChainsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/FilterChainsBuilder.java @@ -35,15 +35,15 @@ public class FilterChainsBuilder extends DomChainsBuilder, } @Override - protected FilterChains newChainsInstance(AbstractConfigProducer parent) { + protected FilterChains newChainsInstance(AbstractConfigProducer parent) { return new FilterChains(parent); } @Override protected ChainsBuilder> readChains( DeployState deployState, - AbstractConfigProducer ancestor, - List allChainsElems, Map outerComponentTypeByComponentName) { + AbstractConfigProducer ancestor, + List allChainsElems, Map> outerComponentTypeByComponentName) { return new ChainsBuilder<>(deployState, ancestor, allChainsElems, outerComponentTypeByComponentName, chainType2BuilderClass); } -- cgit v1.2.3 From 24ec516e9fead0b12fa20a9ed282cb57b2c4f817 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 27 Apr 2022 20:42:59 +0200 Subject: Validate file extensions for more directories --- .../provider/FilesApplicationPackage.java | 38 +++++++++++++++------- config-model-api/abi-spec.json | 1 + .../config/application/api/ApplicationPackage.java | 2 ++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java index 41896468769..ce33332cf13 100644 --- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java +++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java @@ -89,6 +89,7 @@ public class FilesApplicationPackage extends AbstractApplicationPackage { private static final Logger log = Logger.getLogger(FilesApplicationPackage.class.getName()); private static final String META_FILE_NAME = ".applicationMetaData"; + private static final Map> validFileExtensions; private final File appDir; private final File preprocessedDir; @@ -750,28 +751,43 @@ public class FilesApplicationPackage extends AbstractApplicationPackage { /* Validates that files in application dir and subdirectories have a known extension */ public void validateFileExtensions(boolean throwIfInvalid) { - // TODO: Define this for all subdirs - Map> validFileSuffixes = Map.of( - QUERY_PROFILES_DIR, Set.of(".xml"), - RULES_DIR, Set.of(".sr"), - SCHEMAS_DIR, Set.of(".sd", ".expression"), - SEARCH_DEFINITIONS_DIR, Set.of(".sd", ".expression")); - - validFileSuffixes.forEach((key, value) -> { + validFileExtensions.forEach((key, value) -> { java.nio.file.Path path = appDir.toPath().resolve((key.toFile().toPath())); File dir = path.toFile(); if ( ! dir.exists() || ! dir.isDirectory()) return; try (var filesInPath = Files.list(path)) { - filesInPath.forEach(f -> { - validateFileSuffix(path, f, value, throwIfInvalid); - }); + filesInPath.forEach(f -> validateFileSuffix(path, f, value, throwIfInvalid)); } catch (IOException e) { log.log(Level.WARNING, "Unable to list files in " + dir, e); } }); } + static { + validFileExtensions = Map.ofEntries( + Map.entry(Path.fromString(COMPONENT_DIR), Set.of(".jar")), + Map.entry(CONSTANTS_DIR, Set.of(".json", ".json.lz4")), + Map.entry(Path.fromString(DOCPROCCHAINS_DIR), Set.of(".xml")), + Map.entry(MODELS_DIR, Set.of(".model")), + Map.entry(PAGE_TEMPLATES_DIR, Set.of(".xml")), + Map.entry(Path.fromString(PROCESSORCHAINS_DIR), Set.of(".xml")), + Map.entry(QUERY_PROFILES_DIR, Set.of(".xml")), + Map.entry(QUERY_PROFILE_TYPES_DIR, Set.of(".xml")), + Map.entry(Path.fromString(ROUTINGTABLES_DIR), Set.of(".xml")), + Map.entry(RULES_DIR, Set.of(RULES_NAME_SUFFIX)), + // TODO: Might have rank profiles in subdirs: schema-name]/[rank-profile].profile + Map.entry(SCHEMAS_DIR, Set.of(SD_NAME_SUFFIX, RANKEXPRESSION_NAME_SUFFIX)), + Map.entry(Path.fromString(SEARCHCHAINS_DIR), Set.of(".xml")), + // TODO: Might have rank profiles in subdirs: [schema-name]/[rank-profile].profile + Map.entry(SEARCH_DEFINITIONS_DIR, Set.of(SD_NAME_SUFFIX, RANKEXPRESSION_NAME_SUFFIX)), + Map.entry(SECURITY_DIR, Set.of(".pem"))); + + // TODO: Files that according to doc (https://docs.vespa.ai/en/reference/schema-reference.html) can be anywhere in the application package: + // constant tensors (.json, .json.lz4) + // onnx model files (.onnx) + } + private void validateFileSuffix(java.nio.file.Path dir, java.nio.file.Path pathToFile, Set allowedSuffixes, boolean throwIfInvalid) { String fileName = pathToFile.toFile().getName(); if (allowedSuffixes.stream().noneMatch(fileName::endsWith)) { diff --git a/config-model-api/abi-spec.json b/config-model-api/abi-spec.json index 74c50e948a4..6e02b88e22e 100644 --- a/config-model-api/abi-spec.json +++ b/config-model-api/abi-spec.json @@ -145,6 +145,7 @@ "public static final com.yahoo.path.Path MODELS_DIR", "public static final com.yahoo.path.Path MODELS_GENERATED_DIR", "public static final com.yahoo.path.Path MODELS_GENERATED_REPLICATED_DIR", + "public static final com.yahoo.path.Path CONSTANTS_DIR", "public static final java.lang.String CONFIG_DEFINITIONS_DIR", "public static final com.yahoo.path.Path QUERY_PROFILES_DIR", "public static final com.yahoo.path.Path QUERY_PROFILE_TYPES_DIR", diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java index c40ce1ebeb1..18d40025af7 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java @@ -48,6 +48,8 @@ public interface ApplicationPackage { Path MODELS_GENERATED_DIR = Path.fromString("models.generated"); /** Files generated from machine-learned models which should be replicated in ZooKeeper */ Path MODELS_GENERATED_REPLICATED_DIR = MODELS_GENERATED_DIR.append("replicated"); + /** Constant tensors */ + Path CONSTANTS_DIR = Path.fromString("constants"); // NOTE: this directory is created in serverdb during deploy, and should not exist in the original user application /** Do not use */ -- cgit v1.2.3