summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <jonbratseth@yahoo.com>2018-02-27 14:33:55 +0100
committerGitHub <noreply@github.com>2018-02-27 14:33:55 +0100
commit8302f5362378e185aefc3084de0114272623b072 (patch)
treed7ea38b1e715a49ba7080e71c2acd06c7ffda185
parentbec1ef560992ebcd0a46f37cff6b52b93169e858 (diff)
parent8fcd3d7409d83eb0823f34652629abce620be651 (diff)
Merge pull request #5160 from vespa-engine/bratseth/dont-validate-on-reload
Don't validate when reloading models
-rw-r--r--application/src/main/java/com/yahoo/application/Application.java2
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java13
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java2
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/FieldOperationApplierForSearch.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java22
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/UnprocessingSearchBuilder.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/AddExtraFieldsToDocument.java24
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributeProperties.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributesImplicitWord.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/BuiltInFieldSets.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java22
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/DeprecateAttributePrefetch.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/DisallowComplexMapAndWsetKeyTypes.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/DiversitySettingsValidator.java14
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ExactMatch.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/FastAccessValidator.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/FieldSetValidity.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/FilterFieldNames.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java88
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaryFields.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummayValidator.java11
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java28
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexFieldNames.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexSettingsNonFieldNames.java11
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexTo2FieldSet.java33
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java29
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java31
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java8
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValues.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IntegerIndex2Attribute.java12
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/LiteralBoost.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeAliases.java21
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeDefaultSummaryTheSuperSet.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchConsistency.java16
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchPhaseSettingsValidator.java17
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/MultifieldIndexHarmonizer.java15
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/NGramMatch.java16
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/OptimizeIlscript.java19
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java24
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java8
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java13
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidator.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ReferenceFieldsProcessor.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedDocumentNames.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedMacroNames.java12
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SearchMustHaveDocument.java12
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SetLanguage.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SetRankTypeEmptyOnFilters.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SortingSettings.java12
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/StringSettingsOnNonStringFields.java9
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java40
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java14
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java13
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryNamesFieldCollisions.java21
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/TagType.java17
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/TextMatch.java32
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/TypedTransformProvider.java21
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/UriHack.java13
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/UrlFieldValidator.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldWithIndexSettingsCreatesIndex.java26
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/WordMatch.java8
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java8
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java8
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java19
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/IdTestCase.java3
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java3
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryMapTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/TypeConversionTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributePropertiesTestCase.java7
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java7
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummaryValidatorTestCase.java4
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingScriptRewriterTestCase.java5
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java3
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidatorTestCase.java7
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ReservedMacroNamesTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java9
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ValidateFieldTypesTest.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/documentmodel/DocumentModelBuilderTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java4
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java4
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/DeploymentFileValidatorTest.java3
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java6
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/configserver/ConfigserverClusterTest.java6
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java10
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/xml/RoutingBuilderTest.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/StorageNodeTest.java8
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java4
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java10
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithMockPkg.java4
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java2
-rwxr-xr-xconfigserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java2
-rw-r--r--container-core/src/test/java/com/yahoo/container/jdisc/LoggingTestCase.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java3
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionVisitor.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java5
-rw-r--r--standalone-container/src/main/scala/com/yahoo/container/standalone/StandaloneContainerApplication.scala2
116 files changed, 603 insertions, 500 deletions
diff --git a/application/src/main/java/com/yahoo/application/Application.java b/application/src/main/java/com/yahoo/application/Application.java
index 88140873b7b..5221f95f897 100644
--- a/application/src/main/java/com/yahoo/application/Application.java
+++ b/application/src/main/java/com/yahoo/application/Application.java
@@ -112,7 +112,7 @@ public final class Application implements AutoCloseable {
.applicationPackage(FilesApplicationPackage.fromFile(path.toFile(),
/* Include source files */ true))
.deployLogger((level, s) -> { })
- .build();
+ .build(true);
return new VespaModel(new NullConfigModelRegistry(), deployState);
} catch (IOException | SAXException e) {
throw new IllegalArgumentException("Error creating application from '" + path + "'", e);
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 bd94f67e4a7..3dafb521dc8 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
@@ -70,11 +70,11 @@ public class DeployState implements ConfigDefinitionStore {
private final HostProvisioner provisioner;
public static DeployState createTestState() {
- return new Builder().build();
+ return new Builder().build(true);
}
public static DeployState createTestState(ApplicationPackage applicationPackage) {
- return new Builder().applicationPackage(applicationPackage).build();
+ return new Builder().applicationPackage(applicationPackage).build(true);
}
private DeployState(ApplicationPackage applicationPackage, SearchDocumentModel searchDocumentModel, RankProfileRegistry rankProfileRegistry,
@@ -288,11 +288,11 @@ public class DeployState implements ConfigDefinitionStore {
return this;
}
- public DeployState build() {
+ public DeployState build(boolean validate) {
RankProfileRegistry rankProfileRegistry = new RankProfileRegistry();
QueryProfiles queryProfiles = new QueryProfilesBuilder().build(applicationPackage);
SemanticRules semanticRules = new SemanticRuleBuilder().build(applicationPackage);
- SearchDocumentModel searchDocumentModel = createSearchDocumentModel(rankProfileRegistry, logger, queryProfiles);
+ SearchDocumentModel searchDocumentModel = createSearchDocumentModel(rankProfileRegistry, logger, queryProfiles, validate);
return new DeployState(applicationPackage, searchDocumentModel, rankProfileRegistry, fileRegistry, logger, hostProvisioner,
properties, permanentApplicationPackage, configDefinitionRepo, previousModel, rotations,
zone, queryProfiles, semanticRules, now, wantedNodeVespaVersion);
@@ -300,7 +300,8 @@ public class DeployState implements ConfigDefinitionStore {
private SearchDocumentModel createSearchDocumentModel(RankProfileRegistry rankProfileRegistry,
DeployLogger logger,
- QueryProfiles queryProfiles) {
+ QueryProfiles queryProfiles,
+ boolean validate) {
Collection<NamedReader> readers = applicationPackage.getSearchDefinitions();
Map<String, String> names = new LinkedHashMap<>();
SearchBuilder builder = new SearchBuilder(applicationPackage, rankProfileRegistry, queryProfiles.getRegistry());
@@ -323,7 +324,7 @@ public class DeployState implements ConfigDefinitionStore {
closeIgnoreException(reader.getReader());
}
}
- builder.build(logger);
+ builder.build(validate, logger);
return SearchDocumentModel.fromBuilderAndNames(builder, names);
}
diff --git a/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java b/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java
index a3429c0471d..d1e899f3763 100644
--- a/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java
+++ b/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java
@@ -57,7 +57,7 @@ public class MockRoot extends AbstractConfigProducerRoot {
}
public MockRoot(String rootConfigId, ApplicationPackage applicationPackage) {
- this(rootConfigId, new DeployState.Builder().applicationPackage(applicationPackage).build());
+ this(rootConfigId, new DeployState.Builder().applicationPackage(applicationPackage).build(true));
}
public MockRoot(String rootConfigId, DeployState deployState) {
diff --git a/config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java b/config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java
index b538468d0bc..9fe0c92141f 100644
--- a/config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java
+++ b/config-model/src/main/java/com/yahoo/config/model/test/TestDriver.java
@@ -80,7 +80,7 @@ public class TestDriver {
* @return a producer root capable of answering getConfig requests.
*/
public TestRoot buildModel(ApplicationPackage applicationPackage) {
- return buildModel(new DeployState.Builder().applicationPackage(applicationPackage).build());
+ return buildModel(new DeployState.Builder().applicationPackage(applicationPackage).build(true));
}
/**
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/FieldOperationApplierForSearch.java b/config-model/src/main/java/com/yahoo/searchdefinition/FieldOperationApplierForSearch.java
index 1019b794cdd..fd92b724a60 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/FieldOperationApplierForSearch.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/FieldOperationApplierForSearch.java
@@ -8,6 +8,7 @@ import com.yahoo.searchdefinition.document.SDDocumentType;
* @author Einar M R Rosenvinge
*/
public class FieldOperationApplierForSearch extends FieldOperationApplier {
+
@Override
public void process(SDDocumentType sdoc) {
//Do nothing
@@ -18,4 +19,5 @@ public class FieldOperationApplierForSearch extends FieldOperationApplier {
apply(field);
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
index e7cd21ac834..8ca82008e8b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
@@ -196,7 +196,7 @@ public class SearchBuilder {
* @throws IllegalStateException Thrown if this method has already been called.
*/
public void build() {
- build(new BaseDeployLogger());
+ build(true, new BaseDeployLogger());
}
/**
@@ -206,7 +206,7 @@ public class SearchBuilder {
* @throws IllegalStateException Thrown if this method has already been called.
* @param deployLogger The logger to use during build
*/
- public void build(DeployLogger deployLogger) {
+ public void build(boolean validate, DeployLogger deployLogger) {
if (isBuilt) throw new IllegalStateException("Model already built");
List<Search> built = new ArrayList<>();
@@ -227,20 +227,20 @@ public class SearchBuilder {
DocumentReferenceResolver resolver = new DocumentReferenceResolver(searchList);
sdocs.forEach(resolver::resolveReferences);
- DocumentGraphValidator validator = new DocumentGraphValidator();
- validator.validateDocumentGraph(sdocs);
+ if (validate)
+ new DocumentGraphValidator().validateDocumentGraph(sdocs);
DocumentModelBuilder builder = new DocumentModelBuilder(model);
for (Search search : new SearchOrderer().order(searchList)) {
new FieldOperationApplierForSearch().process(search);
// These two needed for a couple of old unit tests, ideally these are just read from app
- process(search, deployLogger, new QueryProfiles(queryProfileRegistry));
+ process(search, deployLogger, new QueryProfiles(queryProfileRegistry), validate);
built.add(search);
}
builder.addToModel(searchList);
- if ( ! builder.valid() ) {
+
+ if ( validate && ! builder.valid() )
throw new IllegalArgumentException("Impossible to build a correct model.");
- }
searchList = built;
isBuilt = true;
}
@@ -249,8 +249,8 @@ public class SearchBuilder {
* Processes and returns the given {@link Search} object. This method has been factored out of the {@link
* #build()} method so that subclasses can choose not to build anything.
*/
- protected void process(Search search, DeployLogger deployLogger, QueryProfiles queryProfiles) {
- Processing.process(search, deployLogger, rankProfileRegistry, queryProfiles);
+ protected void process(Search search, DeployLogger deployLogger, QueryProfiles queryProfiles, boolean validate) {
+ Processing.process(search, deployLogger, rankProfileRegistry, queryProfiles, validate);
}
/**
@@ -344,7 +344,7 @@ public class SearchBuilder {
rankProfileRegistry,
queryprofileRegistry);
builder.importFile(fileName);
- builder.build(deployLogger);
+ builder.build(true, deployLogger);
return builder;
}
@@ -360,7 +360,7 @@ public class SearchBuilder {
for (Iterator<Path> i = Files.list(new File(dir).toPath()).filter(p -> p.getFileName().toString().endsWith(".sd")).iterator(); i.hasNext(); ) {
builder.importFile(i.next());
}
- builder.build(new BaseDeployLogger());
+ builder.build(true, new BaseDeployLogger());
return builder;
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/UnprocessingSearchBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/UnprocessingSearchBuilder.java
index 1201de86d8d..6c12c6c94d1 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/UnprocessingSearchBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/UnprocessingSearchBuilder.java
@@ -30,7 +30,7 @@ public class UnprocessingSearchBuilder extends SearchBuilder {
}
@Override
- public void process(Search search, DeployLogger deployLogger, QueryProfiles queryProfiles) {
+ public void process(Search search, DeployLogger deployLogger, QueryProfiles queryProfiles, boolean validate) {
// empty
}
@@ -40,4 +40,5 @@ public class UnprocessingSearchBuilder extends SearchBuilder {
builder.build();
return builder.getSearch();
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java
index 518920d465e..cf123d0f7c1 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java
@@ -27,7 +27,7 @@ public class AddAttributeTransformToSummaryOfImportedFields extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
search.allImportedFields()
.flatMap(this::getSummaryFieldsForImportedField)
.forEach(AddAttributeTransformToSummaryOfImportedFields::setAttributeTransform);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddExtraFieldsToDocument.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddExtraFieldsToDocument.java
index b22c813f062..e0d32ea8ccd 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddExtraFieldsToDocument.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddExtraFieldsToDocument.java
@@ -26,19 +26,19 @@ public class AddExtraFieldsToDocument extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
SDDocumentType document = search.getDocument();
if (document != null) {
for (Field field : search.extraFieldList()) {
- addSdField(search, document, (SDField)field);
+ addSdField(search, document, (SDField)field, validate);
}
for (SummaryField field : search.getSummary("default").getSummaryFields()) {
- addSummaryField(search, document, field);
+ addSummaryField(search, document, field, validate);
}
}
}
- private void addSdField(Search search, SDDocumentType document, SDField field) {
+ private void addSdField(Search search, SDDocumentType document, SDField field, boolean validate) {
if (field.getIndexToCount() == 0 && field.getAttributes().isEmpty()) {
return;
}
@@ -48,15 +48,15 @@ public class AddExtraFieldsToDocument extends Processor {
if (atr.getCollectionType().equals(Attribute.CollectionType.ARRAY)) {
type = DataType.getArray(type);
}
- addField(search, document, new SDField(document, atr.getName(), type));
+ addField(search, document, new SDField(document, atr.getName(), type), validate);
} else if (!atr.getName().equals(field.getName())) {
- addField(search, document, new SDField(document, atr.getName(), atr.getDataType()));
+ addField(search, document, new SDField(document, atr.getName(), atr.getDataType()), validate);
}
}
- addField(search, document, field);
+ addField(search, document, field, validate);
}
- private void addSummaryField(Search search, SDDocumentType document, SummaryField field) {
+ private void addSummaryField(Search search, SDDocumentType document, SummaryField field, boolean validate) {
Field docField = document.getField(field.getName());
if (docField == null) {
ImmutableSDField existingField = search.getField(field.getName());
@@ -68,13 +68,15 @@ public class AddExtraFieldsToDocument extends Processor {
document.addField(existingField.asField());
}
} else if (!docField.getDataType().equals(field.getDataType())) {
- throw newProcessException(search, field, "Summary field has conflicting type.");
+ if (validate)
+ throw newProcessException(search, field, "Summary field has conflicting type.");
}
}
- private void addField(Search search, SDDocumentType document, Field field) {
+ private void addField(Search search, SDDocumentType document, Field field, boolean validate) {
if (document.getField(field.getName()) != null) {
- throw newProcessException(search, field, "Field shadows another.");
+ if (validate)
+ throw newProcessException(search, field, "Field shadows another.");
}
document.addField(field);
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributeProperties.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributeProperties.java
index e7d0d5c3dbb..9ec596792fa 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributeProperties.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributeProperties.java
@@ -20,7 +20,7 @@ public class AttributeProperties extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
String fieldName = field.getName();
@@ -41,7 +41,7 @@ public class AttributeProperties extends Processor {
}
}
}
- if (!created) {
+ if (validate && !created) {
throw new IllegalArgumentException("Attribute '" + attribute.getName() + "' in field '" +
field.getName() + "' is not created by the indexing statement");
}
@@ -57,7 +57,7 @@ public class AttributeProperties extends Processor {
* @return true if the attribute has been created by this field, else false
*/
static boolean attributeCreated(SDField field, String attributeName) {
- if (!field.doesAttributing()) {
+ if ( ! field.doesAttributing()) {
return false;
}
for (Attribute attribute : field.getAttributes().values()) {
@@ -67,4 +67,5 @@ public class AttributeProperties extends Processor {
}
return false;
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributesImplicitWord.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributesImplicitWord.java
index ecef4b1d7eb..34903abb288 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributesImplicitWord.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AttributesImplicitWord.java
@@ -14,8 +14,7 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
* Fields that derive to attribute(s) and no indices should use the WORD indexing form,
* in a feeble attempt to match the most peoples expectations as closely as possible.
*
- * @author vegardh
- *
+ * @author Vegard Havdal
*/
public class AttributesImplicitWord extends Processor {
@@ -24,7 +23,7 @@ public class AttributesImplicitWord extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
if (fieldImplicitlyWordMatch(field)) {
field.getMatching().setType(Matching.Type.WORD);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java
index b320d2e9084..a3c4c97cf31 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java
@@ -22,7 +22,8 @@ public class Bolding extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
for (SDField field : search.allConcreteFields()) {
for (SummaryField summary : field.getSummaryFields()) {
if (summary.getTransform().isBolded() &&
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/BuiltInFieldSets.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/BuiltInFieldSets.java
index 498d5234183..37d60c1d32e 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/BuiltInFieldSets.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/BuiltInFieldSets.java
@@ -10,8 +10,7 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
/**
* Adds field sets for 1) fields defined inside document type 2) fields inside search but outside document
- * @author vegardh
- *
+ * @author Vegard Havdal
*/
public class BuiltInFieldSets extends Processor {
@@ -24,7 +23,7 @@ public class BuiltInFieldSets extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
addDocumentFieldSet();
addSearchFieldSet();
// "Hook" the field sets on search onto the document types, since we will include them
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java
index bd9255267de..d7b688be203 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java
@@ -38,12 +38,12 @@ public class CreatePositionZCurve extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
DataType fieldType = field.getDataType();
if ( ! isSupportedPositionType(fieldType)) continue;
- if (field.doesIndexing()) {
+ if (validate && field.doesIndexing()) {
fail(search, field, "Indexing of data type '" + fieldType.getName() + "' is not supported, " +
"replace 'index' statement with 'attribute'.");
}
@@ -56,7 +56,7 @@ public class CreatePositionZCurve extends Processor {
field.getAttributes().remove(fieldName);
String zName = PositionDataType.getZCurveFieldName(fieldName);
- SDField zCurveField = createZCurveField(field, zName);
+ SDField zCurveField = createZCurveField(field, zName, validate);
search.addExtraField(zCurveField);
search.fieldSets().addBuiltInFieldSetItem(BuiltInFieldSets.INTERNAL_FIELDSET_NAME, zCurveField.getName());
@@ -65,11 +65,11 @@ public class CreatePositionZCurve extends Processor {
ensureCompatibleSummary(field, zName,
PositionDataType.getPositionSummaryFieldName(fieldName),
DataType.getArray(DataType.STRING), // will become "xmlstring"
- SummaryTransform.POSITIONS, summaryTo);
+ SummaryTransform.POSITIONS, summaryTo, validate);
ensureCompatibleSummary(field, zName,
PositionDataType.getDistanceSummaryFieldName(fieldName),
DataType.INT,
- SummaryTransform.DISTANCE, summaryTo);
+ SummaryTransform.DISTANCE, summaryTo, validate);
// clear indexing script
field.setIndexingScript(null);
SDField posX = field.getStructField(PositionDataType.FIELD_X);
@@ -83,12 +83,12 @@ public class CreatePositionZCurve extends Processor {
if (doesSummary) ensureCompatibleSummary(field, zName,
field.getName(),
field.getDataType(),
- SummaryTransform.GEOPOS, summaryTo);
+ SummaryTransform.GEOPOS, summaryTo, validate);
}
}
- private SDField createZCurveField(SDField inputField, String fieldName) {
- if (search.getConcreteField(fieldName) != null || search.getAttribute(fieldName) != null) {
+ private SDField createZCurveField(SDField inputField, String fieldName, boolean validate) {
+ if (validate && search.getConcreteField(fieldName) != null || search.getAttribute(fieldName) != null) {
throw newProcessException(search, null, "Incompatible position attribute '" + fieldName +
"' already created.");
}
@@ -108,7 +108,7 @@ public class CreatePositionZCurve extends Processor {
}
private void ensureCompatibleSummary(SDField field, String sourceName, String summaryName, DataType summaryType,
- SummaryTransform summaryTransform, Collection<String> summaryTo) {
+ SummaryTransform summaryTransform, Collection<String> summaryTo, boolean validate) {
SummaryField summary = search.getSummaryField(summaryName);
if (summary == null) {
summary = new SummaryField(summaryName, summaryType, summaryTransform);
@@ -116,7 +116,8 @@ public class CreatePositionZCurve extends Processor {
summary.addDestinations(summaryTo);
field.addSummaryField(summary);
} else if (!summary.getDataType().equals(summaryType)) {
- fail(search, field, "Incompatible summary field '" + summaryName + "' type "+summary.getDataType()+" already created.");
+ if (validate)
+ fail(search, field, "Incompatible summary field '" + summaryName + "' type "+summary.getDataType()+" already created.");
} else if (summary.getTransform() == SummaryTransform.NONE) {
summary.setTransform(summaryTransform);
summary.addDestination("default");
@@ -198,4 +199,5 @@ public class CreatePositionZCurve extends Processor {
new ZCurveExpression(), new AttributeExpression(replace));
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/DeprecateAttributePrefetch.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/DeprecateAttributePrefetch.java
index cd44eb9fc87..7cc9b4e9b52 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/DeprecateAttributePrefetch.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/DeprecateAttributePrefetch.java
@@ -15,7 +15,9 @@ public class DeprecateAttributePrefetch extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (SDField field : search.allConcreteFields()) {
for (Attribute a : field.getAttributes().values()) {
if (Boolean.TRUE.equals(a.getPrefetchValue())) {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/DisallowComplexMapAndWsetKeyTypes.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/DisallowComplexMapAndWsetKeyTypes.java
index 42fe58d2842..861ebad7085 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/DisallowComplexMapAndWsetKeyTypes.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/DisallowComplexMapAndWsetKeyTypes.java
@@ -13,8 +13,8 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
/**
* Non-primitive key types for map and weighted set forbidden (though OK in document model)
- * @author vegardh
*
+ * @author Vegard Havdal
*/
public class DisallowComplexMapAndWsetKeyTypes extends Processor {
@@ -23,17 +23,19 @@ public class DisallowComplexMapAndWsetKeyTypes extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
// TODO also traverse struct types to search for bad map or wset types there. Do this after document manager is fixed, do
// not start using the static stuff on SDDocumentTypes any more.
for (SDField field : search.allConcreteFields()) {
if (field.getDataType() instanceof WeightedSetDataType) {
DataType nestedType = ((WeightedSetDataType)field.getDataType()).getNestedType();
- if (!(nestedType instanceof PrimitiveDataType)) {
+ if ( ! (nestedType instanceof PrimitiveDataType)) {
fail(search, field, "Weighted set must have a primitive key type.");
}
} else if (field.getDataType() instanceof MapDataType) {
- if (!(((MapDataType)field.getDataType()).getKeyType() instanceof PrimitiveDataType)) {
+ if ( ! (((MapDataType)field.getDataType()).getKeyType() instanceof PrimitiveDataType)) {
fail(search, field, "Map key type must be a primitive type");
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/DiversitySettingsValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/DiversitySettingsValidator.java
index 608e36c187a..a936045af3a 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/DiversitySettingsValidator.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/DiversitySettingsValidator.java
@@ -12,12 +12,15 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
* @author baldersheim
*/
public class DiversitySettingsValidator extends Processor {
+
public DiversitySettingsValidator(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (RankProfile rankProfile : rankProfileRegistry.localRankProfiles(search)) {
if (rankProfile.getMatchPhaseSettings() != null && rankProfile.getMatchPhaseSettings().getDiversity() != null) {
validate(rankProfile, rankProfile.getMatchPhaseSettings().getDiversity());
@@ -27,20 +30,21 @@ public class DiversitySettingsValidator extends Processor {
private void validate(RankProfile rankProfile, RankProfile.DiversitySettings settings) {
String attributeName = settings.getAttribute();
new AttributeValidator(search.getName(), rankProfile.getName(),
- search.getAttribute(attributeName), attributeName).validate();
+ search.getAttribute(attributeName), attributeName).validate();
}
private static class AttributeValidator extends MatchPhaseSettingsValidator.AttributeValidator {
+
public AttributeValidator(String searchName, String rankProfileName, Attribute attribute, String attributeName) {
super(searchName, rankProfileName, attribute, attributeName);
}
protected void validateThatAttributeIsSingleAndNotPredicate() {
- if (!attribute.getCollectionType().equals(Attribute.CollectionType.SINGLE) ||
+ if ( ! attribute.getCollectionType().equals(Attribute.CollectionType.SINGLE) ||
attribute.getType().equals(Attribute.Type.PREDICATE))
{
failValidation("must be single value numeric, or enumerated attribute, but it is '"
- + attribute.getDataType().getName() + "'");
+ + attribute.getDataType().getName() + "'");
}
}
@@ -54,5 +58,7 @@ public class DiversitySettingsValidator extends Processor {
public String getValidationType() {
return "diversity";
}
+
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ExactMatch.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ExactMatch.java
index 2bfc7a418de..59bc3dc66f4 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ExactMatch.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ExactMatch.java
@@ -26,7 +26,7 @@ public class ExactMatch extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
Matching.Type matching = field.getMatching().getType();
if (matching.equals(Matching.Type.EXACT) || matching.equals(Matching.Type.WORD)) {
@@ -56,8 +56,7 @@ public class ExactMatch extends Processor {
}
field.addQueryCommand("exact " + exactTerminator);
- // The following part illustrates how nice it would have been with canonical
- // representation of indices
+ // The following part illustrates how nice it would have been with canonical representation of indices
if (field.doesIndexing()) {
exactMatchSettingsForField(field);
}
@@ -92,5 +91,6 @@ public class ExactMatch extends Processor {
return exp;
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/FastAccessValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/FastAccessValidator.java
index 5bfdd3b28b4..9cfac625da5 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/FastAccessValidator.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/FastAccessValidator.java
@@ -15,12 +15,15 @@ import java.util.stream.Collectors;
* @author bjorncs
*/
public class FastAccessValidator extends Processor {
+
public FastAccessValidator(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
String invalidAttributes = search.allFields()
.flatMap(field -> field.getAttributes().values().stream())
.filter(FastAccessValidator::isIncompatibleAttribute)
@@ -50,4 +53,5 @@ public class FastAccessValidator extends Processor {
return false;
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/FieldSetValidity.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/FieldSetValidity.java
index 8a38f5fc57c..15c11589245 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/FieldSetValidity.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/FieldSetValidity.java
@@ -24,7 +24,9 @@ public class FieldSetValidity extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (FieldSet fieldSet : search.fieldSets().userFieldSets().values()) {
checkFieldNames(search, fieldSet);
checkMatching(search, fieldSet);
@@ -51,7 +53,7 @@ public class FieldSetValidity extends Processor {
if (fsMatching==null) {
fsMatching = fieldMatching;
} else {
- if (fsMatching!=null && !fsMatching.equals(fieldMatching)) {
+ if ( ! fsMatching.equals(fieldMatching)) {
warn(search, field.asField(),
"The matching settings for the fields in " + fieldSet + " are inconsistent " +
"(explicitly or because of field type). This may lead to recall and ranking issues.");
@@ -69,7 +71,7 @@ public class FieldSetValidity extends Processor {
if (fsNorm==null) {
fsNorm = fieldNorm;
} else {
- if (fsNorm!=null && !fsNorm.equals(fieldNorm)) {
+ if ( ! fsNorm.equals(fieldNorm)) {
warn(search, field.asField(),
"The normalization settings for the fields in " + fieldSet + " are inconsistent " +
"(explicitly or because of field type). This may lead to recall and ranking issues.");
@@ -87,7 +89,7 @@ public class FieldSetValidity extends Processor {
if (fsStemming==null) {
fsStemming = fieldStemming;
} else {
- if (fsStemming!=null && !fsStemming.equals(fieldStemming)) {
+ if ( ! fsStemming.equals(fieldStemming)) {
warn(search, field.asField(),
"The stemming settings for the fields in the fieldset '"+fieldSet.getName()+
"' are inconsistent (explicitly or because of field type). " +
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/FilterFieldNames.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/FilterFieldNames.java
index 1f1a311b0e0..39d35cce694 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/FilterFieldNames.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/FilterFieldNames.java
@@ -16,8 +16,8 @@ import java.util.logging.Level;
/**
* Takes the fields and indexes that are of type rank filter, and stores those names on all rank profiles
- * @author vegardh
*
+ * @author Vegard Havdal
*/
public class FilterFieldNames extends Processor {
@@ -26,12 +26,13 @@ public class FilterFieldNames extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField f : search.allConcreteFields()) {
if (f.getRanking().isFilter()) {
filterField(f.getName());
}
}
+
for (RankProfile profile : rankProfileRegistry.localRankProfiles(search)) {
Set<String> filterFields = new LinkedHashSet<>();
findFilterFields(search, profile, filterFields);
@@ -52,12 +53,11 @@ public class FilterFieldNames extends Processor {
private void findFilterFields(Search search, RankProfile profile, Set<String> filterFields) {
for (Iterator<RankProfile.RankSetting> itr = profile.declaredRankSettingIterator(); itr.hasNext(); ) {
RankProfile.RankSetting setting = itr.next();
- if (setting.getType().equals(RankProfile.RankSetting.Type.PREFERBITVECTOR) &&
- ((Boolean)setting.getValue()).booleanValue())
+ if (setting.getType().equals(RankProfile.RankSetting.Type.PREFERBITVECTOR) && ((Boolean)setting.getValue()))
{
String fieldName = setting.getFieldName();
if (search.getConcreteField(fieldName) != null) {
- if (!profile.filterFields().contains(fieldName)) {
+ if ( ! profile.filterFields().contains(fieldName)) {
filterFields.add(fieldName);
}
} else {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java
index 2b35b1c42f3..9f4a63b8a9a 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java
@@ -26,15 +26,15 @@ public class ImplicitSummaries extends Processor {
}
@Override
- public void process() {
- DocumentSummary defaultSummary=search.getSummary("default");
- if (defaultSummary==null) {
- defaultSummary=new DocumentSummary("default");
+ public void process(boolean validate) {
+ DocumentSummary defaultSummary = search.getSummary("default");
+ if (defaultSummary == null) {
+ defaultSummary = new DocumentSummary("default");
search.addSummary(defaultSummary);
}
for (SDField field : search.allConcreteFields()) {
- collectSummaries(field,search);
+ collectSummaries(field, search, validate);
}
for (DocumentSummary documentSummary : search.getSummaries().values()) {
@@ -46,14 +46,14 @@ public class ImplicitSummaries extends Processor {
sdField.addSummaryFieldSources(summaryField);
}
- private void collectSummaries(SDField field,Search search) {
+ private void collectSummaries(SDField field ,Search search, boolean validate) {
SummaryField addedSummaryField=null;
// Implicit
String fieldName = field.getName();
- SummaryField fieldSummaryField=field.getSummaryField(fieldName);
+ SummaryField fieldSummaryField = field.getSummaryField(fieldName);
if (fieldSummaryField == null && field.doesSummarying()) {
- fieldSummaryField=new SummaryField(fieldName, field.getDataType());
+ fieldSummaryField = new SummaryField(fieldName, field.getDataType());
fieldSummaryField.setImplicit(true);
addSummaryFieldSources(fieldSummaryField, field);
fieldSummaryField.addDestination("default");
@@ -84,9 +84,7 @@ public class ImplicitSummaries extends Processor {
// Position attributes
if (field.doesSummarying()) {
for (Attribute attribute : field.getAttributes().values()) {
- if (!attribute.isPosition()) {
- continue;
- }
+ if ( ! attribute.isPosition()) continue;
DocumentSummary attributePrefetchSummary = getOrCreateAttributePrefetchSummary(search);
attributePrefetchSummary.add(field.getSummaryField(PositionDataType.getDistanceSummaryFieldName(fieldName)));
attributePrefetchSummary.add(field.getSummaryField(PositionDataType.getPositionSummaryFieldName(fieldName)));
@@ -96,12 +94,12 @@ public class ImplicitSummaries extends Processor {
// Explicits
for (SummaryField summaryField : field.getSummaryFields()) {
// Make sure we fetch from attribute here too
- Attribute attribute=field.getAttributes().get(fieldName);
- if (attribute!=null && summaryField.getTransform()==SummaryTransform.NONE) {
+ Attribute attribute = field.getAttributes().get(fieldName);
+ if (attribute != null && summaryField.getTransform() == SummaryTransform.NONE) {
summaryField.setTransform(SummaryTransform.ATTRIBUTE);
}
- if (isValid(summaryField,search)) {
+ if (isValid(summaryField, search, validate)) {
addToDestinations(summaryField, search);
}
}
@@ -119,14 +117,14 @@ public class ImplicitSummaries extends Processor {
private void addPrefetchAttribute(Attribute attribute,SDField field,Search search) {
- if (attribute.getPrefetchValue()==null) { // Prefetch by default - unless any summary makes this dynamic
+ if (attribute.getPrefetchValue() == null) { // Prefetch by default - unless any summary makes this dynamic
// Check if there is an implicit dynamic definition
- SummaryField fieldSummaryField=field.getSummaryField(attribute.getName());
- if (fieldSummaryField!=null && fieldSummaryField.getTransform().isDynamic()) return;
+ SummaryField fieldSummaryField = field.getSummaryField(attribute.getName());
+ if (fieldSummaryField != null && fieldSummaryField.getTransform().isDynamic()) return;
// Check if an explicit class makes it dynamic (first is enough, as all must be the same, checked later)
- SummaryField explicitSummaryField=search.getExplicitSummaryField(attribute.getName());
- if (explicitSummaryField!=null && explicitSummaryField.getTransform().isDynamic()) return;
+ SummaryField explicitSummaryField = search.getExplicitSummaryField(attribute.getName());
+ if (explicitSummaryField != null && explicitSummaryField.getTransform().isDynamic()) return;
}
DocumentSummary summary = getOrCreateAttributePrefetchSummary(search);
@@ -138,17 +136,17 @@ public class ImplicitSummaries extends Processor {
}
// Returns whether this is valid. Warns if invalid and ignorable. Throws if not ignorable.
- private boolean isValid(SummaryField summaryField,Search search) {
+ private boolean isValid(SummaryField summaryField, Search search, boolean validate) {
if (summaryField.getTransform() == SummaryTransform.DISTANCE ||
summaryField.getTransform() == SummaryTransform.POSITIONS)
{
int sourceCount = summaryField.getSourceCount();
- if (sourceCount != 1) {
+ if (validate && sourceCount != 1) {
throw newProcessException(search.getName(), summaryField.getName(),
"Expected 1 source field, got " + sourceCount + ".");
}
String sourceName = summaryField.getSingleSource();
- if (search.getAttribute(sourceName) == null) {
+ if (validate && search.getAttribute(sourceName) == null) {
throw newProcessException(search.getName(), summaryField.getName(),
"Summary source attribute '" + sourceName + "' not found.");
}
@@ -157,33 +155,34 @@ public class ImplicitSummaries extends Processor {
String fieldName = summaryField.getSourceField();
SDField sourceField = search.getConcreteField(fieldName);
- if (sourceField == null) {
+ if (validate && sourceField == null) {
throw newProcessException(search, summaryField, "Source field '" + fieldName + "' does not exist.");
}
- if (!sourceField.doesSummarying() &&
- !summaryField.getTransform().equals(SummaryTransform.ATTRIBUTE) &&
- !summaryField.getTransform().equals(SummaryTransform.GEOPOS))
+ if (! sourceField.doesSummarying() &&
+ ! summaryField.getTransform().equals(SummaryTransform.ATTRIBUTE) &&
+ ! summaryField.getTransform().equals(SummaryTransform.GEOPOS))
{
// Summary transform attribute may indicate that the ilscript was rewritten to remove summary
// by another search that uses this same field in inheritance.
deployLogger.log(Level.WARNING, "Ignoring " + summaryField + ": " + sourceField +
- " is not creating a summary value in its indexing statement");
+ " is not creating a summary value in its indexing statement");
return false;
}
if (summaryField.getTransform().isDynamic()
&& summaryField.getName().equals(sourceField.getName())
&& sourceField.doesAttributing()) {
- Attribute attribute=sourceField.getAttributes().get(sourceField.getName());
- if (attribute!=null) {
- String destinations="document summary 'default'";
- if (summaryField.getDestinations().size()>0) {
+ Attribute attribute = sourceField.getAttributes().get(sourceField.getName());
+ if (attribute != null) {
+ String destinations = "document summary 'default'";
+ if (summaryField.getDestinations().size() >0) {
destinations = "document summaries " + summaryField.getDestinations();
}
- deployLogger.log(Level.WARNING, "Will fetch the disk summary value of " + sourceField + " in " + destinations +
- " since this summary field uses a dynamic summary value (snippet/bolding): Dynamic summaries and bolding " +
- "is not supported with summary values fetched from in-memory attributes yet. If you want to see partial updates " +
- "to this attribute, remove any bolding and dynamic snippeting from this field");
+ deployLogger.log(Level.WARNING,
+ "Will fetch the disk summary value of " + sourceField + " in " + destinations +
+ " since this summary field uses a dynamic summary value (snippet/bolding): Dynamic summaries and bolding " +
+ "is not supported with summary values fetched from in-memory attributes yet. If you want to see partial updates " +
+ "to this attribute, remove any bolding and dynamic snippeting from this field");
// Note: The dynamic setting has already overridden the attribute map setting,
// so we do not need to actually do attribute.setSummary(false) here
// Also, we can not do this, since it makes it impossible to fetch this attribute
@@ -195,26 +194,25 @@ public class ImplicitSummaries extends Processor {
}
private void addToDestinations(SummaryField summaryField,Search search) {
- if (summaryField.getDestinations().size()==0) {
- addToDestination("default",summaryField,search);
+ if (summaryField.getDestinations().size() == 0) {
+ addToDestination("default", summaryField, search);
}
else {
for (String destinationName : summaryField.getDestinations())
- addToDestination(destinationName,summaryField,search);
+ addToDestination(destinationName, summaryField, search);
}
}
- private void addToDestination(String destinationName,SummaryField summaryField,Search search) {
- DocumentSummary destination=search.getSummary(destinationName);
- if (destination==null) {
- destination=new DocumentSummary(destinationName);
+ private void addToDestination(String destinationName, SummaryField summaryField,Search search) {
+ DocumentSummary destination = search.getSummary(destinationName);
+ if (destination == null) {
+ destination = new DocumentSummary(destinationName);
search.addSummary(destination);
destination.add(summaryField);
}
else {
- SummaryField existingField=
- destination.getSummaryField(summaryField.getName());
- SummaryField merged=summaryField.mergeWith(existingField);
+ SummaryField existingField= destination.getSummaryField(summaryField.getName());
+ SummaryField merged = summaryField.mergeWith(existingField);
destination.add(merged);
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaryFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaryFields.java
index 41b0e083230..7464f574255 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaryFields.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaryFields.java
@@ -21,15 +21,15 @@ public class ImplicitSummaryFields extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (DocumentSummary docsum : search.getSummaries().values()) {
- addField(docsum, new SummaryField("rankfeatures", DataType.STRING, SummaryTransform.RANKFEATURES));
- addField(docsum, new SummaryField("summaryfeatures", DataType.STRING, SummaryTransform.SUMMARYFEATURES));
+ addField(docsum, new SummaryField("rankfeatures", DataType.STRING, SummaryTransform.RANKFEATURES), validate);
+ addField(docsum, new SummaryField("summaryfeatures", DataType.STRING, SummaryTransform.SUMMARYFEATURES), validate);
}
}
- private void addField(DocumentSummary docsum, SummaryField field) {
- if (docsum.getSummaryField(field.getName()) != null) {
+ private void addField(DocumentSummary docsum, SummaryField field, boolean validate) {
+ if (validate && docsum.getSummaryField(field.getName()) != null) {
throw new IllegalStateException("Summary class '" + docsum.getName() + "' uses reserved field name '" +
field.getName() + "'.");
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummayValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummayValidator.java
index 0c1e46a474c..5e8065b887d 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummayValidator.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummayValidator.java
@@ -20,13 +20,14 @@ import java.util.Map;
*/
public class ImportedFieldsInSummayValidator extends Processor {
-
public ImportedFieldsInSummayValidator(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
if (search.importedFields().isPresent()) {
validateDocumentSummaries(search.getSummaries());
}
@@ -48,15 +49,15 @@ public class ImportedFieldsInSummayValidator extends Processor {
}
private void validateImportedSummaryField(DocumentSummary summary, SummaryField field, ImportedField importedField) {
- if (field.getDataType().equals(DataType.PREDICATE) &&
- importedField.targetField().getDataType().equals(DataType.PREDICATE)) {
+ if (field.getDataType().equals(DataType.PREDICATE)
+ && importedField.targetField().getDataType().equals(DataType.PREDICATE)) {
fail(summary, field, "Is of type predicate. Not supported in document summaries");
}
}
private void fail(DocumentSummary summary, SummaryField importedField, String msg) {
throw new IllegalArgumentException("For search '" + search.getName() + "', document summary '" + summary.getName() +
- "', imported summary field '" + importedField.getName() + "': " + msg);
+ "', imported summary field '" + importedField.getName() + "': " + msg);
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java
index 9b6a86ad13e..9997351d246 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java
@@ -32,14 +32,14 @@ public class ImportedFieldsResolver extends Processor {
}
@Override
- public void process() {
- search.temporaryImportedFields().get().fields().forEach((name, field) -> resolveImportedField(field));
+ public void process(boolean validate) {
+ search.temporaryImportedFields().get().fields().forEach((name, field) -> resolveImportedField(field, validate));
search.setImportedFields(new ImportedFields(importedFields));
}
- private void resolveImportedField(TemporaryImportedField importedField) {
+ private void resolveImportedField(TemporaryImportedField importedField, boolean validate) {
DocumentReference reference = validateDocumentReference(importedField);
- SDField targetField = validateTargetField(importedField, reference);
+ SDField targetField = validateTargetField(importedField, reference, validate);
importedFields.put(importedField.fieldName(), new ImportedField(importedField.fieldName(), reference, targetField));
}
@@ -52,19 +52,27 @@ public class ImportedFieldsResolver extends Processor {
return reference;
}
- private SDField validateTargetField(TemporaryImportedField importedField, DocumentReference reference) {
+ private SDField validateTargetField(TemporaryImportedField importedField,
+ DocumentReference reference,
+ boolean validate) {
String targetFieldName = importedField.targetFieldName();
Search targetSearch = reference.targetSearch();
- if (isImportedField(targetSearch, targetFieldName)) {
- fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Is an imported field. Not supported");
+ if (validate && isImportedField(targetSearch, targetFieldName)) {
+ fail(importedField, targetFieldAsString(targetFieldName, reference) +
+ ": Is an imported field. Not supported");
}
SDField targetField = targetSearch.getConcreteField(targetFieldName);
if (targetField == null) {
- fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Not found");
+ fail(importedField, targetFieldAsString(targetFieldName, reference) +
+ ": Not found");
} else if (!targetField.doesAttributing()) {
- fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Is not an attribute field. Only attribute fields supported");
+ if (validate)
+ fail(importedField, targetFieldAsString(targetFieldName, reference) +
+ ": Is not an attribute field. Only attribute fields supported");
} else if (targetField.doesIndexing()) {
- fail(importedField, targetFieldAsString(targetFieldName, reference) + ": Is an index field. Not supported");
+ if (validate)
+ fail(importedField, targetFieldAsString(targetFieldName, reference) +
+ ": Is an index field. Not supported");
}
return targetField;
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexFieldNames.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexFieldNames.java
index 8814cd8a61e..018183b91d8 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexFieldNames.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexFieldNames.java
@@ -11,8 +11,8 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
* Because of the way the parser works (allowing any token as identifier),
* it is not practical to limit the syntax of field names there, do it here.
* Important to disallow dash, has semantic in IL.
- * @author vegardh
*
+ * @author Vehard Havdal
*/
public class IndexFieldNames extends Processor {
@@ -23,9 +23,11 @@ public class IndexFieldNames extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (SDField field : search.allConcreteFields()) {
- if (!field.getName().matches(FIELD_NAME_REGEXP) && !legalDottedPositionField(field)) {
+ if ( ! field.getName().matches(FIELD_NAME_REGEXP) && ! legalDottedPositionField(field)) {
fail(search, field, " Not a legal field name. Legal expression: " + FIELD_NAME_REGEXP);
}
}
@@ -34,10 +36,12 @@ public class IndexFieldNames extends Processor {
/**
* In {@link CreatePositionZCurve} we add some .position and .distance fields for pos fields. Make an exception for those for now. For 6.0, rename
* to _position and _distance and delete this method.
+ *
* @param field an {@link com.yahoo.searchdefinition.document.SDField}
* @return true if allowed
*/
private boolean legalDottedPositionField(SDField field) {
return field.getName().endsWith(".position") || field.getName().endsWith(".distance");
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexSettingsNonFieldNames.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexSettingsNonFieldNames.java
index 6427396ab88..0740029de90 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexSettingsNonFieldNames.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexSettingsNonFieldNames.java
@@ -14,8 +14,8 @@ import java.util.Iterator;
* Fail if:
* 1) There are index: settings without explicit index names (name same as field name)
* 2) All the index-to indexes differ from the field name.
- * @author vegardh
*
+ * @author Vegard Havdal
*/
public class IndexSettingsNonFieldNames extends Processor {
@@ -24,7 +24,9 @@ public class IndexSettingsNonFieldNames extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (SDField field : search.allConcreteFields()) {
boolean fieldNameUsed = false;
for (Iterator i = field.getFieldNameAsIterator(); i.hasNext();) {
@@ -33,11 +35,12 @@ public class IndexSettingsNonFieldNames extends Processor {
fieldNameUsed = true;
}
}
- if (!fieldNameUsed) {
+ if ( ! fieldNameUsed) {
for (Index index : field.getIndices().values()) {
if (index.getName().equals(field.getName())) {
throw new IllegalArgumentException("Error in " + field + " in " + search +
- ": When all index names differ from field name, index parameter settings must specify index name explicitly.");
+ ": When all index names differ from field name, index " +
+ "parameter settings must specify index name explicitly.");
}
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexTo2FieldSet.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexTo2FieldSet.java
deleted file mode 100644
index 8ac7655812f..00000000000
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexTo2FieldSet.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.searchdefinition.processing;
-
-import com.yahoo.config.application.api.DeployLogger;
-import com.yahoo.searchdefinition.RankProfileRegistry;
-import com.yahoo.searchdefinition.document.SDField;
-import com.yahoo.searchdefinition.Search;
-import com.yahoo.vespa.model.container.search.QueryProfiles;
-
-/**
- * @author baldersheim
- */
-public class IndexTo2FieldSet extends Processor {
-
- public IndexTo2FieldSet(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
- super(search, deployLogger, rankProfileRegistry, queryProfiles);
- }
-
- @Override
- public void process() {
- for (SDField field : search.allConcreteFields()) {
- processField(field);
- }
- }
- private void processField(SDField field) {
- if (field.usesStructOrMap()) {
- for (SDField subField : field.getStructFields()) {
- processField(subField);
- }
- }
- }
-
-}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java
index 7a1076e758b..f6e95a81e77 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java
@@ -15,10 +15,10 @@ import com.yahoo.vespa.indexinglanguage.expressions.StatementExpression;
import com.yahoo.vespa.model.container.search.QueryProfiles;
/**
- * <p>This processor modifies all indexing scripts so that they input the value of the owning field by default. It also
- * ensures that all fields used as input exist.</p>
+ * This processor modifies all indexing scripts so that they input the value of the owning field by default. It also
+ * ensures that all fields used as input exist.
*
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
public class IndexingInputs extends Processor {
@@ -27,16 +27,17 @@ public class IndexingInputs extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
ScriptExpression script = field.getIndexingScript();
- if (script == null) {
- continue;
- }
+ if (script == null) continue;
+
String fieldName = field.getName();
script = (ScriptExpression)new DefaultToCurrentField(fieldName).convert(script);
script = (ScriptExpression)new EnsureInputExpression(fieldName).convert(script);
- new VerifyInputExpression(search, field).visit(script);
+ if (validate)
+ new VerifyInputExpression(search, field).visit(script);
+
field.setIndexingScript(script);
}
}
@@ -95,16 +96,14 @@ public class IndexingInputs extends Processor {
@Override
protected void doVisit(Expression exp) {
- if (!(exp instanceof InputExpression)) {
- return;
- }
+ if ( ! (exp instanceof InputExpression)) return;
+
SDDocumentType docType = search.getDocument();
String inputField = ((InputExpression)exp).getFieldName();
- if (docType.getField(inputField) != null) {
- return;
- }
+ if (docType.getField(inputField) != null) return;
+
fail(search, field, "Indexing script refers to field '" + inputField + "' which does not exist " +
- "in document type '" + docType.getName() + "'.");
+ "in document type '" + docType.getName() + "'.");
}
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java
index 99cbf633221..420d0fc619b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java
@@ -16,11 +16,11 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
import java.util.*;
/**
- * <p>This processor modifies all indexing scripts so that they output to the owning field by default. It also prevents
+ * This processor modifies all indexing scripts so that they output to the owning field by default. It also prevents
* any output expression from writing to any field except for the owning field. Finally, for <tt>SummaryExpression</tt>,
- * this processor expands to write all appropriate summary fields.</p>
+ * this processor expands to write all appropriate summary fields.
*
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
public class IndexingOutputs extends Processor {
@@ -29,21 +29,19 @@ public class IndexingOutputs extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
ScriptExpression script = field.getIndexingScript();
- if (script == null) {
- continue;
- }
+ if (script == null) continue;
+
Set<String> summaryFields = new TreeSet<>();
findSummaryTo(search, field, summaryFields, summaryFields);
- MyConverter converter = new MyConverter(search, field, summaryFields);
+ MyConverter converter = new MyConverter(search, field, summaryFields, validate);
field.setIndexingScript((ScriptExpression)converter.convert(script));
}
}
- public void findSummaryTo(Search search, SDField field, Set<String> dynamicSummary,
- Set<String> staticSummary) {
+ public void findSummaryTo(Search search, SDField field, Set<String> dynamicSummary, Set<String> staticSummary) {
Map<String, SummaryField> summaryFields = search.getSummaryFields(field);
if (summaryFields.isEmpty()) {
fillSummaryToFromField(field, dynamicSummary, staticSummary);
@@ -59,7 +57,8 @@ public class IndexingOutputs extends Processor {
}
}
- private void fillSummaryToFromSummaryField(Search search, SDField field, SummaryField summaryField, Set<String> dynamicSummary, Set<String> staticSummary) {
+ private void fillSummaryToFromSummaryField(Search search, SDField field, SummaryField summaryField,
+ Set<String> dynamicSummary, Set<String> staticSummary) {
SummaryTransform summaryTransform = summaryField.getTransform();
String summaryName = summaryField.getName();
if (summaryTransform.isDynamic() && summaryField.getSourceCount() > 2) {
@@ -98,23 +97,25 @@ public class IndexingOutputs extends Processor {
final Search search;
final Field field;
final Set<String> summaryFields;
+ final boolean validate;
- MyConverter(Search search, Field field, Set<String> summaryFields) {
+ MyConverter(Search search, Field field, Set<String> summaryFields, boolean validate) {
this.search = search;
this.field = field;
this.summaryFields = summaryFields.isEmpty() ? Collections.singleton(field.getName()) : summaryFields;
+ this.validate = validate;
}
@Override
protected boolean shouldConvert(Expression exp) {
- if (!(exp instanceof OutputExpression)) {
+ if ( ! (exp instanceof OutputExpression)) {
return false;
}
String fieldName = ((OutputExpression)exp).getFieldName();
if (fieldName == null) {
return true; // inject appropriate field name
}
- if (!fieldName.equals(field.getName())) {
+ if ( validate && ! fieldName.equals(field.getName())) {
fail(search, field, "Indexing expression '" + exp + "' attempts to write to a field other than '" +
field.getName() + "'.");
}
@@ -137,5 +138,7 @@ public class IndexingOutputs extends Processor {
}
return new StatementExpression(ret);
}
+
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java
index f9ea7ed1542..7ee22be1490 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java
@@ -25,7 +25,9 @@ public class IndexingValidation extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
VerificationContext context = new VerificationContext(new MyAdapter(search));
for (SDField field : search.allConcreteFields()) {
ScriptExpression script = field.getIndexingScript();
@@ -122,8 +124,8 @@ public class IndexingValidation extends Processor {
} else {
throw new UnsupportedOperationException();
}
- if (!fieldType.isAssignableFrom(valueType) &&
- !fieldType.isAssignableFrom(createCompatType(valueType))) {
+ if ( ! fieldType.isAssignableFrom(valueType) &&
+ ! fieldType.isAssignableFrom(createCompatType(valueType))) {
throw new VerificationException(exp, "Can not assign " + valueType.getName() + " to " + fieldDesc +
" '" + fieldName + "' which is " + fieldType.getName() + ".");
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValues.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValues.java
index cc634abef01..f3907ae68cb 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValues.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValues.java
@@ -22,10 +22,12 @@ public class IndexingValues extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (Field field : search.getDocument().fieldSet()) {
SDField sdField = (SDField)field;
- if (!sdField.isExtraField()) {
+ if ( ! sdField.isExtraField()) {
new RequireThatDocumentFieldsAreImmutable(field).convert(sdField.getIndexingScript());
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IntegerIndex2Attribute.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IntegerIndex2Attribute.java
index a850f74de79..c119dc2660b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IntegerIndex2Attribute.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IntegerIndex2Attribute.java
@@ -30,17 +30,18 @@ public class IntegerIndex2Attribute extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
if (field.doesIndexing() && field.getDataType().getPrimitiveType() instanceof NumericDataType) {
- // Avoid changing for example RISE fields
- if (field.getIndex(field.getName()) != null && !(field.getIndex(field.getName()).getType().equals(Index.Type.VESPA))) continue;
+ if (field.getIndex(field.getName()) != null
+ && ! (field.getIndex(field.getName()).getType().equals(Index.Type.VESPA))) continue;
ScriptExpression script = field.getIndexingScript();
Set<String> attributeNames = new HashSet<>();
new MyVisitor(attributeNames).visit(script);
field.setIndexingScript((ScriptExpression)new MyConverter(attributeNames).convert(script));
- warn(search, field, "Changed to attribute because numerical indexes (field has type "+field.getDataType().getName()+") is not currently supported." +
- " Index-only settings may fail. Ignore this warning for streaming search.");
+ warn(search, field, "Changed to attribute because numerical indexes (field has type " +
+ field.getDataType().getName() + ") is not currently supported." +
+ " Index-only settings may fail. Ignore this warning for streaming search.");
}
}
}
@@ -83,4 +84,5 @@ public class IntegerIndex2Attribute extends Processor {
return new AttributeExpression(indexName);
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/LiteralBoost.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/LiteralBoost.java
index a003864c83a..7d13233bc12 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/LiteralBoost.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/LiteralBoost.java
@@ -31,7 +31,7 @@ public class LiteralBoost extends Processor {
/** Adds extra search fields and indices to express literal boosts */
@Override
- public void process() {
+ public void process(boolean validate) {
checkRankModifierRankType(search);
addLiteralBoostsToFields(search);
reduceFieldLiteralBoosts(search);
@@ -71,8 +71,8 @@ public class LiteralBoost extends Processor {
private void reduceFieldLiteralBoost(SDField field,Search search) {
SDField literalField = addField(search, field, "literal",
- "{ input " + field.getName() + " | tokenize | index " + field.getName() + "_literal; }",
- "literal-boost");
+ "{ input " + field.getName() + " | tokenize | index " + field.getName() + "_literal; }",
+ "literal-boost");
literalField.setWeight(field.getWeight() + field.getLiteralBoost());
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeAliases.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeAliases.java
index 9b5a6389a91..f853b99bbb2 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeAliases.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeAliases.java
@@ -15,8 +15,8 @@ import java.util.Map;
/**
* Takes the aliases set on field by parser and sets them on correct Index or Attribute
- * @author vegardh
*
+ * @author vegardh
*/
public class MakeAliases extends Processor {
@@ -25,21 +25,21 @@ public class MakeAliases extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
List<String> usedAliases = new ArrayList<>();
for (SDField field : search.allConcreteFields()) {
for (Map.Entry<String, String> e : field.getAliasToName().entrySet()) {
String alias = e.getKey();
String name = e.getValue();
- String errMsg = "For search '"+search.getName()+"': alias '"+alias+"' ";
- if (search.existsIndex(alias)) {
- throw new IllegalArgumentException(errMsg+"is illegal since it is the name of an index.");
+ String errMsg = "For search '" + search.getName() + "': alias '" + alias + "' ";
+ if (validate && search.existsIndex(alias)) {
+ throw new IllegalArgumentException(errMsg + "is illegal since it is the name of an index.");
}
- if (search.getAttribute(alias)!=null) {
- throw new IllegalArgumentException(errMsg+"is illegal since it is the name of an attribute.");
+ if (validate && search.getAttribute(alias) != null) {
+ throw new IllegalArgumentException(errMsg + "is illegal since it is the name of an attribute.");
}
- if (usedAliases.contains(alias)) {
- throw new IllegalArgumentException(errMsg+"specified more than once.");
+ if (validate && usedAliases.contains(alias)) {
+ throw new IllegalArgumentException(errMsg + "specified more than once.");
}
usedAliases.add(alias);
@@ -47,7 +47,7 @@ public class MakeAliases extends Processor {
Attribute attribute = field.getAttributes().get(name);
if (index != null) {
index.addAlias(alias); // alias will be for index in this case, since it is the one used in a search
- } else if (attribute != null && !field.doesIndexing()) {
+ } else if (attribute != null && ! field.doesIndexing()) {
attribute.getAliases().add(alias);
} else {
index = new Index(name);
@@ -57,4 +57,5 @@ public class MakeAliases extends Processor {
}
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeDefaultSummaryTheSuperSet.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeDefaultSummaryTheSuperSet.java
index 0ebe384d361..2c43a65da99 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeDefaultSummaryTheSuperSet.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MakeDefaultSummaryTheSuperSet.java
@@ -25,7 +25,7 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
*
* <p>This must be done after other summary processors.</p>
*
- * @author bratseth
+ * @author bratseth
*/
public class MakeDefaultSummaryTheSuperSet extends Processor {
@@ -34,7 +34,7 @@ public class MakeDefaultSummaryTheSuperSet extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
DocumentSummary defaultSummary=search.getSummary("default");
for (SummaryField summaryField : search.getUniqueNamedSummaryFields().values() ) {
if (defaultSummary.getSummaryField(summaryField.getName()) != null) continue;
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchConsistency.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchConsistency.java
index d1d3155a858..fe584fa41c0 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchConsistency.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchConsistency.java
@@ -22,23 +22,28 @@ import java.util.Map;
*/
public class MatchConsistency extends Processor {
- public MatchConsistency(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
+ public MatchConsistency(Search search,
+ DeployLogger deployLogger,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles) {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
Map<String, Matching.Type> types = new HashMap<>();
for (SDField field : search.allConcreteFields()) {
new MyVisitor(search, field, types).visit(field.getIndexingScript());
}
}
- void checkMatching(Search search, SDField field, Map<String, Type> types, String indexTo) {
+ private void checkMatching(Search search, SDField field, Map<String, Type> types, String indexTo) {
Type prevType = types.get(indexTo);
if (prevType == null) {
types.put(indexTo, field.getMatching().getType());
- } else if (!field.getMatching().getType().equals(prevType)) {
+ } else if ( ! field.getMatching().getType().equals(prevType)) {
warn(search, field, "The matching type for index '" + indexTo + "' (got " + field.getMatching().getType() +
") is inconsistent with that given for the same index in a previous field (had " +
prevType + ").");
@@ -51,7 +56,7 @@ public class MatchConsistency extends Processor {
final SDField field;
final Map<String, Type> types;
- public MyVisitor(Search search, SDField field, Map<String, Type> types) {
+ MyVisitor(Search search, SDField field, Map<String, Type> types) {
this.search = search;
this.field = field;
this.types = types;
@@ -64,4 +69,5 @@ public class MatchConsistency extends Processor {
}
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchPhaseSettingsValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchPhaseSettingsValidator.java
index ae8cd092e77..043eb1f82eb 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchPhaseSettingsValidator.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchPhaseSettingsValidator.java
@@ -20,7 +20,9 @@ public class MatchPhaseSettingsValidator extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (RankProfile rankProfile : rankProfileRegistry.localRankProfiles(search)) {
RankProfile.MatchPhaseSettings settings = rankProfile.getMatchPhaseSettings();
if (settings != null) {
@@ -31,8 +33,9 @@ public class MatchPhaseSettingsValidator extends Processor {
private void validateMatchPhaseSettings(RankProfile rankProfile, RankProfile.MatchPhaseSettings settings) {
String attributeName = settings.getAttribute();
- new AttributeValidator(search.getName(), rankProfile.getName(),
- search.getAttribute(attributeName), attributeName).validate();
+ new AttributeValidator(search.getName(),
+ rankProfile.getName(),
+ search.getAttribute(attributeName), attributeName).validate();
}
public static class AttributeValidator {
@@ -66,13 +69,13 @@ public class MatchPhaseSettingsValidator extends Processor {
attribute.getType().equals(Attribute.Type.STRING) ||
attribute.getType().equals(Attribute.Type.PREDICATE))
{
- failValidation("must be single value numeric, but it is '"
- + attribute.getDataType().getName() + "'");
+ failValidation("must be single value numeric, but it is '" +
+ attribute.getDataType().getName() + "'");
}
}
protected void validateThatAttributeIsFastSearch() {
- if (!attribute.isFastSearch()) {
+ if ( ! attribute.isFastSearch()) {
failValidation("must be fast-search, but it is not");
}
}
@@ -88,5 +91,7 @@ public class MatchPhaseSettingsValidator extends Processor {
"', rank-profile '" + rankProfileName +
"': " + getValidationType() + " attribute '" + attributeName + "' ";
}
+
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MultifieldIndexHarmonizer.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MultifieldIndexHarmonizer.java
index 82b1d668397..45e018f8fc3 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MultifieldIndexHarmonizer.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MultifieldIndexHarmonizer.java
@@ -31,16 +31,15 @@ public class MultifieldIndexHarmonizer extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
populateIndexToFields(search);
resolveAllConflicts(search);
}
private void populateIndexToFields(Search search) {
for (SDField field : search.allConcreteFields() ) {
- if (!field.doesIndexing()) {
- continue;
- }
+ if ( ! field.doesIndexing()) continue;
+
for (Iterator j = field.getFieldNameAsIterator(); j.hasNext();) {
String indexName = (String)j.next();
addIndexField(indexName, field);
@@ -49,10 +48,10 @@ public class MultifieldIndexHarmonizer extends Processor {
}
private void addIndexField(String indexName,SDField field) {
- List<SDField> fields=indexToFields.get(indexName);
- if (fields==null) {
- fields=new java.util.ArrayList<>();
- indexToFields.put(indexName,fields);
+ List<SDField> fields = indexToFields.get(indexName);
+ if (fields == null) {
+ fields = new java.util.ArrayList<>();
+ indexToFields.put(indexName, fields);
}
fields.add(field);
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/NGramMatch.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/NGramMatch.java
index 2b5e885b8fc..cdfba54ee5a 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/NGramMatch.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/NGramMatch.java
@@ -26,23 +26,23 @@ public class NGramMatch extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
if (field.getMatching().getType().equals(Matching.Type.GRAM))
- implementGramMatch(search, field);
- else if (field.getMatching().getGramSize()>=0)
+ implementGramMatch(search, field, validate);
+ else if (validate && field.getMatching().getGramSize() >= 0)
throw new IllegalArgumentException("gram-size can only be set when the matching mode is 'gram'");
}
}
- private void implementGramMatch(Search search, SDField field) {
- if (field.doesAttributing())
+ private void implementGramMatch(Search search, SDField field, boolean validate) {
+ if (validate && field.doesAttributing())
throw new IllegalArgumentException("gram matching is not supported with attributes, use 'index' not 'attribute' in indexing");
int n = field.getMatching().getGramSize();
- if (n<0)
+ if (n < 0)
n=DEFAULT_GRAM_SIZE; // not set - use default gram size
- if (n==0)
+ if (validate && n == 0)
throw new IllegalArgumentException("Illegal gram size in " + field + ": Must be at least 1");
field.getNormalizing().inferCodepoint();
field.setStemming(Stemming.NONE); // not compatible with stemming and normalizing
@@ -72,5 +72,7 @@ public class NGramMatch extends Processor {
}
return exp;
}
+
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/OptimizeIlscript.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/OptimizeIlscript.java
index 2c82a9bafcb..c89c709ffbf 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/OptimizeIlscript.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/OptimizeIlscript.java
@@ -13,21 +13,26 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
* Run ExpressionOptimizer on all scripts, to get rid of expressions that have no effect.
*/
public class OptimizeIlscript extends Processor {
- public OptimizeIlscript(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
+
+ public OptimizeIlscript(Search search,
+ DeployLogger deployLogger,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles) {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
ScriptExpression script = field.getIndexingScript();
- if (script == null) {
- continue;
- }
+ if (script == null) continue;
+
field.setIndexingScript((ScriptExpression)new ExpressionOptimizer().convert(script));
- if (!field.getIndexingScript().toString().equals(script.toString())) {
- warn(search, field, "Rewrote ilscript from:\n" + script.toString() + "\nto\n" + field.getIndexingScript().toString());
+ if ( ! field.getIndexingScript().toString().equals(script.toString())) {
+ warn(search, field, "Rewrote ilscript from:\n" + script.toString() +
+ "\nto\n" + field.getIndexingScript().toString());
}
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java
index 4b9b090cdc5..3583c4a0162 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java
@@ -33,26 +33,26 @@ public class PredicateProcessor extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
if (field.getDataType() == DataType.PREDICATE) {
- if (field.doesIndexing()) {
+ if (validate && field.doesIndexing()) {
fail(search, field, "Use 'attribute' instead of 'index'. This will require a refeed if you have upgraded.");
}
if (field.doesAttributing()) {
Attribute attribute = field.getAttributes().get(field.getName());
for (Index index : field.getIndices().values()) {
BooleanIndexDefinition booleanDefinition = index.getBooleanIndexDefiniton();
- if (booleanDefinition == null || !booleanDefinition.hasArity()) {
+ if (validate && (booleanDefinition == null || ! booleanDefinition.hasArity())) {
fail(search, field, "Missing arity value in predicate field.");
}
- if (booleanDefinition.getArity() < 2) {
+ if (validate && (booleanDefinition.getArity() < 2)) {
fail(search, field, "Invalid arity value in predicate field, must be greater than 1.");
}
double threshold = booleanDefinition.getDensePostingListThreshold();
- if (threshold <= 0 || threshold > 1) {
+ if (validate && (threshold <= 0 || threshold > 1)) {
fail(search, field, "Invalid dense-posting-list-threshold value in predicate field. " +
- "Value must be in range (0..1].");
+ "Value must be in range (0..1].");
}
attribute.setArity(booleanDefinition.getArity());
@@ -70,11 +70,11 @@ public class PredicateProcessor extends Processor {
summaryField.setTransform(SummaryTransform.NONE);
}
}
- } else if (field.getDataType().getPrimitiveType() == DataType.PREDICATE) {
+ } else if (validate && field.getDataType().getPrimitiveType() == DataType.PREDICATE) {
fail(search, field, "Collections of predicates are not allowed.");
- } else if (field.getDataType() == DataType.RAW && field.doesIndexing()) {
+ } else if (validate && field.getDataType() == DataType.RAW && field.doesIndexing()) {
fail(search, field, "Indexing of RAW fields is not supported.");
- } else {
+ } else if (validate) {
// if field is not a predicate, disallow predicate-related index parameters
for (Index index : field.getIndices().values()) {
if (index.getBooleanIndexDefiniton() != null) {
@@ -94,9 +94,8 @@ public class PredicateProcessor extends Processor {
private void addPredicateOptimizationIlScript(SDField field, BooleanIndexDefinition booleanIndexDefiniton) {
Expression script = field.getIndexingScript();
- if (script == null) {
- return;
- }
+ if (script == null) return;
+
script = new StatementExpression(makeSetPredicateVariablesScript(booleanIndexDefiniton), script);
ExpressionConverter converter = new PredicateOutputTransformer(search);
@@ -133,6 +132,7 @@ public class PredicateProcessor extends Processor {
protected Expression newTransform(DataType fieldType) {
return new OptimizePredicateExpression();
}
+
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
index ceb2f06f1d5..f76894f985c 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
@@ -32,7 +32,6 @@ public class Processing {
SetLanguage::new,
UriHack::new,
LiteralBoost::new,
- IndexTo2FieldSet::new,
TagType::new,
IndexingInputs::new,
OptimizeIlscript::new,
@@ -76,7 +75,7 @@ public class Processing {
ImportedFieldsInSummayValidator::new,
FastAccessValidator::new,
ReservedMacroNames::new,
- //RankingExpressionTypeValidator::new,
+ RankingExpressionTypeValidator::new,
// These should be last.
IndexingValidation::new,
@@ -95,11 +94,12 @@ public class Processing {
public static void process(Search search,
DeployLogger deployLogger,
RankProfileRegistry rankProfileRegistry,
- QueryProfiles queryProfiles) {
+ QueryProfiles queryProfiles,
+ boolean validate) {
search.process();
factories.stream()
.map(factory -> factory.create(search, deployLogger, rankProfileRegistry, queryProfiles))
- .forEach(Processor::process);
+ .forEach(processor -> processor.process(validate));
}
@FunctionalInterface
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java
index a9923675236..b0fbc6c1998 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java
@@ -30,13 +30,16 @@ public abstract class Processor {
/**
* Base constructor
+ *
* @param search the search to process
* @param deployLogger Logger du use when logging deploy output.
* @param rankProfileRegistry Registry with all rank profiles, used for lookup and insertion.
* @param queryProfiles The query profiles contained in the application this search is part of.
*/
- public Processor(Search search, DeployLogger deployLogger,
- RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
+ public Processor(Search search,
+ DeployLogger deployLogger,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles) {
this.search = search;
this.deployLogger = deployLogger;
this.rankProfileRegistry = rankProfileRegistry;
@@ -46,8 +49,12 @@ public abstract class Processor {
/**
* Processes the input search definition by <b>modifying</b> the input search and its documents, and returns the
* input search definition.
+ *
+ * @param validate true to throw exceptions on validation errors, false to make the best possible effort
+ * at completing processing without throwing an exception.
+ * If we are not validating, emitting warnings have no effect and can (but must not) be skipped.
*/
- public abstract void process();
+ public abstract void process(boolean validate);
/**
* Convenience method for adding a no-strings-attached implementation field for a regular field
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidator.java
index baacceea667..f7f314f8444 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidator.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidator.java
@@ -33,7 +33,9 @@ public class RankingExpressionTypeValidator extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (RankProfile profile : rankProfileRegistry.localRankProfiles(search)) {
try {
validate(profile);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReferenceFieldsProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReferenceFieldsProcessor.java
index f29d53d1c86..76afcd5d520 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReferenceFieldsProcessor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReferenceFieldsProcessor.java
@@ -28,7 +28,7 @@ public class ReferenceFieldsProcessor extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
clearSummaryAttributeAspectForConcreteFields();
clearSummaryAttributeAspectForExplicitSummaryFields();
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedDocumentNames.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedDocumentNames.java
index 4152d07f8db..43a58fc9634 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedDocumentNames.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedDocumentNames.java
@@ -11,11 +11,12 @@ import java.util.HashSet;
import java.util.Set;
/**
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
public class ReservedDocumentNames extends Processor {
private static final Set<String> RESERVED_NAMES = new HashSet<>();
+
static {
for (SDDocumentType dataType : SDDocumentType.VESPA_DOCUMENT.getTypes()) {
RESERVED_NAMES.add(dataType.getName());
@@ -27,7 +28,9 @@ public class ReservedDocumentNames extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
String docName = search.getDocument().getName();
if (RESERVED_NAMES.contains(docName)) {
throw new IllegalArgumentException("For search '" + search.getName() + "': Document name '" + docName +
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedMacroNames.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedMacroNames.java
index f7036c2d7bd..b8eb1e1d8cf 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedMacroNames.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReservedMacroNames.java
@@ -20,6 +20,7 @@ import java.util.logging.Level;
* @author lesters
*/
public class ReservedMacroNames extends Processor {
+
private static Set<String> reservedNames = getReservedNames();
public ReservedMacroNames(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
@@ -27,14 +28,16 @@ public class ReservedMacroNames extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (RankProfile rp : rankProfileRegistry.allRankProfiles()) {
for (String macroName : rp.getMacros().keySet()) {
if (reservedNames.contains(macroName)) {
deployLogger.log(Level.WARNING, "Macro \"" + macroName + "\" " +
- "in rank profile \"" + rp.getName() + "\" " +
- "has a reserved name. This might mean that the macro shadows " +
- "the built-in function with the same name."
+ "in rank profile \"" + rp.getName() + "\" " +
+ "has a reserved name. This might mean that the macro shadows " +
+ "the built-in function with the same name."
);
}
}
@@ -49,4 +52,5 @@ public class ReservedMacroNames extends Processor {
}
return names.build();
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SearchMustHaveDocument.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SearchMustHaveDocument.java
index b3b9ece3909..403de1253b4 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SearchMustHaveDocument.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SearchMustHaveDocument.java
@@ -9,8 +9,8 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
/**
* A search must have a document definition of the same name inside of it, otherwise crashes may occur as late as
* during feeding
- * @author vegardh
*
+ * @author Vegard Havdal
*/
public class SearchMustHaveDocument extends Processor {
@@ -19,10 +19,12 @@ public class SearchMustHaveDocument extends Processor {
}
@Override
- public void process() {
- if (search.getDocument()==null) {
- throw new IllegalArgumentException("For search '" + search.getName() + "': A search specification must have an equally named document inside of it.");
- }
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
+ if (search.getDocument() == null)
+ throw new IllegalArgumentException("For search '" + search.getName() +
+ "': A search specification must have an equally named document inside of it.");
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SetLanguage.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SetLanguage.java
index 38c1d1a94d3..a0c884d25f9 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SetLanguage.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SetLanguage.java
@@ -24,7 +24,7 @@ public class SetLanguage extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
List<String> textFieldsWithoutLanguage = new ArrayList<>();
for (SDField field : search.allConcreteFields()) {
@@ -37,10 +37,10 @@ public class SetLanguage extends Processor {
fieldString.append(fieldName).append(" ");
}
warn(search, field, "Field '" + field.getName() + "' sets the language for this document, " +
- "and should be defined as the first field in the searchdefinition." +
- "Preceding text fields that will not have their language set: " +
- fieldString.toString() +
- " (This warning is omitted for any subsequent fields that also do set_language.)");
+ "and should be defined as the first field in the searchdefinition." +
+ "Preceding text fields that will not have their language set: " +
+ fieldString.toString() +
+ " (This warning is omitted for any subsequent fields that also do set_language.)");
return;
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SetRankTypeEmptyOnFilters.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SetRankTypeEmptyOnFilters.java
index ffc6e1e32a2..a19ea8d7068 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SetRankTypeEmptyOnFilters.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SetRankTypeEmptyOnFilters.java
@@ -20,7 +20,7 @@ public class SetRankTypeEmptyOnFilters extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
if (field.getRanking().isFilter()) {
field.setRankType(RankType.EMPTY);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SortingSettings.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SortingSettings.java
index 3498515ab56..6426c724a07 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SortingSettings.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SortingSettings.java
@@ -11,8 +11,8 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
/**
* Validate conflicting settings for sorting
- * @author vegardh
*
+ * @author Vegard Havdal
*/
public class SortingSettings extends Processor {
@@ -21,15 +21,17 @@ public class SortingSettings extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (SDField field : search.allConcreteFields()) {
for (Attribute attribute : field.getAttributes().values()) {
Sorting sorting = attribute.getSorting();
- if (sorting.getFunction()!=Sorting.Function.UCA) {
- if (sorting.getStrength()!=null && sorting.getStrength()!=Sorting.Strength.PRIMARY) {
+ if (sorting.getFunction() != Sorting.Function.UCA) {
+ if (sorting.getStrength()!=null && sorting.getStrength() != Sorting.Strength.PRIMARY) {
warn(search, field, "Sort strength only works for sort function 'uca'.");
}
- if (sorting.getLocale()!=null && !"".equals(sorting.getLocale())) {
+ if (sorting.getLocale() != null && ! "".equals(sorting.getLocale())) {
warn(search, field, "Sort locale only works for sort function 'uca'.");
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/StringSettingsOnNonStringFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/StringSettingsOnNonStringFields.java
index b01fbb47bf1..d56b0272f06 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/StringSettingsOnNonStringFields.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/StringSettingsOnNonStringFields.java
@@ -16,11 +16,14 @@ public class StringSettingsOnNonStringFields extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (SDField field : search.allConcreteFields()) {
- if (!doCheck(field)) continue;
+ if ( ! doCheck(field)) continue;
if (field.getMatching().isTypeUserSet()) {
- warn(search, field, "Matching type "+field.getMatching().getType()+" is only allowed for string fields.");
+ warn(search, field, "Matching type " + field.getMatching().getType() +
+ " is only allowed for string fields.");
}
if (field.getRanking().isLiteral()) {
warn(search, field, "Rank type literal only applies to string fields");
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java
index 3bb33cfb949..a952d3732b3 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java
@@ -26,39 +26,43 @@ public class SummaryConsistency extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (DocumentSummary summary : search.getSummaries().values()) {
if (summary.getName().equals("default")) continue;
+
for (SummaryField summaryField : summary.getSummaryFields() ) {
- assertConsistency(summaryField, search);
+ assertConsistency(summaryField, search, validate);
makeAttributeTransformIfAppropriate(summaryField, search);
}
}
}
- /** If the source is an attribute, make this use the attribute transform */
- private void makeAttributeTransformIfAppropriate(SummaryField summaryField,Search search) {
- if (summaryField.getTransform() != SummaryTransform.NONE) return;
- Attribute attribute = search.getAttribute(summaryField.getSingleSource());
- if (attribute == null) return;
- summaryField.setTransform(SummaryTransform.ATTRIBUTE);
- }
-
- private void assertConsistency(SummaryField summaryField, Search search) {
- SummaryField existingDefault = search.getSummary("default").getSummaryField(summaryField.getName()); // Compare to default
+ private void assertConsistency(SummaryField summaryField, Search search, boolean validate) {
+ // Compare to default:
+ SummaryField existingDefault = search.getSummary("default").getSummaryField(summaryField.getName());
if (existingDefault != null) {
- assertConsistentTypes(existingDefault, summaryField);
+ if (validate)
+ assertConsistentTypes(existingDefault, summaryField);
makeConsistentWithDefaultOrThrow(existingDefault, summaryField);
}
else {
// If no default, compare to whichever definition of the field
SummaryField existing = search.getExplicitSummaryField(summaryField.getName());
if (existing == null) return;
- assertConsistentTypes(existing, summaryField);
+ if (validate)
+ assertConsistentTypes(existing, summaryField);
makeConsistentOrThrow(existing, summaryField, search);
}
}
+ /** If the source is an attribute, make this use the attribute transform */
+ private void makeAttributeTransformIfAppropriate(SummaryField summaryField,Search search) {
+ if (summaryField.getTransform() != SummaryTransform.NONE) return;
+ Attribute attribute = search.getAttribute(summaryField.getSingleSource());
+ if (attribute == null) return;
+ summaryField.setTransform(SummaryTransform.ATTRIBUTE);
+ }
+
private void assertConsistentTypes(SummaryField existing, SummaryField seen) {
if (existing.getDataType() instanceof WeightedSetDataType && seen.getDataType() instanceof WeightedSetDataType &&
((WeightedSetDataType)existing.getDataType()).getNestedType().equals(((WeightedSetDataType)seen.getDataType()).getNestedType()))
@@ -90,6 +94,7 @@ public class SummaryConsistency extends Processor {
assertEqualTransform(field1,field2);
}
}
+
private void makeConsistentWithDefaultOrThrow(SummaryField defaultField, SummaryField newField) {
if (newField.getTransform().equals(SummaryTransform.NONE)) {
newField.setTransform(defaultField.getTransform());
@@ -99,12 +104,11 @@ public class SummaryConsistency extends Processor {
}
}
-
private void assertEqualTransform(SummaryField field1, SummaryField field2) {
if ( ! field2.getTransform().equals(field1.getTransform())) {
- throw new IllegalArgumentException("Conflicting summary transforms. " + field2 +" is already defined as " +
- field1 + ". A field with the same name " +
- "can not have different transforms in different summary classes");
+ throw new IllegalArgumentException("Conflicting summary transforms. " + field2 + " is already defined as " +
+ field1 + ". A field with the same name " +
+ "can not have different transforms in different summary classes");
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java
index 0f9864e854f..647a433f201 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java
@@ -16,8 +16,8 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
* An SD field explicitly says summary:dynamic , but the field is wset, array or struct.
* If there is an explicitly defined summary class, saying dynamic in one of its summary
* fields is always legal.
- * @author vegardh
*
+ * @author Vegard Havdal
*/
public class SummaryDynamicStructsArrays extends Processor {
@@ -26,16 +26,18 @@ public class SummaryDynamicStructsArrays extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (SDField field : search.allConcreteFields()) {
DataType type = field.getDataType();
- if (type instanceof ArrayDataType || type instanceof WeightedSetDataType
- || type instanceof StructDataType) {
+ if (type instanceof ArrayDataType || type instanceof WeightedSetDataType || type instanceof StructDataType) {
for (SummaryField sField : field.getSummaryFields()) {
if (sField.getTransform().equals(SummaryTransform.DYNAMICTEASER)) {
throw new IllegalArgumentException("For field '"+field.getName()+"': dynamic summary is illegal " +
- "for fields of type struct, array or weighted set. Use an explicit summary class with explicit summary fields sourcing from" +
- " the array/struct/weighted set.");
+ "for fields of type struct, array or weighted set. Use an " +
+ "explicit summary class with explicit summary fields sourcing" +
+ " from the array/struct/weighted set.");
}
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java
index 746dd284d23..7bcbd9a267c 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java
@@ -16,11 +16,15 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
*
*/
public class SummaryFieldsMustHaveValidSource extends Processor {
+
SummaryFieldsMustHaveValidSource(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
}
+
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (DocumentSummary summary : search.getSummaries().values()) {
for (SummaryField summaryField : summary.getSummaryFields()) {
if (summaryField.getSources().isEmpty()) {
@@ -52,8 +56,9 @@ public class SummaryFieldsMustHaveValidSource extends Processor {
private void verifySource(String source, SummaryField summaryField, DocumentSummary summary) {
if ( ! isValid(source, summaryField, summary) ) {
- throw new IllegalArgumentException("For search '" + search.getName() + "', summary class '" + summary.getName() + "'," +
- " summary field '" + summaryField.getName() + "': there is no valid source '" + source + "'.");
+ throw new IllegalArgumentException("For search '" + search.getName() + "', summary class '" +
+ summary.getName() + "'," + " summary field '" + summaryField.getName() +
+ "': there is no valid source '" + source + "'.");
}
}
@@ -64,6 +69,7 @@ public class SummaryFieldsMustHaveValidSource extends Processor {
private static boolean isInThisSummaryClass(DocumentSummary summary, String name) {
return summary.getSummaryField(name) != null;
}
+
private boolean isDocumentField(String name) {
return search.getField(name) != null;
}
@@ -71,4 +77,5 @@ public class SummaryFieldsMustHaveValidSource extends Processor {
private boolean isSummaryField(String name) {
return search.getSummaryField(name) != null;
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryNamesFieldCollisions.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryNamesFieldCollisions.java
index 661904f8028..23569cf39ae 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryNamesFieldCollisions.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryNamesFieldCollisions.java
@@ -17,8 +17,7 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
* Verifies that equally named summary fields in different summary classes don't use different fields for source.
* The summarymap config doesn't model this.
*
- * @author vegardh
- *
+ * @author Vegard Havdal
*/
public class SummaryNamesFieldCollisions extends Processor {
@@ -27,7 +26,9 @@ public class SummaryNamesFieldCollisions extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
Map<String, Pair<String, String>> fieldToClassAndSource = new HashMap<>();
for (DocumentSummary summary : search.getSummaries().values()) {
if ("default".equals(summary.getName())) continue;
@@ -38,12 +39,14 @@ public class SummaryNamesFieldCollisions extends Processor {
if (prevClassAndSource!=null) {
String prevClass = prevClassAndSource.getFirst();
String prevSource = prevClassAndSource.getSecond();
- if (!prevClass.equals(summary.getName())) {
- if (!prevSource.equals(source.getName())) {
- throw new IllegalArgumentException("For search '"+search.getName()+"', summary class '"+summary.getName()+"'," +
- " summary field '"+summaryField.getName()+"':" +
- " Can not use source '"+source.getName()+"' for this summary field, an equally named field in summary class '" +
- prevClass + "' uses a different source: '"+prevSource+"'.");
+ if ( ! prevClass.equals(summary.getName())) {
+ if ( ! prevSource.equals(source.getName())) {
+ throw new IllegalArgumentException("For search '"+ search.getName() +
+ "', summary class '" + summary.getName()+"'," +
+ " summary field '" + summaryField.getName() + "':" +
+ " Can not use source '" + source.getName() +
+ "' for this summary field, an equally named field in summary class '" +
+ prevClass + "' uses a different source: '"+prevSource+"'.");
}
}
} else {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TagType.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TagType.java
index 8efeb0ed6d6..177fc7f2326 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TagType.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TagType.java
@@ -17,28 +17,29 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
*/
public class TagType extends Processor {
- public TagType(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
+ public TagType(Search search,
+ DeployLogger deployLogger,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles) {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
- if (field.getDataType() instanceof WeightedSetDataType && ((WeightedSetDataType)field.getDataType()).isTag()) {
+ if (field.getDataType() instanceof WeightedSetDataType && ((WeightedSetDataType)field.getDataType()).isTag())
implementTagType(field);
- }
}
}
private void implementTagType(SDField field) {
- field.setDataType(DataType.getWeightedSet(DataType.STRING,true,true));
+ field.setDataType(DataType.getWeightedSet(DataType.STRING, true, true));
// Don't set matching and ranking if this field is not attribute nor index
if (!field.doesIndexing() && !field.doesAttributing()) return;
Matching m = field.getMatching();
- if (!m.isTypeUserSet()) {
+ if ( ! m.isTypeUserSet())
m.setType(Matching.Type.WORD);
- }
- if (field.getRankType()==null || field.getRankType()== RankType.DEFAULT)
+ if (field.getRankType() == null || field.getRankType() == RankType.DEFAULT)
field.setRankType((RankType.TAGS));
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java
index 7ec397b16b4..427089ebd24 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java
@@ -22,7 +22,9 @@ public class TensorFieldProcessor extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (SDField field : search.allConcreteFields()) {
if ( field.getDataType() instanceof TensorDataType ) {
warnUseOfTensorFieldAsAttribute(field);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TextMatch.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TextMatch.java
index 02655906f65..b45f7d61a37 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TextMatch.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TextMatch.java
@@ -34,36 +34,35 @@ public class TextMatch extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
- if (field.getMatching().getType() != Matching.Type.TEXT) {
- continue;
- }
+ if (field.getMatching().getType() != Matching.Type.TEXT) continue;
+
ScriptExpression script = field.getIndexingScript();
- if (script == null) {
- continue;
- }
+ if (script == null) continue;
+
DataType fieldType = field.getDataType();
if (fieldType instanceof CollectionDataType) {
fieldType = ((CollectionDataType)fieldType).getNestedType();
}
- if (fieldType != DataType.STRING) {
- continue;
- }
+ if (fieldType != DataType.STRING) continue;
+
Set<String> dynamicSummary = new TreeSet<>();
Set<String> staticSummary = new TreeSet<>();
- new IndexingOutputs(search, deployLogger, rankProfileRegistry, queryProfiles).findSummaryTo(search, field, dynamicSummary, staticSummary);
+ new IndexingOutputs(search, deployLogger, rankProfileRegistry, queryProfiles).findSummaryTo(search,
+ field,
+ dynamicSummary,
+ staticSummary);
MyVisitor visitor = new MyVisitor(dynamicSummary);
visitor.visit(script);
- if (!visitor.requiresTokenize) {
- continue;
- }
+ if ( ! visitor.requiresTokenize) continue;
+
ExpressionConverter converter = new MyStringTokenizer(search, findAnnotatorConfig(search, field));
field.setIndexingScript((ScriptExpression)converter.convert(script));
}
}
- private static AnnotatorConfig findAnnotatorConfig(Search search, SDField field) {
+ private AnnotatorConfig findAnnotatorConfig(Search search, SDField field) {
AnnotatorConfig ret = new AnnotatorConfig();
Stemming activeStemming = field.getStemming();
if (activeStemming == null) {
@@ -97,6 +96,7 @@ public class TextMatch extends Processor {
requiresTokenize = true;
}
}
+
}
private static class MyStringTokenizer extends TypedTransformProvider {
@@ -121,5 +121,7 @@ public class TextMatch extends Processor {
}
return exp;
}
+
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TypedTransformProvider.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TypedTransformProvider.java
index 8ad985f07b9..b329cc3bea3 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TypedTransformProvider.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TypedTransformProvider.java
@@ -9,7 +9,7 @@ import com.yahoo.vespa.indexinglanguage.ValueTransformProvider;
import com.yahoo.vespa.indexinglanguage.expressions.*;
/**
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
public abstract class TypedTransformProvider extends ValueTransformProvider {
@@ -27,23 +27,23 @@ public abstract class TypedTransformProvider extends ValueTransformProvider {
String fieldName = ((OutputExpression)exp).getFieldName();
if (exp instanceof AttributeExpression) {
Attribute attribute = search.getAttribute(fieldName);
- if (attribute == null) {
+ if (attribute == null)
throw new IllegalArgumentException("Attribute '" + fieldName + "' not found.");
- }
fieldType = attribute.getDataType();
- } else if (exp instanceof IndexExpression) {
+ }
+ else if (exp instanceof IndexExpression) {
Field field = search.getConcreteField(fieldName);
- if (field == null) {
+ if (field == null)
throw new IllegalArgumentException("Index field '" + fieldName + "' not found.");
- }
fieldType = field.getDataType();
- } else if (exp instanceof SummaryExpression) {
+ }
+ else if (exp instanceof SummaryExpression) {
Field field = search.getSummaryField(fieldName);
- if (field == null) {
+ if (field == null)
throw new IllegalArgumentException("Summary field '" + fieldName + "' not found.");
- }
fieldType = field.getDataType();
- } else {
+ }
+ else {
throw new UnsupportedOperationException();
}
}
@@ -58,4 +58,5 @@ public abstract class TypedTransformProvider extends ValueTransformProvider {
protected abstract boolean requiresTransform(Expression exp, DataType fieldType);
protected abstract Expression newTransform(DataType fieldType);
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/UriHack.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/UriHack.java
index e3e3f003612..ac376982cfa 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/UriHack.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/UriHack.java
@@ -16,14 +16,19 @@ import java.util.List;
* @author baldersheim
*/
public class UriHack extends Processor {
+
private static final List<String> URL_SUFFIX =
Arrays.asList("scheme", "host", "port", "path", "query", "fragment", "hostname");
- public UriHack(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
+
+ public UriHack(Search search,
+ DeployLogger deployLogger,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles) {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
}
@Override
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
if (field.doesIndexing()) {
DataType fieldType = field.getDataType();
@@ -43,10 +48,12 @@ public class UriHack extends Processor {
DataType generatedType = DataType.STRING;
if (uriField.getDataType() instanceof ArrayDataType) {
generatedType = new ArrayDataType(DataType.STRING);
- } else if (uriField.getDataType() instanceof WeightedSetDataType) {
+ }
+ else if (uriField.getDataType() instanceof WeightedSetDataType) {
WeightedSetDataType wdt = (WeightedSetDataType) uriField.getDataType();
generatedType = new WeightedSetDataType(DataType.STRING, wdt.createIfNonExistent(), wdt.removeIfZero());
}
+
for (String suffix : URL_SUFFIX) {
String partName = uriName + "." + suffix;
// I wonder if this is explicit in qrs or implicit in backend?
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/UrlFieldValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/UrlFieldValidator.java
index b1cbb2cbf68..ed813b42fff 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/UrlFieldValidator.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/UrlFieldValidator.java
@@ -18,7 +18,9 @@ public class UrlFieldValidator extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
for (SDField field : search.allConcreteFields()) {
if ( ! field.getDataType().equals(DataType.URI)) continue;
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java
index 8e0f7a7f340..45e4b994ac9 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java
@@ -28,7 +28,9 @@ public class ValidateFieldTypes extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
String searchName = search.getName();
Map<String, DataType> seenFields = new HashMap<>();
search.allFields().forEach(field -> {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldWithIndexSettingsCreatesIndex.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldWithIndexSettingsCreatesIndex.java
index bc7d7195eb5..a0b204a25f2 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldWithIndexSettingsCreatesIndex.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldWithIndexSettingsCreatesIndex.java
@@ -21,22 +21,22 @@ public class ValidateFieldWithIndexSettingsCreatesIndex extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
+ if ( ! validate) return;
+
Matching defaultMatching = new Matching();
Ranking defaultRanking = new Ranking();
for (SDField field : search.allConcreteFields()) {
- if (field.doesIndexing()) {
- continue;
- }
- if (field.doesAttributing()) {
- continue;
- }
- if (!(field.getRanking().equals(defaultRanking))) {
- fail(search, field, "Fields which are not creating an index or attribute can not contain rank settings.");
- }
- if (!(field.getMatching().equals(defaultMatching))) {
- fail(search, field, "Fields which are not creating an index or attribute can not contain match settings.");
- }
+ if (field.doesIndexing()) continue;
+ if (field.doesAttributing()) continue;
+
+ if ( ! field.getRanking().equals(defaultRanking))
+ fail(search, field,
+ "Fields which are not creating an index or attribute can not contain rank settings.");
+ if ( ! field.getMatching().equals(defaultMatching))
+ fail(search, field,
+ "Fields which are not creating an index or attribute can not contain match settings.");
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/WordMatch.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/WordMatch.java
index c80624a5019..892bcdad12c 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/WordMatch.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/WordMatch.java
@@ -25,14 +25,14 @@ public class WordMatch extends Processor {
super(search, deployLogger, rankProfileRegistry, queryProfiles);
}
- public void process() {
+ public void process(boolean validate) {
for (SDField field : search.allConcreteFields()) {
- if (!field.getMatching().getType().equals(Matching.Type.WORD)) {
- continue;
- }
+ if ( ! field.getMatching().getType().equals(Matching.Type.WORD)) continue;
+
field.setStemming(Stemming.NONE);
field.getNormalizing().inferLowercase();
field.addQueryCommand("word");
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java
index 7cb9fee3449..e402217cb9f 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/multifieldresolver/RankProfileTypeSettingsProcessor.java
@@ -34,7 +34,7 @@ public class RankProfileTypeSettingsProcessor extends Processor {
}
@Override
- public void process() {
+ public void process(boolean validate) {
processAttributeFields();
processImportedFields();
processQueryProfileTypes();
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 a4130c8052c..a6b28a9d6e8 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
@@ -122,7 +122,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
* to instantiate config models
*/
public VespaModel(ApplicationPackage app, ConfigModelRegistry configModelRegistry) throws IOException, SAXException {
- this(configModelRegistry, new DeployState.Builder().applicationPackage(app).build());
+ this(configModelRegistry, new DeployState.Builder().applicationPackage(app).build(true));
}
/**
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
index 74512e70ebe..300cd34f57e 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
@@ -88,13 +88,13 @@ public class VespaModelFactory implements ModelFactory {
@Override
public Model createModel(ModelContext modelContext) {
- return buildModel(createDeployState(modelContext));
+ return buildModel(createDeployState(modelContext, false));
}
@Override
public ModelCreateResult createAndValidateModel(ModelContext modelContext, boolean ignoreValidationErrors) {
validateXml(modelContext, ignoreValidationErrors);
- DeployState deployState = createDeployState(modelContext);
+ DeployState deployState = createDeployState(modelContext, true);
VespaModel model = buildModel(deployState);
List<ConfigChangeAction> changeActions = validateModel(model, deployState, ignoreValidationErrors);
return new ModelCreateResult(model, changeActions);
@@ -126,7 +126,7 @@ public class VespaModelFactory implements ModelFactory {
}
}
- private DeployState createDeployState(ModelContext modelContext) {
+ private DeployState createDeployState(ModelContext modelContext, boolean validate) {
DeployState.Builder builder = new DeployState.Builder()
.applicationPackage(modelContext.applicationPackage())
.deployLogger(modelContext.deployLogger())
@@ -140,7 +140,7 @@ public class VespaModelFactory implements ModelFactory {
.now(clock.instant())
.wantedNodeVespaVersion(modelContext.wantedNodeVespaVersion());
modelContext.previousModel().ifPresent(builder::previousModel);
- return builder.build();
+ return builder.build(validate);
}
private DeployProperties createDeployProperties(ModelContext.Properties properties) {
diff --git a/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java b/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java
index 390017e8588..f113b10f508 100644
--- a/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java
@@ -239,7 +239,7 @@ public class ApplicationDeployTest {
}
private List<SearchDefinition> getSearchDefinitions(FilesApplicationPackage app) {
- return new DeployState.Builder().applicationPackage(app).build().getSearchDefinitions();
+ return new DeployState.Builder().applicationPackage(app).build(true).getSearchDefinitions();
}
public FilesApplicationPackage createAppPkg(String appPkg) throws IOException {
@@ -375,7 +375,7 @@ public class ApplicationDeployTest {
final File appDir = new File("src/test/cfg/application/configdeftest");
FilesApplicationPackage app = FilesApplicationPackage.fromFile(appDir);
- DeployState deployState = new DeployState.Builder().applicationPackage(app).build();
+ DeployState deployState = new DeployState.Builder().applicationPackage(app).build(true);
ConfigDefinition def = deployState.getConfigDefinition(new ConfigDefinitionKey("foo", CNode.DEFAULT_NAMESPACE)).get();
assertThat(def.getNamespace(), is(CNode.DEFAULT_NAMESPACE));
@@ -393,9 +393,9 @@ public class ApplicationDeployTest {
}
@Test(expected=IllegalArgumentException.class)
- public void testDifferentNameOfSdFileAndSearchName() throws SAXException, IOException {
+ public void testDifferentNameOfSdFileAndSearchName() throws IOException {
FilesApplicationPackage app = createAppPkg(TESTDIR + "sdfilenametest");
- new DeployState.Builder().applicationPackage(app).build();
+ new DeployState.Builder().applicationPackage(app).build(true);
}
}
diff --git a/config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java b/config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java
index 5896cdfa495..cfadea9297a 100644
--- a/config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java
@@ -32,8 +32,7 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
/**
- * @author lulf
- * @since 5.12
+ * @author Ulf Lilleengen
*/
public class DeployStateTest {
@@ -42,7 +41,7 @@ public class DeployStateTest {
DeployState.Builder builder = new DeployState.Builder();
HostProvisioner provisioner = new InMemoryProvisioner(true, "foo.yahoo.com");
builder.modelHostProvisioner(provisioner);
- DeployState state = builder.build();
+ DeployState state = builder.build(true);
assertThat(state.getProvisioner(), is(provisioner));
}
@@ -51,7 +50,7 @@ public class DeployStateTest {
DeployState.Builder builder = new DeployState.Builder();
ApplicationPackage app = MockApplicationPackage.createEmpty();
builder.permanentApplicationPackage(Optional.of(app));
- DeployState state = builder.build();
+ DeployState state = builder.build(true);
assertThat(state.getPermanentApplicationPackage().get(), is(app));
}
@@ -59,20 +58,20 @@ public class DeployStateTest {
public void testPreviousModelIsProvided() throws IOException, SAXException {
VespaModel prevModel = new VespaModel(MockApplicationPackage.createEmpty());
DeployState.Builder builder = new DeployState.Builder();
- assertThat(builder.previousModel(prevModel).build().getPreviousModel().get(), is(prevModel));
+ assertThat(builder.previousModel(prevModel).build(true).getPreviousModel().get(), is(prevModel));
}
@Test
public void testProperties() {
DeployState.Builder builder = new DeployState.Builder();
- DeployState state = builder.build();
+ DeployState state = builder.build(true);
assertThat(state.getProperties().applicationId(), is(ApplicationId.defaultId()));
ApplicationId customId = new ApplicationId.Builder()
.tenant("bar")
.applicationName("foo").instanceName("quux").build();
DeployProperties properties = new DeployProperties.Builder().applicationId(customId).build();
builder.properties(properties);
- state = builder.build();
+ state = builder.build(true);
assertThat(state.getProperties().applicationId(), is(customId));
}
@@ -113,11 +112,11 @@ public class DeployStateTest {
@Test
public void testRotations() {
Set<Rotation> rotations = new HashSet<>();
- assertThat(new DeployState.Builder().rotations(rotations).build().getRotations().size(), is(0));
+ assertThat(new DeployState.Builder().rotations(rotations).build(true).getRotations().size(), is(0));
for (String name : new String[]{"rotation-001.vespa.a02.yahoodns.net", "rotation-002.vespa.a02.yahoodns.net"}) {
rotations.add(new Rotation(name));
}
- assertThat(new DeployState.Builder().rotations(rotations).build().getRotations(), equalTo(rotations));
+ assertThat(new DeployState.Builder().rotations(rotations).build(true).getRotations(), equalTo(rotations));
}
private DeployState createDeployState(ApplicationPackage app, Map<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> defs) {
@@ -128,7 +127,7 @@ public class DeployStateTest {
return defs;
}
});
- return builder.build();
+ return builder.build(true);
}
}
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 6ea15788cf3..91be617d0ea 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
@@ -1355,7 +1355,7 @@ public class ModelProvisioningTest {
ApplicationPackage appPkg = modelCreatorWithMockPkg.appPkg;
DeployState deployState = new DeployState.Builder().applicationPackage(appPkg).
properties((new DeployProperties.Builder()).multitenant(true).build()).
- build();
+ build(true);
return modelCreatorWithMockPkg.create(false, deployState);
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java
index 11093d9f008..ed612039fb7 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java
@@ -141,7 +141,7 @@ public class RankProfileTestCase extends SearchDefinitionTestCase {
" rank-profile p1 {}\n" +
" rank-profile p2 {}\n" +
"}");
- builder.build(new BaseDeployLogger());
+ builder.build(true, new BaseDeployLogger());
Search search = builder.getSearch();
assertEquals(4, registry.allRankProfiles().size());
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java
index d1a5bbad217..ace70e69959 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/SearchImporterTestCase.java
@@ -41,7 +41,7 @@ public class SearchImporterTestCase extends SearchDefinitionTestCase {
SDField field;
Attribute attribute;
- new MakeAliases(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles()).process();
+ new MakeAliases(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles()).process(true);
// First field
field=(SDField) document.getField("title");
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/IdTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/IdTestCase.java
index 3536257c315..274cf06aa37 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/IdTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/IdTestCase.java
@@ -31,7 +31,7 @@ public class IdTestCase extends AbstractExportingTestCase {
uri.parseIndexingScript("{ summary | index }");
document.addField(uri);
- Processing.process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles());
+ Processing.process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(), true);
assertNull(document.getField("uri"));
assertNull(document.getField("Uri"));
@@ -42,4 +42,5 @@ public class IdTestCase extends AbstractExportingTestCase {
public void testCompleteDeriving() throws Exception {
assertCorrectDeriving("id");
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java
index 77ad5051c19..59d2d9879d1 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java
@@ -40,7 +40,7 @@ public class LiteralBoostTestCase extends AbstractExportingTestCase {
rankProfileRegistry.addRankProfile(other);
other.addRankSetting(new RankProfile.RankSetting("a", RankProfile.RankSetting.Type.LITERALBOOST, 333));
- Processing.process(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles());
+ Processing.process(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles(), true);
DerivedConfiguration derived=new DerivedConfiguration(search, rankProfileRegistry, new QueryProfileRegistry());
// Check attribute fields
@@ -106,4 +106,5 @@ public class LiteralBoostTestCase extends AbstractExportingTestCase {
"clear_state | guard { input body | tokenize | index body_literal; }"),
search);
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryMapTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryMapTestCase.java
index 945bebd7078..0e02970280e 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryMapTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryMapTestCase.java
@@ -76,7 +76,7 @@ public class SummaryMapTestCase extends SearchDefinitionTestCase {
String fieldName = "location";
SDField field = document.addField(fieldName, PositionDataType.INSTANCE);
field.parseIndexingScript("{ attribute | summary }");
- Processing.process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles());
+ Processing.process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(), true);
SummaryMap summaryMap = new SummaryMap(search, new Summaries(search, new BaseDeployLogger()));
Iterator transforms = summaryMap.resultTransformIterator();
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/TypeConversionTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/TypeConversionTestCase.java
index 3d2e1d11e28..fd029c1df05 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/TypeConversionTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/TypeConversionTestCase.java
@@ -32,7 +32,7 @@ public class TypeConversionTestCase extends SearchDefinitionTestCase {
a.parseIndexingScript("{ index }");
document.addField(a);
- Processing.process(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles());
+ Processing.process(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles(), true);
DerivedConfiguration derived = new DerivedConfiguration(search, rankProfileRegistry, new QueryProfileRegistry());
IndexInfo indexInfo = derived.getIndexInfo();
assertFalse(indexInfo.hasCommand("default", "compact-to-term"));
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java
index 34c4e889860..a0556a156b5 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java
@@ -36,7 +36,7 @@ public class AddAttributeTransformToSummaryOfImportedFieldsTest {
AddAttributeTransformToSummaryOfImportedFields processor = new AddAttributeTransformToSummaryOfImportedFields(
search,null,null,null);
- processor.process();
+ processor.process(true);
SummaryField summaryField = search.getSummaries().get(SUMMARY_NAME).getSummaryField(IMPORTED_FIELD_NAME);
SummaryTransform actualTransform = summaryField.getTransform();
assertEquals(SummaryTransform.ATTRIBUTE, actualTransform);
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributePropertiesTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributePropertiesTestCase.java
index e6f2f8401ed..8f1cc9c3de8 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributePropertiesTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AttributePropertiesTestCase.java
@@ -19,19 +19,22 @@ import static org.junit.Assert.fail;
* @author hmusum
*/
public class AttributePropertiesTestCase extends SearchDefinitionTestCase {
+
@Test
public void testInvalidAttributeProperties() throws IOException, ParseException {
try {
Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/attributeproperties1.sd");
- new AttributeProperties(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process();
+ new AttributeProperties(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true);
fail("attribute property should not be set");
} catch (RuntimeException e) {
// empty
}
}
+
@Test
public void testValidAttributeProperties() throws IOException, ParseException {
Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/attributeproperties2.sd");
- new AttributeProperties(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process();
+ new AttributeProperties(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true);
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java
index a34818c35d8..4dee939e3da 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java
@@ -14,20 +14,23 @@ import java.io.IOException;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+
/**
- * @author <a href="mailto:mathiasm@yahoo-inc.com">Mathias M\u00F8lster Lidal</a>
+ * @author Mathias Mølster Lidal
*/
public class BoldingTestCase extends SearchDefinitionTestCase {
+
@Test
public void testBoldingNonString() throws IOException, ParseException {
try {
Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/processing/boldnonstring.sd");
- new Bolding(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process();
+ new Bolding(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true);
fail();
} catch (IllegalArgumentException e) {
assertTrue(e.getMessage().contains("'bolding: on' for non-text field"));
}
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummaryValidatorTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummaryValidatorTestCase.java
index c600f447f01..b8ec33563b0 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummaryValidatorTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummaryValidatorTestCase.java
@@ -33,8 +33,10 @@ public class ImportedFieldsInSummaryValidatorTestCase {
public void resolve() {
super.resolve();
- new ImportedFieldsInSummayValidator(childSearch, null, null, null).process();
+ new ImportedFieldsInSummayValidator(childSearch, null, null, null).process(true);
}
+
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java
index 7fb05c03cbf..ff801c122b2 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java
@@ -179,7 +179,7 @@ public class ImportedFieldsResolverTestCase {
private static ImportedFields resolve(Search search) {
assertNotNull(search.temporaryImportedFields().get());
assertFalse(search.importedFields().isPresent());
- new ImportedFieldsResolver(search, null, null, null).process();
+ new ImportedFieldsResolver(search, null, null, null).process(true);
assertFalse(search.temporaryImportedFields().isPresent());
assertNotNull(search.importedFields().get());
return search.importedFields().get();
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingScriptRewriterTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingScriptRewriterTestCase.java
index 983f3b504b8..c1001bd328b 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingScriptRewriterTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingScriptRewriterTestCase.java
@@ -26,7 +26,7 @@ import static com.yahoo.searchdefinition.processing.AssertIndexingScript.assertI
import static org.junit.Assert.assertEquals;
/**
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
public class IndexingScriptRewriterTestCase extends SearchDefinitionTestCase {
@@ -155,7 +155,7 @@ public class IndexingScriptRewriterTestCase extends SearchDefinitionTestCase {
sdoc.addField(unprocessedField);
Search search = new Search("test", null);
search.addDocument(sdoc);
- Processing.process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles());
+ Processing.process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(), true);
return unprocessedField.getIndexingScript();
}
@@ -193,4 +193,5 @@ public class IndexingScriptRewriterTestCase extends SearchDefinitionTestCase {
summaryField.addSource(field.getName());
return summaryField;
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java
index df4c1a52c35..1e0270f293d 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IntegerIndex2AttributeTestCase.java
@@ -23,7 +23,7 @@ public class IntegerIndex2AttributeTestCase extends SearchDefinitionTestCase {
public void testIntegerIndex2Attribute() throws IOException, ParseException {
Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/integerindex2attribute.sd");
search.process();
- new IntegerIndex2Attribute(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process();
+ new IntegerIndex2Attribute(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true);
SDField f;
f = search.getConcreteField("s1");
@@ -55,4 +55,5 @@ public class IntegerIndex2AttributeTestCase extends SearchDefinitionTestCase {
assertEquals(f.getAttributes().size(), 1);
assertTrue( ! f.existsIndex("ai2"));
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidatorTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidatorTestCase.java
index f70cf386fe2..61baee6da26 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidatorTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeValidatorTestCase.java
@@ -23,7 +23,6 @@ import static org.junit.Assert.fail;
*/
public class RankingExpressionTypeValidatorTestCase {
- @Ignore
@Test
public void tensorFirstPhaseMustProduceDouble() throws Exception {
try {
@@ -51,7 +50,6 @@ public class RankingExpressionTypeValidatorTestCase {
}
}
- @Ignore
@Test
public void tensorSecondPhaseMustProduceDouble() throws Exception {
try {
@@ -82,7 +80,6 @@ public class RankingExpressionTypeValidatorTestCase {
}
}
- @Ignore
@Test
public void tensorConditionsMustHaveTypeCompatibleBranches() throws Exception {
try {
@@ -113,7 +110,6 @@ public class RankingExpressionTypeValidatorTestCase {
}
}
- @Ignore
@Test
public void testMacroInvocationTypes() throws Exception {
RankProfileRegistry rankProfileRegistry = new RankProfileRegistry();
@@ -148,7 +144,6 @@ public class RankingExpressionTypeValidatorTestCase {
summaryFeatures(profile).get("macro1(b)").type(profile.typeContext(builder.getQueryProfileRegistry())));
}
- @Ignore
@Test
public void testTensorMacroInvocationTypes_Nested() throws Exception {
SearchBuilder builder = new SearchBuilder();
@@ -191,7 +186,6 @@ public class RankingExpressionTypeValidatorTestCase {
summaryFeatures(profile).get("return_b").type(profile.typeContext(builder.getQueryProfileRegistry())));
}
- @Ignore
@Test
public void importedFieldsAreAvailable() throws Exception {
SearchBuilder builder = new SearchBuilder();
@@ -222,7 +216,6 @@ public class RankingExpressionTypeValidatorTestCase {
builder.build();
}
- @Ignore
@Test
public void undeclaredQueryFeaturesAreAccepted() throws Exception {
SearchBuilder builder = new SearchBuilder();
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReservedMacroNamesTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReservedMacroNamesTestCase.java
index 6f13ca76fc2..8a07e99101c 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReservedMacroNamesTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReservedMacroNamesTestCase.java
@@ -51,7 +51,7 @@ public class ReservedMacroNamesTestCase {
" }\n" +
" }\n" +
"}\n");
- builder.build(deployLogger);
+ builder.build(true, deployLogger);
assertTrue(deployLogger.log.contains("sigmoid") && deployLogger.log.contains("test_rank_profile"));
assertTrue(deployLogger.log.contains("sigmoid") && deployLogger.log.contains("test_rank_profile_2"));
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java
index ba307b6029a..85bee61c1b4 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSourceTestCase.java
@@ -14,12 +14,13 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class SummaryFieldsMustHaveValidSourceTestCase extends SearchDefinitionTestCase {
+
@Test
public void requireThatInvalidSourceIsCaught() throws IOException, ParseException {
Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/invalidsummarysource.sd");
search.process();
try {
- new SummaryFieldsMustHaveValidSource(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process();
+ new SummaryFieldsMustHaveValidSource(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true);
assertTrue("This should throw and never get here", false);
} catch (IllegalArgumentException e) {
assertEquals("For search 'invalidsummarysource', summary class 'baz', summary field 'cox': there is no valid source 'nonexistingfield'.", e.getMessage());
@@ -30,7 +31,7 @@ public class SummaryFieldsMustHaveValidSourceTestCase extends SearchDefinitionTe
Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/invalidimplicitsummarysource.sd");
search.process();
try {
- new SummaryFieldsMustHaveValidSource(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process();
+ new SummaryFieldsMustHaveValidSource(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true);
assertTrue("This should throw and never get here", false);
} catch (IllegalArgumentException e) {
assertEquals("For search 'invalidsummarysource', summary class 'baz', summary field 'cox': there is no valid source 'cox'.", e.getMessage());
@@ -41,7 +42,7 @@ public class SummaryFieldsMustHaveValidSourceTestCase extends SearchDefinitionTe
Search search = UnprocessingSearchBuilder.buildUnprocessedFromFile("src/test/examples/invalidselfreferringsummary.sd");
search.process();
try {
- new SummaryFieldsMustHaveValidSource(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process();
+ new SummaryFieldsMustHaveValidSource(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles()).process(true);
assertTrue("This should throw and never get here", false);
} catch (IllegalArgumentException e) {
assertEquals("For search 'invalidselfreferringsummary', summary class 'withid', summary field 'w': there is no valid source 'w'.", e.getMessage());
@@ -53,7 +54,7 @@ public class SummaryFieldsMustHaveValidSourceTestCase extends SearchDefinitionTe
search.process();
BaseDeployLogger deployLogger = new BaseDeployLogger();
RankProfileRegistry rankProfileRegistry = new RankProfileRegistry();
- new SummaryFieldsMustHaveValidSource(search, deployLogger, rankProfileRegistry, new QueryProfiles()).process();
+ new SummaryFieldsMustHaveValidSource(search, deployLogger, rankProfileRegistry, new QueryProfiles()).process(true);
assertEquals("documentid", search.getSummary("withid").getSummaryField("w").getSingleSource());
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java
index 098594dd06e..2b2d72dcf34 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorTransformTestCase.java
@@ -197,7 +197,7 @@ public class TensorTransformTestCase extends SearchDefinitionTestCase {
" }\n" +
" }\n" +
"}\n");
- builder.build(new BaseDeployLogger());
+ builder.build(true, new BaseDeployLogger());
Search s = builder.getSearch();
RankProfile test = rankProfileRegistry.getRankProfile(s, "test").compile(queryProfiles);
List<Pair<String, String>> testRankProperties = new RawRankProfile(test,
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ValidateFieldTypesTest.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ValidateFieldTypesTest.java
index 7cb7ee70d35..ab3bb113727 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ValidateFieldTypesTest.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ValidateFieldTypesTest.java
@@ -40,7 +40,7 @@ public class ValidateFieldTypesTest {
exceptionRule.expectMessage(
"For search '" + DOCUMENT_NAME + "', field '" + IMPORTED_FIELD_NAME + "': Incompatible types. " +
"Expected int for summary field '" + IMPORTED_FIELD_NAME + "', got string.");
- validator.process();
+ validator.process(true);
}
private static Search createSearchWithDocument(String documentName) {
@@ -63,4 +63,5 @@ public class ValidateFieldTypesTest {
summary.add(new SummaryField(fieldName, dataType));
return summary;
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/documentmodel/DocumentModelBuilderTestCase.java b/config-model/src/test/java/com/yahoo/vespa/documentmodel/DocumentModelBuilderTestCase.java
index 9634948bd7a..f5034d0530b 100644
--- a/config-model/src/test/java/com/yahoo/vespa/documentmodel/DocumentModelBuilderTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/documentmodel/DocumentModelBuilderTestCase.java
@@ -14,6 +14,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class DocumentModelBuilderTestCase extends SearchDefinitionTestCase {
+
@Test
public void testDocumentManagerSimple() throws IOException, ParseException {
DocumentModel model = createAndTestModel("src/test/configmodel/types/types.sd");
@@ -63,4 +64,5 @@ public class DocumentModelBuilderTestCase extends SearchDefinitionTestCase {
assertNotNull(model.getDocumentManager().getDocumentType("types"));
return model;
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
index 62638b7c08e..8cfd532af84 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
@@ -149,7 +149,7 @@ public class AdminTestCase {
zone(new Zone(Environment.dev, RegionName.from("baz"))).
applicationId(new ApplicationId.Builder().
tenant("quux").
- applicationName("foo").instanceName("bim").build()).build()).build();
+ applicationName("foo").instanceName("bim").build()).build()).build(true);
TestRoot root = new TestDriver().buildModel(state);
String localhost = HostName.getLocalhost();
SentinelConfig config = root.getConfig(SentinelConfig.class, "hosts/" + localhost);
@@ -310,7 +310,7 @@ public class AdminTestCase {
zone(new Zone(Environment.dev, RegionName.from("baz"))).
applicationId(new ApplicationId.Builder().
tenant("quux").
- applicationName("foo").instanceName("bim").build()).build()).build();
+ applicationName("foo").instanceName("bim").build()).build()).build(true);
TestRoot root = new TestDriver().buildModel(state);
String localhost = HostName.getLocalhost();
SentinelConfig sentinelConfig = root.getConfig(SentinelConfig.class, "hosts/" + localhost);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
index c3ff1a5076b..dbff72b4125 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
@@ -25,7 +25,7 @@ import static com.yahoo.vespa.model.admin.monitoring.DefaultMetricsConsumer.VESP
import static org.junit.Assert.*;
/**
- * @author lulf
+ * @author Ulf Lilleengen
* @author bratseth
*/
public class DedicatedAdminV4Test {
@@ -204,7 +204,7 @@ public class DedicatedAdminV4Test {
return new VespaModel(new NullConfigModelRegistry(),
new DeployState.Builder().applicationPackage(app).modelHostProvisioner(
new InMemoryProvisioner(Hosts.readFrom(app.getHosts()), true))
- .build());
+ .build(true));
}
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/DeploymentFileValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/DeploymentFileValidatorTest.java
index 58b2c09fc74..9f8ff485d72 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/DeploymentFileValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/DeploymentFileValidatorTest.java
@@ -56,7 +56,7 @@ public class DeploymentFileValidatorTest {
.build();
DeployState.Builder builder = new DeployState.Builder().applicationPackage(app);
try {
- final DeployState deployState = builder.build();
+ final DeployState deployState = builder.build(true);
VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState);
new DeploymentFileValidator().validate(model, deployState);
fail("Did not get expected exception");
@@ -64,4 +64,5 @@ public class DeploymentFileValidatorTest {
assertThat(e.getMessage(), containsString("specified in deployment.xml does not match any container cluster id"));
}
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
index d9c151480fe..2dbd15b600b 100755
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
@@ -78,7 +78,7 @@ public class ContainerClusterTest {
public void requreThatWeCanGetTheZoneConfig() {
DeployState state = new DeployState.Builder().properties(new DeployProperties.Builder().hostedVespa(true).build())
.zone(new Zone(SystemName.cd, Environment.test, RegionName.from("some-region")))
- .build();
+ .build(true);
MockRoot root = new MockRoot("foo", state);
ContainerCluster cluster = new ContainerCluster(root, "container0", "container1");
ConfigserverConfig.Builder builder = new ConfigserverConfig.Builder();
@@ -107,7 +107,7 @@ public class ContainerClusterTest {
}
private ContainerCluster createContainerCluster(boolean isHosted, boolean isCombinedCluster,
Optional<Integer> memoryPercentage, Optional<ContainerClusterVerifier> extraComponents) {
- DeployState state = new DeployState.Builder().properties(new DeployProperties.Builder().hostedVespa(isHosted).build()).build();
+ DeployState state = new DeployState.Builder().properties(new DeployProperties.Builder().hostedVespa(isHosted).build()).build(true);
MockRoot root = new MockRoot("foo", state);
ContainerCluster cluster = extraComponents.isPresent()
@@ -255,7 +255,7 @@ public class ContainerClusterTest {
@Test
public void requireThatRoutingProviderIsDisabledForNonHosted() {
- DeployState state = new DeployState.Builder().properties(new DeployProperties.Builder().hostedVespa(false).build()).build();
+ DeployState state = new DeployState.Builder().properties(new DeployProperties.Builder().hostedVespa(false).build()).build(true);
MockRoot root = new MockRoot("foo", state);
ContainerCluster cluster = new ContainerCluster(root, "container0", "container1");
RoutingProviderConfig.Builder builder = new RoutingProviderConfig.Builder();
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/ConfigserverClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/ConfigserverClusterTest.java
index cf490ff73ef..0c91b8d4a16 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/ConfigserverClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/ConfigserverClusterTest.java
@@ -21,8 +21,7 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
/**
- * @author lulf
- * @since 5.17
+ * @author Ulf Lilleengen
*/
public class ConfigserverClusterTest {
@@ -39,7 +38,7 @@ public class ConfigserverClusterTest {
new ConfigServerContainerModelBuilder(new TestOptions().rpcPort(12345).useVespaVersionInRequest(true)
.hostedVespa(true).environment("test").region("bar")
.numParallelTenantLoaders(99))
- .build(new DeployState.Builder().build(), null, root, XML.getDocument(services).getDocumentElement());
+ .build(new DeployState.Builder().build(true), null, root, XML.getDocument(services).getDocumentElement());
root.freezeModelTopology();
}
@@ -79,4 +78,5 @@ public class ConfigserverClusterTest {
assertThat(config.environment(), is("test"));
assertThat(config.region(), is("bar"));
}
+
}
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 5e093bdb32a..d1eefb51641 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
@@ -115,7 +115,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
.properties(new DeployProperties.Builder()
.hostedVespa(true)
.build())
- .build());
+ .build(true));
assertFalse(logger.msgs.isEmpty());
assertThat(logger.msgs.get(0).getSecond(), containsString(String.format("You cannot set port to anything else than %d", Container.BASEPORT)));
}
@@ -511,7 +511,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
" </nodes>",
"</jdisc>");
- DeployState deployState = new DeployState.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east-1"))).build();
+ DeployState deployState = new DeployState.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east-1"))).build(true);
createModel(root, deployState, clusterElem);
assertEquals(0, getContainerCluster("default").serviceAliases().size());
assertEquals(0, getContainerCluster("default").endpointAliases().size());
@@ -531,7 +531,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
.multitenant(true)
.hostedVespa(true)
.build())
- .build());
+ .build(true));
assertEquals(1, model.getHostSystem().getHosts().size());
}
@@ -564,7 +564,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
.properties(new DeployProperties.Builder()
.hostedVespa(true)
.build())
- .build());
+ .build(true));
AbstractConfigProducerRoot modelRoot = model.getRoot();
VipStatusConfig vipStatusConfig = modelRoot.getConfig(VipStatusConfig.class, "jdisc/component/status.html-status-handler");
@@ -592,7 +592,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
VespaModel model = new VespaModel(new NullConfigModelRegistry(), new DeployState.Builder()
.applicationPackage(applicationPackage)
.properties(new DeployProperties.Builder().build())
- .build());
+ .build(true));
String hostname = HostName.getLocalhost(); // Using the same way of getting hostname as filedistribution model
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/RoutingBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/RoutingBuilderTest.java
index a2f32694340..8ba6aacdc41 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/RoutingBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/RoutingBuilderTest.java
@@ -67,7 +67,7 @@ public class RoutingBuilderTest extends ContainerModelBuilderTestBase {
DeployState deployState = new DeployState.Builder()
.applicationPackage(applicationPackage)
.zone(new Zone(Environment.prod, RegionName.from(region)))
- .build();
+ .build(true);
root = new MockRoot("root", deployState);
createModel(root, deployState, clusterElem);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageNodeTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageNodeTest.java
index 9f357dc1367..2245f2e7ed9 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageNodeTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageNodeTest.java
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertEquals;
* @author hakonhall
*/
public class StorageNodeTest {
+
private StorDevicesConfig getConfig(boolean useVdsEngine) {
String vdsConfig = useVdsEngine ? " <engine>" +
" <vds/>" +
@@ -53,21 +54,22 @@ public class StorageNodeTest {
.applicationPackage(appPkg)
.modelHostProvisioner(provisioner)
.properties(properties)
- .build();
+ .build(true);
VespaModel model = modelCreator.create(true, deployState);
return model.getConfig(StorDevicesConfig.class, "zoo/storage/0");
}
@Test
- public void verifyDiskPathConfigIsSetForVds() throws Exception {
+ public void verifyDiskPathConfigIsSetForVds() {
StorDevicesConfig config = getConfig(true);
assertEquals(1, config.disk_path().size());
assertEquals(Defaults.getDefaults().underVespaHome("var/db/vespa/vds/zoo/storage/0/disks/d0"), config.disk_path(0));
}
@Test
- public void verifyDiskPathConfigIsNotSetForNonHosted() throws Exception {
+ public void verifyDiskPathConfigIsNotSetForNonHosted() {
StorDevicesConfig config = getConfig(false);
assertEquals(0, config.disk_path().size());
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java b/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java
index 7acc1fb3069..15acdf0737b 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java
@@ -41,8 +41,8 @@ public class ContentClusterUtils {
ApplicationPackage applicationPackage = new MockApplicationPackage.Builder().withSearchDefinitions(searchDefinitions).build();
deployStateBuilder.applicationPackage(applicationPackage)
.modelHostProvisioner(provisioner)
- .build();
- return new MockRoot("", deployStateBuilder.build());
+ .build(true);
+ return new MockRoot("", deployStateBuilder.build(true));
}
public static MockRoot createMockRoot(String[] hosts, List<String> searchDefinitions) {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java
index 57bcbeda942..ce72e784125 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java
@@ -246,14 +246,14 @@ public class VespaModelTestCase {
.withHosts(simpleHosts)
.withServices(services)
.build();
- DeployState deployState = builder.deployLogger(logger).applicationPackage(app).build();
+ DeployState deployState = builder.deployLogger(logger).applicationPackage(app).build(true);
VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState);
Validation.validate(model, true, deployState);
assertFalse(logger.msgs.isEmpty());
}
@Test
- public void testNoAdmin() throws IOException, SAXException {
+ public void testNoAdmin() {
VespaModel model = CommonVespaModelSetup.createVespaModelWithMusic(
simpleHosts,
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
@@ -283,7 +283,7 @@ public class VespaModelTestCase {
.configServerSpecs(Arrays.asList(new Configserver.Spec("cfghost", 1234, 1235, 1236)))
.multitenant(true)
.build())
- .build();
+ .build(true);
VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState);
AllocatedHosts info = model.allocatedHosts();
assertEquals("Admin version 3 is ignored, and there are no other hosts to borrow for admin services", 0, info.getHosts().size());
@@ -302,9 +302,9 @@ public class VespaModelTestCase {
public void testPermanentServices() throws IOException, SAXException {
ApplicationPackage app = MockApplicationPackage.createEmpty();
DeployState.Builder builder = new DeployState.Builder().applicationPackage(app);
- VespaModel model = new VespaModel(new NullConfigModelRegistry(), builder.build());
+ VespaModel model = new VespaModel(new NullConfigModelRegistry(), builder.build(true));
assertThat(model.getContainerClusters().size(), is(0));
- model = new VespaModel(new NullConfigModelRegistry(), builder.permanentApplicationPackage(Optional.of(FilesApplicationPackage.fromFile(new File(TESTDIR, "app_permanent")))).build());
+ model = new VespaModel(new NullConfigModelRegistry(), builder.permanentApplicationPackage(Optional.of(FilesApplicationPackage.fromFile(new File(TESTDIR, "app_permanent")))).build(true));
assertThat(model.getContainerClusters().size(), is(1));
}
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 b88ba0276c4..37ddf458121 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
@@ -111,7 +111,7 @@ public class VespaModelTester {
DeployState deployState = new DeployState.Builder()
.applicationPackage(appPkg)
.modelHostProvisioner(provisioner)
- .properties((new DeployProperties.Builder()).hostedVespa(hosted).build()).build();
+ .properties((new DeployProperties.Builder()).hostedVespa(hosted).build()).build(true);
return modelCreatorWithMockPkg.create(false, deployState, configModelRegistry);
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java b/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java
index c89d3098c4d..18fbf68497f 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java
@@ -56,7 +56,7 @@ public class VespaModelCreatorWithFilePkg {
if (validateApplicationWithSchema) {
validate();
}
- DeployState deployState = new DeployState.Builder().applicationPackage(applicationPkg).build();
+ DeployState deployState = new DeployState.Builder().applicationPackage(applicationPkg).build(true);
VespaModel model = new VespaModel(configModelRegistry, deployState);
// Validate, but without checking configSources or routing (routing
// is constructed in a special way and cannot always be validated in
@@ -67,4 +67,5 @@ public class VespaModelCreatorWithFilePkg {
throw e instanceof RuntimeException ? (RuntimeException) e : new RuntimeException(e);
}
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithMockPkg.java b/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithMockPkg.java
index 8bb500906f3..211589c100d 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithMockPkg.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithMockPkg.java
@@ -38,12 +38,12 @@ public class VespaModelCreatorWithMockPkg {
}
public VespaModel create() {
- DeployState deployState = new DeployState.Builder().applicationPackage(appPkg).build();
+ DeployState deployState = new DeployState.Builder().applicationPackage(appPkg).build(true);
return create(true, deployState);
}
public VespaModel create(DeployState.Builder deployStateBuilder) {
- return create(true, deployStateBuilder.applicationPackage(appPkg).build());
+ return create(true, deployStateBuilder.applicationPackage(appPkg).build(true));
}
public VespaModel create(boolean validate, DeployState deployState) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
index ac23861bd86..95cfd17139d 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
@@ -236,7 +236,7 @@ public class DeployTester {
try {
Instant now = LocalDate.parse("2000-01-01", DateTimeFormatter.ISO_DATE).atStartOfDay().atZone(ZoneOffset.UTC).toInstant();
ApplicationPackage application = new MockApplicationPackage.Builder().withEmptyHosts().withEmptyServices().build();
- DeployState deployState = new DeployState.Builder().applicationPackage(application).now(now).build();
+ DeployState deployState = new DeployState.Builder().applicationPackage(application).now(now).build(true);
return new VespaModel(deployState);
} catch (Exception e) {
throw new RuntimeException(e);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java
index df8ed405fe3..3c6bfb33e56 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java
@@ -196,7 +196,7 @@ public class LbServicesProducerTest {
}
private Model createVespaModel(ApplicationPackage applicationPackage, DeployState.Builder deployStateBuilder) throws IOException, SAXException {
- return new VespaModel(new NullConfigModelRegistry(), deployStateBuilder.applicationPackage(applicationPackage).build());
+ return new VespaModel(new NullConfigModelRegistry(), deployStateBuilder.applicationPackage(applicationPackage).build(true));
}
private void assertConfig(LbServicesConfig expected, LbServicesConfig actual) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java
index 25030332664..031cd859a7b 100755
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java
@@ -102,6 +102,6 @@ public class RoutingProducerTest {
}
private Model createVespaModel(ApplicationPackage applicationPackage, DeployState.Builder deployStateBuilder) throws IOException, SAXException {
- return new VespaModel(new NullConfigModelRegistry(), deployStateBuilder.applicationPackage(applicationPackage).build());
+ return new VespaModel(new NullConfigModelRegistry(), deployStateBuilder.applicationPackage(applicationPackage).build(true));
}
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java
index badcdf53b77..07ba1925bf6 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/provision/StaticProvisionerTest.java
@@ -54,7 +54,7 @@ public class StaticProvisionerTest {
.multitenant(true)
.hostedVespa(true)
.build())
- .build();
+ .build(true);
return new VespaModel(new NullConfigModelRegistry(), deployState);
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java
index 9598a9262f0..39fe27e5adb 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/RemoteSessionTest.java
@@ -280,7 +280,7 @@ public class RemoteSessionTest {
public Model loadModel() {
try {
ApplicationPackage application = new MockApplicationPackage.Builder().withEmptyHosts().withEmptyServices().withValidationOverrides(validationOverrides).build();
- DeployState deployState = new DeployState.Builder().applicationPackage(application).now(clock.instant()).build();
+ DeployState deployState = new DeployState.Builder().applicationPackage(application).now(clock.instant()).build(true);
return new VespaModel(deployState);
} catch (Exception e) {
throw new RuntimeException(e);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
index 07430a66c89..56ef3f340e2 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
@@ -46,7 +46,7 @@ public class ZKApplicationPackageTest extends TestWithCurator {
assertTrue(Pattern.compile(".*<slobroks>.*",Pattern.MULTILINE+Pattern.DOTALL).matcher(IOUtils.readAll(zkApp.getServices())).matches());
assertTrue(Pattern.compile(".*<alias>.*",Pattern.MULTILINE+Pattern.DOTALL).matcher(IOUtils.readAll(zkApp.getHosts())).matches());
assertTrue(Pattern.compile(".*<slobroks>.*",Pattern.MULTILINE+Pattern.DOTALL).matcher(IOUtils.readAll(zkApp.getFile(Path.fromString("services.xml")).createReader())).matches());
- DeployState deployState = new DeployState.Builder().applicationPackage(zkApp).build();
+ DeployState deployState = new DeployState.Builder().applicationPackage(zkApp).build(true);
assertEquals(deployState.getSearchDefinitions().size(), 5);
assertEquals(zkApp.searchDefinitionContents().size(), 5);
assertEquals(IOUtils.readAll(zkApp.getRankingExpression("foo.expression")), "foo()+1\n");
diff --git a/container-core/src/test/java/com/yahoo/container/jdisc/LoggingTestCase.java b/container-core/src/test/java/com/yahoo/container/jdisc/LoggingTestCase.java
index a63177ec3cb..507ef6952b6 100644
--- a/container-core/src/test/java/com/yahoo/container/jdisc/LoggingTestCase.java
+++ b/container-core/src/test/java/com/yahoo/container/jdisc/LoggingTestCase.java
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertNull;
/**
* Check error logging from ContentChannelOutputStream is sane.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
*/
public class LoggingTestCase {
diff --git a/container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java b/container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java
index 5e847e91a78..4be8d571b0f 100644
--- a/container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java
@@ -20,7 +20,7 @@ import java.util.concurrent.*;
/**
* Implements clustering (failover and load balancing) over a set of client
- * connections to a homogenous cluster of nodes. Searchers which wants to make
+ * connections to a homogenuos cluster of nodes. Searchers which wants to make
* clustered connections to some service should use this.
* <p>
* This replaces the usual searcher methods by ones which have the same contract
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java
index b60eed945f5..98beac5f02f 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java
@@ -11,7 +11,7 @@ import java.util.List;
import java.util.Map;
/**
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
@SuppressWarnings({ "UnusedDeclaration" })
public abstract class ExpressionConverter implements Cloneable {
@@ -133,4 +133,5 @@ public abstract class ExpressionConverter implements Cloneable {
protected abstract boolean shouldConvert(Expression exp);
protected abstract Expression doConvert(Expression exp);
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionVisitor.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionVisitor.java
index 1f11cc9a5f0..4d8df5835a1 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionVisitor.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionVisitor.java
@@ -4,7 +4,7 @@ package com.yahoo.vespa.indexinglanguage;
import com.yahoo.vespa.indexinglanguage.expressions.Expression;
/**
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
public abstract class ExpressionVisitor {
@@ -28,5 +28,7 @@ public abstract class ExpressionVisitor {
protected Expression doConvert(Expression exp) {
throw new AssertionError();
}
+
}
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java
index e278ba54878..812cd847bca 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ValueTransformProvider.java
@@ -6,7 +6,8 @@ import com.yahoo.vespa.indexinglanguage.expressions.StatementExpression;
/**
* Inserts a "newTransform()" before expressions that "requiresTransform()"
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ *
+ * @author Simon Thoresen
*/
public abstract class ValueTransformProvider extends ExpressionConverter {
@@ -37,7 +38,7 @@ public abstract class ValueTransformProvider extends ExpressionConverter {
transformed = false;
return false;
}
- if (!requiresTransform(exp)) {
+ if ( ! requiresTransform(exp)) {
return false;
}
if (transformed) {
diff --git a/standalone-container/src/main/scala/com/yahoo/container/standalone/StandaloneContainerApplication.scala b/standalone-container/src/main/scala/com/yahoo/container/standalone/StandaloneContainerApplication.scala
index 3ebea07bfe0..50ad6c73daa 100644
--- a/standalone-container/src/main/scala/com/yahoo/container/standalone/StandaloneContainerApplication.scala
+++ b/standalone-container/src/main/scala/com/yahoo/container/standalone/StandaloneContainerApplication.scala
@@ -164,7 +164,7 @@ object StandaloneContainerApplication {
fileRegistry(fileRegistry).
deployLogger(logger).
configDefinitionRepo(configDefinitionRepo).
- build()
+ build(true)
val root = VespaModel.createIncomplete(deployState)
val vespaRoot = new ApplicationConfigProducerRoot(root,