aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2022-06-07 09:17:02 +0200
committergjoranv <gv@verizonmedia.com>2022-06-08 11:45:30 +0200
commitf83581a8b30946e88b8c6e2c15c5c7f7d4642b1c (patch)
treec42c553f8e8ce35b4ca922f2f14b8d4301c1892b /config-model
parentc4ee8c6f7fad73483a38692bc2411a1422f7644b (diff)
Install xml schemas for 7.x
XML schemas for 7.x copied from master branch
Diffstat (limited to 'config-model')
-rw-r--r--config-model/CMakeLists.txt5
-rw-r--r--config-model/src/main/resources/schema/version/7.x/.gitignore2
-rw-r--r--config-model/src/main/resources/schema/version/7.x/admin.rnc115
-rw-r--r--config-model/src/main/resources/schema/version/7.x/clients-v2.rnc31
-rw-r--r--config-model/src/main/resources/schema/version/7.x/clients.rnc6
-rw-r--r--config-model/src/main/resources/schema/version/7.x/common.rnc73
-rw-r--r--config-model/src/main/resources/schema/version/7.x/container-include.rnc8
-rw-r--r--config-model/src/main/resources/schema/version/7.x/container.rnc52
-rw-r--r--config-model/src/main/resources/schema/version/7.x/containercluster.rnc283
-rw-r--r--config-model/src/main/resources/schema/version/7.x/content.rnc395
-rw-r--r--config-model/src/main/resources/schema/version/7.x/deployment.rnc144
-rw-r--r--config-model/src/main/resources/schema/version/7.x/docproc-standalone.rnc6
-rw-r--r--config-model/src/main/resources/schema/version/7.x/docproc.rnc99
-rw-r--r--config-model/src/main/resources/schema/version/7.x/federation.rnc75
-rw-r--r--config-model/src/main/resources/schema/version/7.x/genericcluster.rnc22
-rw-r--r--config-model/src/main/resources/schema/version/7.x/genericmodule.rnc8
-rw-r--r--config-model/src/main/resources/schema/version/7.x/hosts.rnc10
-rw-r--r--config-model/src/main/resources/schema/version/7.x/legacygenericmodule.rnc8
-rw-r--r--config-model/src/main/resources/schema/version/7.x/processing.rnc39
-rw-r--r--config-model/src/main/resources/schema/version/7.x/routing-standalone.rnc4
-rw-r--r--config-model/src/main/resources/schema/version/7.x/routing.rnc28
-rw-r--r--config-model/src/main/resources/schema/version/7.x/schemas.xml7
-rw-r--r--config-model/src/main/resources/schema/version/7.x/searchchains-standalone.rnc4
-rw-r--r--config-model/src/main/resources/schema/version/7.x/searchchains.rnc72
-rw-r--r--config-model/src/main/resources/schema/version/7.x/services.rnc28
-rw-r--r--config-model/src/main/resources/schema/version/7.x/validation-overrides.rnc13
26 files changed, 1535 insertions, 2 deletions
diff --git a/config-model/CMakeLists.txt b/config-model/CMakeLists.txt
index 8f59bb77ef2..80776eb99c5 100644
--- a/config-model/CMakeLists.txt
+++ b/config-model/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_install_script(src/main/perl/vespa-deploy bin)
vespa_install_script(src/main/perl/vespa-expand-config.pl bin)
install(DIRECTORY src/main/resources/schema DESTINATION share/vespa PATTERN ".gitignore" EXCLUDE)
-install(DIRECTORY src/main/resources/schema DESTINATION share/vespa/schema/version/7.x PATTERN ".gitignore" EXCLUDE)
-
+install(DIRECTORY src/main/resources/schema DESTINATION share/vespa/schema/version/8.x PATTERN ".gitignore" EXCLUDE)
+# TODO: Remove when Vespa > 8 and no apps are left on 7 in hosted Vespa
+install(DIRECTORY src/main/resources/schema/version/7.x DESTINATION share/vespa/schema/version/7.x PATTERN ".gitignore" EXCLUDE)
diff --git a/config-model/src/main/resources/schema/version/7.x/.gitignore b/config-model/src/main/resources/schema/version/7.x/.gitignore
new file mode 100644
index 00000000000..e8bf39e2289
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/.gitignore
@@ -0,0 +1,2 @@
+*.xsd
+*.rng
diff --git a/config-model/src/main/resources/schema/version/7.x/admin.rnc b/config-model/src/main/resources/schema/version/7.x/admin.rnc
new file mode 100644
index 00000000000..2b9b414374c
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/admin.rnc
@@ -0,0 +1,115 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+Admin = AdminV2 | AdminV3 | AdminV4
+
+AdminV2 =
+ element admin {
+ attribute version { "2.0" } &
+ element adminserver { service.attlist } &
+ GenericConfig* &
+ LogServer? &
+ (ConfigServer | ConfigServers)? &
+ AdminSlobroks? &
+ AdminMonitoring? &
+ Metrics? &
+ ClusterControllers? &
+ LogForwarding?
+ }
+
+AdminV3 =
+ element admin {
+ attribute version { "3.0" } &
+ GenericConfig* &
+ Nodes
+ }
+
+AdminV4 =
+ element admin {
+ attribute version { "4.0" } &
+ AdminV4Slobroks? &
+ AdminV4LogServers? &
+ GenericConfig* &
+ AdminMonitoring? &
+ Metrics? &
+ LogForwarding?
+ }
+
+AdminV4Slobroks =
+ element slobroks {
+ OptionalDedicatedNodes
+ }
+
+AdminV4LogServers =
+ element logservers {
+ OptionalDedicatedNodes
+ }
+
+AdminSlobroks =
+ element slobroks {
+ element slobrok {
+ service.attlist &
+ attribute index { xsd:nonNegativeInteger }?
+ }+
+ }
+
+AdminMonitoring =
+ element monitoring {
+ attribute interval { xsd:int }?,
+ attribute systemname { xsd:string }?
+ }
+
+ConfigServer = element configserver {
+ service.attlist
+}
+
+ConfigServers = element configservers {
+ ConfigServer+
+}
+
+LogServer = element logserver {
+ service.attlist
+}
+
+Metrics = element metrics {
+ element consumer {
+ attribute id { xsd:Name } &
+ element metric-set { attribute id { xsd:Name } }* &
+ element metric {
+ attribute id { xsd:Name } &
+ attribute display-name { xsd:Name }?
+ }* &
+ Cloudwatch?
+ }+
+}
+
+Cloudwatch = element cloudwatch {
+ attribute region { xsd:Name } &
+ attribute namespace { xsd:string { pattern = "[\w_\-/#:\.]+" } } &
+ (
+ element credentials {
+ attribute access-key-name { xsd:Name } &
+ attribute secret-key-name { xsd:Name }
+ }
+ |
+ element shared-credentials {
+ attribute file { string } &
+ attribute profile { xsd:Name }?
+ }
+ )?
+}
+
+ClusterControllers = element cluster-controllers {
+ attribute standalone-zookeeper { xsd:string }? &
+ element cluster-controller {
+ service.attlist
+ }+
+}
+
+LogForwarding = element logforwarding {
+ attribute include-admin { xsd:boolean }? &
+ element splunk {
+ attribute splunk-home { xsd:string }? &
+ attribute deployment-server { xsd:string } &
+ attribute client-name { xsd:string } &
+ attribute phone-home-interval { xsd:positiveInteger }?
+ }
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/clients-v2.rnc b/config-model/src/main/resources/schema/version/7.x/clients-v2.rnc
new file mode 100644
index 00000000000..5a9353321c8
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/clients-v2.rnc
@@ -0,0 +1,31 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+Clients20 =
+ attribute version { "2.0" } &
+ LoadTypes?
+
+LoadTypes = element load-types {
+ element type {
+ attribute name { text } &
+ attribute default-priority { text }?
+ }*
+}
+
+FeederOptions20 = element feederoptions {
+ FeederOptionsOpts20 &
+ DocProcChain?
+}
+
+FeederOptionsOpts20 = element abortondocumenterror { xsd:boolean }? &
+ element retryenabled { text }? &
+ element route { text }? &
+ element maxpendingdocs { xsd:positiveInteger }? &
+ element maxpendingbytes { xsd:positiveInteger }? &
+ element retrydelay { xsd:double { minInclusive = "0.0" } }? &
+ element timeout { xsd:double { minInclusive = "0.0" } }? &
+ element tracelevel { xsd:positiveInteger }? &
+ element mbusport { xsd:positiveInteger }?
+
+
+DocProcChain = element docprocchain {
+ text
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/clients.rnc b/config-model/src/main/resources/schema/version/7.x/clients.rnc
new file mode 100644
index 00000000000..1e1dffc90b9
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/clients.rnc
@@ -0,0 +1,6 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+include "clients-v2.rnc"
+
+Clients = element clients {
+ Clients20
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/common.rnc b/config-model/src/main/resources/schema/version/7.x/common.rnc
new file mode 100644
index 00000000000..275c0f7f702
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/common.rnc
@@ -0,0 +1,73 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+service.attlist &= attribute hostalias { xsd:NCName }
+service.attlist &= attribute baseport { xsd:unsignedShort }?
+service.attlist &= attribute jvmargs { text }?
+service.attlist &= attribute jvm-options { text }?
+service.attlist &= attribute jvm-gc-options { text }?
+# preload is for internal use only
+service.attlist &= attribute preload { text }?
+
+anyElement = element * {
+ (attribute * { text }
+ | text
+ | anyElement)*
+}
+
+# Valid qualified java class name. See http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.8
+JavaId = xsd:string { pattern = "([a-zA-Z_$][a-zA-Z\d_$]*\.)*[a-zA-Z_$][a-zA-Z\d_$]*" }
+
+Nodes = element nodes {
+ attribute count { xsd:positiveInteger | xsd:string } &
+ attribute flavor { xsd:string }? &
+ attribute docker-image { xsd:string }? &
+ Resources?
+}
+
+Resources = element resources {
+ attribute vcpu { xsd:double { minExclusive = "0.0" } | xsd:string } &
+ attribute memory { xsd:string } &
+ attribute disk { xsd:string } &
+ attribute disk-speed { xsd:string }? &
+ attribute storage-type { xsd:string }? &
+ attribute architecture { xsd:string }?
+}
+
+OptionalDedicatedNodes = element nodes {
+ attribute count { xsd:positiveInteger | xsd:string } &
+ attribute flavor { xsd:string }? &
+ attribute required { xsd:boolean }? &
+ attribute docker-image { xsd:string }? &
+ attribute dedicated { xsd:boolean }? &
+ attribute exclusive { xsd:boolean }? &
+ Resources?
+}
+
+GenericConfig = element config {
+ attribute name { text },
+ attribute namespace { text }?, # TODO: Remove in Vespa 8
+ attribute version { text }?,
+ anyElement*
+}
+
+ComponentSpec =
+ ( attribute id { xsd:Name | JavaId } | attribute idref { xsd:Name } | attribute ident { xsd:Name } )
+
+ComponentId =
+ ComponentSpec
+
+BundleSpec =
+ attribute class { xsd:Name | JavaId }? &
+ attribute bundle { xsd:Name }?
+
+Component = element component {
+ ComponentDefinition
+}
+
+ComponentDefinition =
+ ComponentId &
+ BundleSpec &
+ GenericConfig* &
+ Component*
+
+
+
diff --git a/config-model/src/main/resources/schema/version/7.x/container-include.rnc b/config-model/src/main/resources/schema/version/7.x/container-include.rnc
new file mode 100644
index 00000000000..8f6a8a3bada
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/container-include.rnc
@@ -0,0 +1,8 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+include "containercluster.rnc"
+include "common.rnc"
+include "container.rnc"
+include "docproc.rnc"
+include "searchchains.rnc"
+
+start = SearchInContainer | DocprocInContainer | ProcessingInContainer | Components
diff --git a/config-model/src/main/resources/schema/version/7.x/container.rnc b/config-model/src/main/resources/schema/version/7.x/container.rnc
new file mode 100644
index 00000000000..c16a5c4e3a5
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/container.rnc
@@ -0,0 +1,52 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# Schema for common container options
+
+include "processing.rnc"
+
+Handler = element handler {
+ ComponentDefinition &
+ ServerBindings &
+ element clientBinding {text}*
+}
+
+Binding = element binding {text}
+ServerBindings = Binding*
+
+Client = element client {
+ ComponentDefinition &
+ element binding {text}* &
+ element serverBinding {text}*
+}
+
+Server = element server {
+ ComponentDefinition
+}
+
+AccessControl = element access-control {
+ attribute domain { xsd:NCName }? & # TODO Vespa 8 Remove
+ attribute read { string "true" | string "false" }? & # TODO Vespa 8 Remove
+ attribute write { string "true" | string "false" }? & # TODO Vespa 8 Remove
+ attribute tls-handshake-client-auth {string "want" | string "need"}? &
+ element vespa-domain { xsd:NCName }? & # TODO Remove after end of March 2020
+ element exclude {
+ Binding+
+ }?
+}
+
+HttpFilterChain =
+ HttpFilter* &
+ ChainBaseContent &
+ ServerBindings
+
+HttpFilter = element filter {
+ ComponentDefinition &
+ FilterConfig?
+}
+
+FilterConfig = element filter-config {
+ anyElement*
+}
+
+Renderer = element renderer {
+ ComponentDefinition
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/containercluster.rnc b/config-model/src/main/resources/schema/version/7.x/containercluster.rnc
new file mode 100644
index 00000000000..3fdbff84f6d
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/containercluster.rnc
@@ -0,0 +1,283 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+ContainerCluster = element container | jdisc {
+ attribute version { "1.0" } &
+ attribute id { xsd:NCName }? &
+ attribute jetty { xsd:boolean }? &
+ Include* &
+ ContainerServices &
+ DocumentBinding* &
+ Aliases? &
+ NodesOfContainerCluster? &
+ ClientAuthorize?
+}
+
+ContainerServices =
+ SearchInContainer? &
+ DocprocInContainer? &
+ ProcessingInContainer? &
+ ModelEvaluation? &
+ DocumentApi? &
+ Components* &
+ Component* &
+ Embedder* &
+ Handler* &
+ Client* &
+ Server* &
+ Http? &
+ AccessLog* &
+ SecretStore? &
+ ZooKeeper? &
+ GenericConfig*
+
+# TODO(ogronnesby): Change this configuration syntax
+ClientAuthorize = element client-authorize { empty }
+
+Components = element components {
+ Include* &
+ Component*
+}
+
+Aliases = element aliases {
+ element service-alias { xsd:NCName }* &
+ element endpoint-alias { xsd:NCName }*
+}
+
+Include = element \include {
+ attribute dir { text }
+}
+
+Http = element http {
+ (Filtering & HttpServer+) |
+ HttpServer+ |
+ empty
+}
+
+Filtering = element filtering {
+ attribute strict-mode { xsd:boolean }? &
+ HttpFilter* &
+ AccessControl? &
+ element request-chain {
+ HttpFilterChain
+ }* &
+ element response-chain {
+ HttpFilterChain
+ }*
+}
+
+HttpServer = element server {
+ attribute port { xsd:nonNegativeInteger }? &
+ attribute required { xsd:boolean }? &
+ attribute default-request-chain { xsd:string }? &
+ attribute default-response-chain { xsd:string }? &
+ ComponentId &
+ (Ssl | SslProvider)? &
+ GenericConfig*
+}
+
+AccessLog = element accesslog {
+ attribute type { string "yapache" | string "vespa" | string "json" | string "disabled" }? &
+ attribute fileNamePattern { string }? &
+ attribute compressOnRotation { xsd:boolean }? &
+ attribute symlinkName { string }? &
+ attribute compressionType { string "gzip" | string "zstd" }? &
+ attribute queueSize { xsd:nonNegativeInteger }? &
+ attribute bufferSize { xsd:nonNegativeInteger }? &
+ attribute rotationInterval { string }?
+}
+
+SecretStore = element secret-store {
+ attribute type { string "oath-ckms" | string "cloud" } &
+ element group {
+ attribute name { string } &
+ attribute environment { string "alpha" | string "corp" | string "prod" | string "aws" | string "aws_stage" }
+ } * &
+ element store {
+ attribute id { string } &
+ element aws-parameter-store {
+ attribute account { string } &
+ attribute aws-region { string }
+ } *
+ }?
+}
+
+ZooKeeper = element zookeeper {
+ empty
+}
+
+Embedder = element embedder {
+ attribute id { string }? &
+ attribute class { xsd:Name | JavaId }? &
+ attribute bundle { xsd:Name }? &
+ attribute def { xsd:Name }? &
+ anyElement*
+}
+
+ModelEvaluation = element model-evaluation {
+ element onnx {
+ element models {
+ element model {
+ attribute name { string } &
+ element intraop-threads { xsd:nonNegativeInteger }? &
+ element interop-threads { xsd:nonNegativeInteger }? &
+ element execution-mode { string "sequential" | string "parallel" }?
+ }*
+ }?
+ }?
+}
+
+Ssl = element ssl {
+ element private-key-file { string } &
+ element certificate-file { string } &
+ element ca-certificates-file { string }? &
+ element client-authentication { string "disabled" | string "want" | string "need" }? &
+ element cipher-suites { string }? &
+ element protocols { string }?
+}
+
+SslProvider = element ssl-provider {
+ BundleSpec
+}
+
+Threadpool = element threadpool {
+ element max-threads { xsd:nonNegativeInteger } &
+ element min-threads { xsd:nonNegativeInteger } &
+ element queue-size { xsd:nonNegativeInteger }
+}
+
+# SEARCH:
+
+SearchInContainer = element search {
+ Include* &
+ ServerBindings? &
+ Searcher* &
+ SearchChain* &
+ Provider* &
+ Renderer* &
+ GenericConfig* &
+ Threadpool?
+}
+
+SearchChain = element chain {
+ GenericSearchChain
+}
+
+GenericSearchChain =
+ ComponentId &
+ SearchChainInheritance &
+ attribute searchers { text }? &
+ Searcher* &
+ Phase* &
+ GenericConfig*
+
+SearchChainInheritance =
+ attribute inherits { text }? &
+ attribute excludes { text }? &
+ element inherits {
+ element chain { ComponentSpec }* &
+ element exclude { ComponentSpec }*
+ }?
+
+
+# DOCPROC:
+
+DocprocInContainer = element document-processing {
+ Include* &
+ DocprocClusterAttributes? &
+ DocumentProcessorV3* &
+ ChainInDocprocInContainerCluster* &
+ GenericConfig*
+}
+ChainInDocprocInContainerCluster = element chain {
+ DocprocChainV3Contents
+}
+
+
+
+# PROCESSING:
+
+ProcessingInContainer = element processing {
+ Include* &
+ ServerBindings? &
+ Processor* &
+ Chain* &
+ ProcessingRenderer* &
+ GenericConfig*
+}
+
+
+
+# DOCUMENT API:
+
+DocumentApi = element document-api {
+ ServerBindings &
+ GenericConfig* &
+ element abortondocumenterror { xsd:boolean }? &
+ element retryenabled { xsd:boolean }? &
+ element route { text }? &
+ element maxpendingdocs { xsd:positiveInteger }? &
+ element maxpendingbytes { xsd:positiveInteger }? &
+ element retrydelay { xsd:double { minInclusive = "0.0" } }? &
+ element timeout { xsd:double { minInclusive = "0.0" } }? &
+ element tracelevel { xsd:positiveInteger }? &
+ element mbusport { xsd:positiveInteger }? &
+ DocumentRestApi? &
+ HttpClientApi?
+}
+
+DocumentRestApi = element rest-api { empty }
+
+HttpClientApi = element http-client-api {
+ Threadpool?
+}
+
+# NODES:
+
+NodesOfContainerCluster = element nodes {
+ attribute jvmargs { text }? &
+ attribute jvm-options { text }? &
+ attribute jvm-gc-options { text }? &
+ attribute preload { text }? &
+ attribute allocated-memory { text }? &
+ attribute cpu-socket-affinity { xsd:boolean }? &
+ element jvm {
+ attribute options { text }? &
+ attribute gc-options { text }? &
+ attribute allocated-memory { text }?
+ } ? &
+ Resources? &
+ element environment-variables {
+ anyElement +
+ } ? &
+ (
+ (
+ attribute of { xsd:string } &
+ attribute required { xsd:boolean }?
+ )
+ |
+ attribute type { xsd:string }
+ |
+ (
+ attribute count { xsd:positiveInteger | xsd:string } &
+ attribute flavor { xsd:string }? &
+ attribute required { xsd:boolean }? &
+ attribute exclusive { xsd:boolean }? &
+ attribute docker-image { xsd:string }?
+ )
+ |
+ element node {
+ attribute hostalias { xsd:NCName } &
+ attribute cpu-socket { xsd:positiveInteger }? &
+ GenericConfig*
+ }+
+ )
+}
+
+
+
+#DOCUMENT BINDINGS:
+
+DocumentBinding = element document {
+ attribute type { xsd:NCName } &
+ attribute class { xsd:NCName } &
+ attribute bundle { xsd:NCName }
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/content.rnc b/config-model/src/main/resources/schema/version/7.x/content.rnc
new file mode 100644
index 00000000000..8dd5f5c042f
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/content.rnc
@@ -0,0 +1,395 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+include "container.rnc"
+include "searchchains.rnc"
+
+Redundancy = element redundancy {
+ attribute reply-after { xsd:nonNegativeInteger }? &
+ xsd:nonNegativeInteger
+}
+
+DistributionType = element distribution {
+ attribute type { string "strict" | string "loose" | string "legacy" }
+}
+
+BucketSplitting = element bucket-splitting {
+ attribute max-documents { xsd:nonNegativeInteger }? &
+ attribute max-size { xsd:nonNegativeInteger }? &
+ attribute minimum-bits { xsd:nonNegativeInteger }?
+}
+
+MergeTuning = element merges {
+ attribute max-per-node { xsd:nonNegativeInteger }? &
+ attribute max-queue-size { xsd:nonNegativeInteger }? &
+ attribute max-nodes-per-merge { xsd:nonNegativeInteger {
+ minInclusive = "2" maxInclusive = "16" } }?
+}
+
+VisitorMaxConcurrent = element max-concurrent {
+ attribute fixed { xsd:nonNegativeInteger }? &
+ attribute variable { xsd:nonNegativeInteger }?
+}
+
+VisitorTuning = element visitors {
+ attribute thread-count { xsd:nonNegativeInteger }? &
+ attribute max-queue-size { xsd:nonNegativeInteger }? &
+ VisitorMaxConcurrent?
+}
+
+Maintenance = element maintenance {
+ attribute start { xsd:string { pattern = "[0-9]{2}:[0-9]{2}" } },
+ attribute stop { xsd:string { pattern = "[0-9]{2}:[0-9]{2}" } },
+ attribute high { string "monday" | string "tuesday" | string "wednesday" |
+ string "thursday" | string "friday" | string "saturday" |
+ string "sunday" }
+}
+
+PersistenceThread = element thread {
+ ## The lowest priority this thread should handle.
+ attribute lowest-priority { string "HIGHEST" | string "VERY_HIGH" | string "HIGH_1" |
+ string "HIGH_2" | string "HIGH_3" | string "NORMAL_1" | string "NORMAL_2" |
+ string "NORMAL_3" | string "NORMAL_4" | string "NORMAL_5" | string "NORMAL_6" |
+ string "LOW_1" | string "LOW_2" | string "LOW_3" | string "VERY_LOW" }? &
+ ## The number of threads of this type to create
+ attribute count { xsd:integer }?
+}
+
+## Declare which storage threads each disk should have.
+PersistenceThreads = element persistence-threads {
+ ## The number of threads to create
+ attribute count { xsd:integer }? &
+ ## All of the below settings are deprecated.
+ ## Operations with priority worse than this can be blocked
+ attribute highest-priority-to-block { xsd:string } ? &
+ ## Operations with priority better than this can block others
+ attribute lowest-priority-to-block-others { xsd:string } ? &
+ Thread*
+}
+
+MinNodeRatioPerGroup = element min-node-ratio-per-group {
+ xsd:double { minInclusive = "0" maxInclusive = "1" }
+}
+
+ClusterControllerTuning = element cluster-controller {
+ element init-progress-time { xsd:string { pattern = "([0-9\.]+)\s*([a-z]+)?" } }? &
+ element transition-time { xsd:string { pattern = "([0-9\.]+)\s*([a-z]+)?" } }? &
+ element max-premature-crashes { xsd:nonNegativeInteger }? &
+ element stable-state-period { xsd:string { pattern = "([0-9\.]+)\s*([a-z]+)?" } }? &
+ element min-distributor-up-ratio { xsd:double }? &
+ element min-storage-up-ratio { xsd:double }?
+}
+
+DispatchTuning = element dispatch {
+ element max-hits-per-partition { xsd:nonNegativeInteger }? &
+ element dispatch-policy { string "round-robin" | string "adaptive" | string "random" }? &
+ element min-group-coverage { xsd:double }? & # TODO: Ignored, remove on Vespa 8
+ element min-active-docs-coverage { xsd:double }? &
+ element top-k-probability { xsd:double }? &
+ element use-local-node { string "true" | string "false" }? # TODO: Ignored, remove on Vespa 8
+}
+
+ClusterTuning = element tuning {
+ DispatchTuning? &
+ DistributionType? &
+ BucketSplitting? &
+ MergeTuning? &
+ VisitorTuning? &
+ ClusterControllerTuning? &
+ Maintenance? &
+ PersistenceThreads? &
+ MinNodeRatioPerGroup? &
+ ResourceLimits?
+}
+
+Content = element content {
+ attribute version { "1.0" } &
+ attribute id { xsd:NCName }? &
+ attribute distributor-base-port { xsd:unsignedShort }? &
+ # Mandatory
+ Redundancy &
+ ContentSearch? &
+ Dispatch? &
+ ClusterTuning? &
+ # Can be used for caches and feedbatching.
+ GenericConfig* &
+ Engine? &
+ # Here you can add document definitions that you also want to handle.
+ # Search might want to know of them in advance.
+ Documents? &
+ ContentNodes? &
+ TopGroup? &
+ Controllers?
+ # Contains experimental feature switches
+ #Experimental?
+}
+
+Controllers =
+ element controllers {
+ OptionalDedicatedNodes
+ }
+
+ContentSearch = element search {
+ element query-timeout { xsd:double { minInclusive = "0" } }? &
+ element visibility-delay { xsd:double { minInclusive = "0" } }? &
+ SearchCoverage?
+}
+
+SearchCoverage = element coverage {
+ element minimum { xsd:double { minInclusive = "0" maxInclusive = "1" } }? &
+ element min-wait-after-coverage-factor { xsd:double { minInclusive = "0" maxInclusive = "1" } }? &
+ element max-wait-after-coverage-factor { xsd:double { minInclusive = "0" maxInclusive = "1" } }?
+}
+
+Dispatch = element dispatch {
+ element num-dispatch-groups { xsd:nonNegativeInteger }? &
+ DispatchGroup*
+}
+
+DispatchGroup = element group {
+ DispatchNode+
+}
+
+DispatchNode = element node {
+ attribute distribution-key { xsd:nonNegativeInteger }
+}
+
+## Specification of what document processing should be done for indexing.
+DocumentProcessing = element document-processing {
+ attribute cluster { text }? &
+ attribute chain { text }?
+}
+
+## Config for the persistence providers.
+Engine = element engine {
+ (Proton | Dummy)
+}
+
+Proton = element proton {
+ element flush-on-shutdown { xsd:string }? &
+ element sync-transactionlog { xsd:string }? &
+ element visibility-delay { xsd:double { minInclusive = "0.0" } }? &
+ element query-timeout { xsd:double { minInclusive = "0.0" } }? &
+ element searchable-copies { xsd:integer { minInclusive = "0" } }? &
+ ResourceLimits? &
+ Tuning?
+}
+
+ResourceLimits = element resource-limits {
+ element disk { xsd:double { minInclusive = "0.0" maxInclusive = "1.0" } }? &
+ element memory { xsd:double { minInclusive = "0.0" maxInclusive = "1.0" } }?
+}
+
+Dummy = element dummy {
+ text
+}
+
+Documents = element documents {
+ attribute selection { xsd:string }? &
+ attribute garbage-collection { xsd:string }? &
+ attribute garbage-collection-interval { xsd:nonNegativeInteger }? &
+ DocumentProcessing? &
+
+ element document {
+ attribute type { xsd:string } &
+ attribute selection { xsd:string }? &
+ attribute mode { string "index" | string "streaming" | string "store-only" } &
+ attribute global { xsd:boolean }?
+ }+
+}
+
+ContentNode = element node {
+ GenericConfig* &
+ service.attlist &
+ attribute distribution-key { xsd:nonNegativeInteger } &
+ attribute capacity { xsd:double { minExclusive = "0.0" } }? &
+ attribute mmap-core-limit { xsd:nonNegativeInteger }? &
+ attribute core-on-oom { xsd:boolean }? &
+ attribute no-vespamalloc { xsd:string }? &
+ attribute vespamalloc { xsd:string }? &
+ attribute vespamalloc-debug { xsd:string }? &
+ attribute vespamalloc-debug-stacktrace { xsd:string }? &
+ attribute cpu-socket { xsd:nonNegativeInteger }?
+}
+
+ContentNodes = element nodes {
+ Resources? &
+ attribute cpu-socket-affinity { xsd:string }? &
+ attribute mmap-core-limit { xsd:nonNegativeInteger }? &
+ attribute core-on-oom { xsd:boolean }? &
+ attribute no-vespamalloc { xsd:string }? &
+ attribute vespamalloc { xsd:string }? &
+ attribute vespamalloc-debug { xsd:string }? &
+ attribute vespamalloc-debug-stacktrace { xsd:string }? &
+ (
+ (
+ attribute count { xsd:positiveInteger | xsd:string } &
+ attribute flavor { xsd:string }? &
+ attribute required { xsd:boolean }? &
+ attribute exclusive { xsd:boolean }? &
+ attribute docker-image { xsd:string }? &
+ attribute groups { xsd:positiveInteger | xsd:string }?
+ )
+ |
+ ContentNode +
+ )
+}
+
+TopGroup = element group {
+ # Neither name nor distribution key makes any sense for the top group. There has to be
+ # a top group so it never needs referring to, and it's only one group to choose from so
+ # it has no use of a distribution key. Leaving it allowed to set them for now to not
+ # break all system tests and backward compatibility.
+ attribute name { xsd:string }? &
+ attribute cpu-socket-affinity { xsd:string }? &
+ attribute mmap-core-limit { xsd:nonNegativeInteger }? &
+ attribute core-on-oom { xsd:boolean }? &
+ attribute no-vespamalloc { xsd:string }? &
+ attribute vespamalloc { xsd:string }? &
+ attribute vespamalloc-debug { xsd:string }? &
+ attribute vespamalloc-debug-stacktrace { xsd:string }? &
+ attribute distribution-key { xsd:nonNegativeInteger }? &
+ (
+ ContentNode +
+ |
+ (
+ element distribution {
+ attribute partitions { xsd:string }
+ } &
+ Group +
+ )
+ )
+}
+
+Group = element group {
+ attribute distribution-key { xsd:nonNegativeInteger } &
+ attribute name { xsd:string } &
+ (
+ ContentNode +
+ |
+ (
+ element nodes {
+ attribute count { xsd:positiveInteger | xsd:string } &
+ attribute flavor { xsd:string }? &
+ attribute required { xsd:boolean }? &
+ attribute exclusive { xsd:boolean }? &
+ attribute docker-image { xsd:string }? &
+ attribute groups { xsd:positiveInteger | xsd:string }?
+ }
+ )
+ |
+ (
+ element distribution {
+ attribute partitions { xsd:string }
+ } &
+ Group +
+ )
+ )
+}
+
+Tuning = element tuning {
+ element dispatch {
+ element max-hits-per-partition { xsd:nonNegativeInteger }?
+ }? &
+ element searchnode {
+ element requestthreads {
+ element search { xsd:nonNegativeInteger }? &
+ element persearch { xsd:nonNegativeInteger }? &
+ element summary { xsd:nonNegativeInteger }?
+ }? &
+ element flushstrategy {
+ element native {
+ element total {
+ element maxmemorygain { xsd:nonNegativeInteger }? &
+ element diskbloatfactor { xsd:double { minInclusive = "0.0" } }?
+ }? &
+ element component {
+ element maxmemorygain { xsd:nonNegativeInteger }? &
+ element diskbloatfactor { xsd:double { minInclusive = "0.0" } }? &
+ element maxage { xsd:nonNegativeInteger }?
+ }? &
+ element transactionlog {
+ element maxsize { xsd:nonNegativeInteger }?
+ }? &
+ element conservative {
+ element memory-limit-factor { xsd:double { minInclusive = "0.0" maxInclusive = "1.0" } }? &
+ element disk-limit-factor { xsd:double { minInclusive = "0.0" maxInclusive = "1.0" } }?
+ }?
+ }?
+ }? &
+ element resizing {
+ element initialdocumentcount { xsd:nonNegativeInteger }? &
+ element amortize-count { xsd:nonNegativeInteger }?
+ }? &
+ element index {
+ element io {
+ element write { TuningIoOptionsLight }? &
+ element read { TuningIoOptionsLight }? &
+ element search { TuningIoOptionsSearch }?
+ }? &
+ element warmup {
+ element time { xsd:double { minInclusive = "0.0" } }? &
+ element unpack { xsd:boolean }?
+ }?
+ }? &
+ element attribute {
+ element io {
+ element write { TuningIoOptionsLight }?
+ }
+ }? &
+ element summary {
+ element io {
+ element write { TuningIoOptionsLight }? &
+ element read { TuningIoOptionsFull }?
+ }? &
+ element store {
+ element cache {
+ element maxsize { xsd:nonNegativeInteger }? &
+ element maxsize-percent { xsd:double { minInclusive = "0.0" maxInclusive = "50.0" } }? &
+ element initialentries { xsd:nonNegativeInteger }? &
+ TuningCompression?
+ }? &
+ element logstore {
+ element maxfilesize { xsd:nonNegativeInteger }? &
+ element minfilesizefactor { xsd:double { minInclusive = "0.10" maxInclusive = "1.0" } }? &
+ element chunk {
+ element maxsize { xsd:nonNegativeInteger }? &
+ TuningCompression?
+ }?
+ }?
+ }?
+ }? &
+ element initialize {
+ element threads { xsd:nonNegativeInteger }?
+ }? &
+ element feeding {
+ element concurrency { xsd:double { minInclusive = "0.0" maxInclusive = "1.0" } }?
+ }? &
+ element removed-db {
+ element prune {
+ element age { xsd:double { minInclusive = "0.0" } }? &
+ element interval { xsd:double { minInclusive = "60.0" } }?
+ }?
+ }?
+ }?
+}
+
+TuningIoOptionsLight = string "normal" | string "directio"
+TuningIoOptionsFull = string "normal" | string "directio" | string "mmap" | string "populate"
+TuningIoOptionsSearch = string "mmap" | string "populate"
+
+TuningCompression = element compression {
+ element type { string "none" | string "lz4" | string "zstd" }? &
+ element level { xsd:nonNegativeInteger }?
+}
+
+#Experimental = element experimental {
+# Put experimental flags here
+#}
+
+Thread = element thread {
+ ## The lowest priority this thread should handle.
+ attribute lowest-priority { xsd:string}? &
+ ## The number of threads of this type to create
+ attribute count { xsd:integer }?
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/deployment.rnc b/config-model/src/main/resources/schema/version/7.x/deployment.rnc
new file mode 100644
index 00000000000..3abced8e04a
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/deployment.rnc
@@ -0,0 +1,144 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# RELAX NG Compact Syntax
+# Vespa Deployment file
+
+start = element deployment {
+ attribute version { "1.0" } &
+ attribute major-version { text }? &
+ attribute athenz-domain { xsd:string }? &
+ attribute athenz-service { xsd:string }? &
+ attribute cloud-account { xsd:string }? &
+ Step
+}
+
+Step =
+ StepExceptInstance &
+ Instance*
+
+StepExceptInstance =
+ Delay* &
+ ParallelInstances* &
+ Upgrade? &
+ BlockChange* &
+ Notifications? &
+ Endpoints? &
+ Test? &
+ Staging? &
+ Prod*
+
+PrimitiveStep =
+ Delay* &
+ Region* &
+ ProdTest*
+
+Instance = element instance {
+ attribute id { xsd:string } &
+ attribute athenz-service { xsd:string }? &
+ attribute cloud-account { xsd:string }? &
+ StepExceptInstance
+}
+
+ParallelSteps = element parallel {
+ SerialSteps* &
+ PrimitiveStep*
+}
+
+SerialSteps = element steps {
+ ParallelSteps* &
+ PrimitiveStep*
+}
+
+ParallelInstances = element parallel {
+ Instance*
+}
+
+Upgrade = element upgrade {
+ attribute policy { xsd:string }? &
+ attribute revision-target { xsd:string }? &
+ attribute revision-change { xsd:string }? &
+ attribute min-risk { xsd:long }? &
+ attribute max-risk { xsd:long }? &
+ attribute max-idle-hours { xsd:long }? &
+ attribute rollout { xsd:string }?
+}
+
+BlockChange = element block-change {
+ attribute revision { xsd:boolean }? &
+ attribute version { xsd:boolean }? &
+ attribute days { xsd:string }? &
+ attribute hours { xsd:string }? &
+ attribute from-date { xsd:string }? &
+ attribute to-date { xsd:string }? &
+ attribute time-zone { xsd:string }?
+}
+
+Notifications = element notifications {
+ attribute when { xsd:string }? &
+ Email*
+}
+
+Email = element email {
+ attribute address { xsd:string }? &
+ attribute role { xsd:string }? &
+ attribute when { xsd:string }?
+}
+
+Test = element test {
+ attribute athenz-service { xsd:string }? &
+ attribute tester-flavor { xsd:string }? &
+ text
+}
+
+Staging = element staging {
+ attribute athenz-service { xsd:string }? &
+ attribute tester-flavor { xsd:string }? &
+ text
+}
+
+Prod = element prod {
+ attribute global-service-id { text }? &
+ attribute athenz-service { xsd:string }? &
+ attribute tester-flavor { xsd:string }? &
+ Region* &
+ Delay* &
+ ProdTest* &
+ ParallelSteps*
+}
+
+ProdTest = element test {
+ text
+}
+
+Region = element region {
+ attribute active { xsd:boolean }? &
+ attribute athenz-service { xsd:string }? &
+ attribute cloud-account { xsd:string }? &
+ text
+}
+
+Delay = element delay {
+ attribute hours { xsd:long }? &
+ attribute minutes { xsd:long }? &
+ attribute seconds { xsd:long }?
+}
+
+EndpointRegion = element region {
+ text
+}
+
+EndpointInstance = element instance {
+ attribute weight { xsd:long } &
+ text
+}
+
+Endpoint = element endpoint {
+ attribute id { xsd:string }? &
+ attribute container-id { xsd:string } &
+ attribute region { xsd:string }? &
+ EndpointRegion* &
+ EndpointInstance*
+}
+
+Endpoints = element endpoints {
+ Endpoint+
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/docproc-standalone.rnc b/config-model/src/main/resources/schema/version/7.x/docproc-standalone.rnc
new file mode 100644
index 00000000000..caba5327e25
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/docproc-standalone.rnc
@@ -0,0 +1,6 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+include "common.rnc"
+include "container.rnc"
+include "searchchains.rnc"
+include "docproc.rnc"
+start = DocprocChainsV3
diff --git a/config-model/src/main/resources/schema/version/7.x/docproc.rnc b/config-model/src/main/resources/schema/version/7.x/docproc.rnc
new file mode 100644
index 00000000000..1e7e28b2002
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/docproc.rnc
@@ -0,0 +1,99 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+DocProc = element docproc {
+ DocProcV3
+}
+
+SchemaMapping = element map {
+ element field {
+ attribute doctype { text }?,
+ attribute in-document { text },
+ attribute in-processor { text }
+ }+
+}
+
+
+
+
+#Version 3 config:
+
+DocProcV3 = attribute version { "3.0" },
+ (ClusterV3* &
+ OuterDocprocChainsV3? &
+ GenericConfig*
+)
+
+DocprocClusterAttributes = attribute compressdocuments { xsd:boolean }? &
+ attribute numnodesperclient { xsd:positiveInteger }? &
+ attribute preferlocalnode { xsd:boolean }? &
+ attribute maxmessagesinqueue { xsd:nonNegativeInteger }? &
+ attribute maxqueuebytesize { xsd:string { minLength = "1" } }? &
+ attribute maxqueuewait { xsd:positiveInteger }? &
+ attribute maxconcurrentfactor { xsd:double { minExclusive = "0.0" maxExclusive = "1.0" } }? &
+ attribute documentexpansionfactor { xsd:double { minExclusive = "0.0" } }? &
+ attribute containercorememory { xsd:nonNegativeInteger }?
+
+ClusterV3 = element cluster {
+ attribute name { xsd:NCName } &
+ DocprocClusterAttributes? &
+
+ element nodes {
+ Resources? &
+ attribute jvmargs { text }? &
+ attribute preload { text }? &
+ element node {
+ GenericConfig* &
+ service.attlist &
+ attribute maxmessagesinqueue { xsd:nonNegativeInteger }? &
+ attribute maxqueuebytesize { xsd:string { minLength = "1" } }? &
+ attribute maxqueuewait { xsd:positiveInteger }?
+ }+
+ } &
+ GenericConfig* &
+ SchemaMapping? &
+ Component* &
+ Handler* &
+ DocprocChainsV3?
+}
+
+DocprocChainsV3 =
+ element docprocchains {
+ DocumentProcessorV3* &
+ DocprocChainV3* &
+ GenericConfig*
+ }
+
+OuterDocprocChainsV3 =
+ element docprocchains {
+ DocumentProcessorV3* &
+ DocprocChainV3*
+ }
+
+DocprocChainV3 =
+ element docprocchain {
+ DocprocChainV3Contents
+ }
+
+DocprocChainV3Contents = attribute name { xsd:NCName }? &
+ ComponentId &
+ SchemaMapping? &
+ DocprocChainInheritance &
+ attribute documentprocessors { text }? &
+ DocumentProcessorV3* &
+ Phase* &
+ GenericConfig*
+
+
+DocprocChainInheritance =
+ attribute inherits { text }? &
+ attribute excludes { text }? &
+ element inherits {
+ element docprocchain { ComponentSpec }* &
+ element exclude { ComponentSpec }*
+ }?
+
+DocumentProcessorV3 =
+ element documentprocessor {
+ BundleSpec &
+ SchemaMapping? &
+ GenericSearcherOrDocumentProcessor
+ }
diff --git a/config-model/src/main/resources/schema/version/7.x/federation.rnc b/config-model/src/main/resources/schema/version/7.x/federation.rnc
new file mode 100644
index 00000000000..15b57b9dd7b
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/federation.rnc
@@ -0,0 +1,75 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# Schema for federation configuration inside the searchchains section.
+
+GenericSource =
+ GenericSearchChainInQrservers &
+ FederationOptions?
+
+Source =
+ element source {
+ GenericSource
+ }
+
+Provider =
+ element provider {
+ GenericSource &
+ attribute cachesize { xsd:string { pattern = "\d+(\.\d*)?\s*[kmgKMG]?" } }? &
+ attribute type { xsd:string }? &
+ attribute cluster { xsd:string }? &
+
+ # TODO Vespa 8 Remove yca concepts from services.xml syntax
+ attribute yca-application-id { xsd:string }? &
+ attribute yca-cache-ttl { xsd:string { pattern = "\d+(\.\d*)?\s*m?s" } }? &
+ attribute yca-cache-retry-wait { xsd:string { pattern = "\d+(\.\d*)?\s*m?s" } }? &
+ YcaProxy? &
+ HttpProviderSearcherOptions &
+
+ Source*
+ }
+
+YcaProxy =
+ element yca-proxy {
+ GenericNode?
+ }
+
+GenericNode =
+ attribute host { xsd:string } &
+ attribute port { xsd:int }
+
+
+HttpProviderSearcherOptions =
+ attribute cacheweight { xsd:float { minInclusive = "0" } }? &
+ attribute path { xsd:string }? &
+ attribute readtimeout { xsd:string { pattern = "\d+(\.\d*)?\s*m?s" } }? &
+ attribute connectiontimeout { xsd:string { pattern = "\d+(\.\d*)?\s*m?s" } }? &
+ attribute connectionpooltimeout { xsd:string { pattern = "\d+(\.\d*)?\s*m?s" } }? &
+ attribute retries { xsd:int }? &
+ element nodes {
+ element node {
+ attribute host { xsd:string } &
+ attribute port { xsd:int }
+ }+
+ } ?
+
+FederationOptions =
+ element federationoptions {
+ attribute optional { xsd:boolean }? &
+ attribute timeout { xsd:string { pattern = "\d+(\.\d*)?\s*m?s" } }? &
+ attribute requestTimeout { xsd:string { pattern = "\d+(\.\d*)?\s*m?s" } }? &
+ attribute default { xsd:boolean }?
+ }
+
+FederationSearcher =
+ element federation {
+ GenericSearcherOrDocumentProcessor &
+ element source {
+ ComponentSpec &
+ FederationOptions?
+ }* &
+ element target-selector {
+ ComponentDefinition
+ }? &
+ element source-set {
+ attribute inherits { string "default" }
+ }?
+ }
diff --git a/config-model/src/main/resources/schema/version/7.x/genericcluster.rnc b/config-model/src/main/resources/schema/version/7.x/genericcluster.rnc
new file mode 100644
index 00000000000..a749a592c09
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/genericcluster.rnc
@@ -0,0 +1,22 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# Generic, application-specific service cluster
+#
+include "genericmodule.rnc"
+
+GenericCluster = element service {
+ attribute version { "1.0" } &
+ attribute id { xsd:NCName }? &
+ attribute name { text } &
+ attribute command { text } &
+ attribute hostservice { text }? &
+ attribute num-hosts { text }? &
+ GenericConfig* &
+ GenericModule* &
+ element node {
+ service.attlist &
+ attribute name { text }? &
+ GenericModule* &
+ GenericConfig*
+ }*
+}
+
diff --git a/config-model/src/main/resources/schema/version/7.x/genericmodule.rnc b/config-model/src/main/resources/schema/version/7.x/genericmodule.rnc
new file mode 100644
index 00000000000..5f8ac3f7dda
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/genericmodule.rnc
@@ -0,0 +1,8 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# Generic, nestable module
+
+GenericModule = element module {
+ attribute name { text } &
+ GenericConfig* &
+ GenericModule*
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/hosts.rnc b/config-model/src/main/resources/schema/version/7.x/hosts.rnc
new file mode 100644
index 00000000000..d089b23804e
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/hosts.rnc
@@ -0,0 +1,10 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# RELAX NG Compact Syntax
+# Vespa Hosts file
+
+element hosts {
+ element host {
+ attribute name { text },
+ element alias { text }*
+ }+
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/legacygenericmodule.rnc b/config-model/src/main/resources/schema/version/7.x/legacygenericmodule.rnc
new file mode 100644
index 00000000000..a54f7fd9afc
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/legacygenericmodule.rnc
@@ -0,0 +1,8 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# Generic, nestable module
+
+LegacyGenericModule = element module {
+ attribute name { text } &
+ GenericConfig* &
+ LegacyGenericModule*
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/processing.rnc b/config-model/src/main/resources/schema/version/7.x/processing.rnc
new file mode 100644
index 00000000000..a753de70265
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/processing.rnc
@@ -0,0 +1,39 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# Schema for processing components and chains
+
+ProcessingRenderer = element renderer {
+ ComponentDefinition
+}
+
+Processing =
+ element processing {
+ Processor* &
+ Chain* &
+ ProcessingRenderer* &
+ GenericConfig*
+ }
+
+ChainBaseContent =
+ ComponentId &
+ ChainInheritance &
+ GenericConfig*
+
+Chain = element chain {
+ ChainBaseContent &
+ Processor* &
+ Phase*
+ }
+
+ChainInheritance =
+ attribute inherits { text }? &
+ attribute excludes { text }? &
+ element inherits {
+ element chain { ComponentSpec }* &
+ element exclude { ComponentSpec }*
+ }?
+
+Processor =
+ element processor {
+ BundleSpec &
+ GenericSearcherOrDocumentProcessor
+ }
diff --git a/config-model/src/main/resources/schema/version/7.x/routing-standalone.rnc b/config-model/src/main/resources/schema/version/7.x/routing-standalone.rnc
new file mode 100644
index 00000000000..e95369fd192
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/routing-standalone.rnc
@@ -0,0 +1,4 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+include "common.rnc"
+include "routing.rnc"
+start = Routing
diff --git a/config-model/src/main/resources/schema/version/7.x/routing.rnc b/config-model/src/main/resources/schema/version/7.x/routing.rnc
new file mode 100644
index 00000000000..5ca033b2fd7
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/routing.rnc
@@ -0,0 +1,28 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# RELAX NG compact syntax pattern
+# for Vespa MessageBus explicit routing config
+Routing = element routing {
+ attribute version { "1.0" } &
+ element routingtable {
+ attribute protocol { string "document" } &
+ attribute verify { xsd:boolean }? &
+ element hop {
+ attribute name { text } &
+ attribute selector { text } &
+ attribute ignore-result { xsd:boolean }? &
+ element recipient {
+ attribute session { text }
+ }*
+ }* &
+ element route {
+ attribute name { text } &
+ attribute hops { text }
+ }*
+ }* &
+ element services {
+ attribute protocol { string "document" } &
+ element service {
+ attribute name { text }
+ }*
+ }*
+}
diff --git a/config-model/src/main/resources/schema/version/7.x/schemas.xml b/config-model/src/main/resources/schema/version/7.x/schemas.xml
new file mode 100644
index 00000000000..c3f8e2be448
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/schemas.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!-- Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
+<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
+ <documentElement localName="hosts" uri="hosts.rnc"/>
+ <documentElement localName="services" uri="services.rnc"/>
+ <documentElement localName="deployment" uri="deployment.rnc"/>
+</locatingRules>
diff --git a/config-model/src/main/resources/schema/version/7.x/searchchains-standalone.rnc b/config-model/src/main/resources/schema/version/7.x/searchchains-standalone.rnc
new file mode 100644
index 00000000000..6725627143d
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/searchchains-standalone.rnc
@@ -0,0 +1,4 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+include "common.rnc"
+include "searchchains.rnc"
+start = SearchChains
diff --git a/config-model/src/main/resources/schema/version/7.x/searchchains.rnc b/config-model/src/main/resources/schema/version/7.x/searchchains.rnc
new file mode 100644
index 00000000000..d4c9e8f4f98
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/searchchains.rnc
@@ -0,0 +1,72 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#Schema for search chains and searchers inside the searchchains section.
+
+include "federation.rnc"
+
+SearchChains =
+ element searchchains {
+ Searcher* &
+ SearchChainInQrservers* &
+ GenericConfig*
+ }
+
+OuterSearchChains =
+ element searchchains {
+ Searcher* &
+ SearchChainInQrservers*
+ }
+
+SearchChainInQrservers =
+ element searchchain {
+ GenericSearchChainInQrservers
+ } |
+ Provider
+
+GenericSearchChainInQrservers =
+ ComponentId &
+ SearchChainInheritanceInQrservers &
+ attribute searchers { text }? &
+ Searcher* &
+ Phase* &
+ GenericConfig*
+
+SearchChainInheritanceInQrservers =
+ attribute inherits { text }? &
+ attribute excludes { text }? &
+ element inherits {
+ element searchchain { ComponentSpec }* &
+ element exclude { ComponentSpec }*
+ }?
+
+Searcher =
+ RegularSearcher |
+ FederationSearcher
+
+RegularSearcher =
+ element searcher {
+ BundleSpec &
+ GenericSearcherOrDocumentProcessor
+ }
+
+
+GenericSearcherOrDocumentProcessor =
+ ComponentId &
+ SearcherOrDocumentProcessorDependencies &
+ GenericConfig*
+
+SearcherOrDocumentProcessorDependencies =
+ Dependencies &
+ attribute provides { text }? &
+ element provides { xsd:Name }*
+
+Dependencies =
+ attribute before { text }? &
+ attribute after { text }? &
+ element before { xsd:Name }* &
+ element after { xsd:Name }*
+
+Phase =
+ element phase {
+ ComponentId &
+ Dependencies
+ }
diff --git a/config-model/src/main/resources/schema/version/7.x/services.rnc b/config-model/src/main/resources/schema/version/7.x/services.rnc
new file mode 100644
index 00000000000..3a8ffe30563
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/services.rnc
@@ -0,0 +1,28 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+include "common.rnc"
+include "admin.rnc"
+include "clients.rnc"
+include "content.rnc"
+include "docproc.rnc"
+include "routing.rnc"
+include "containercluster.rnc"
+include "genericcluster.rnc"
+
+start = element services {
+ attribute version { "1.0" }? &
+ attribute application-type { "hosted-infrastructure" }? &
+ element legacy { element v7-geo-positions { xsd:boolean } }? &
+ GenericCluster* &
+ GenericConfig* &
+ Admin? &
+ Clients? &
+ Content* &
+ ContainerCluster* &
+ Routing?
+}
+| GenericCluster
+| Admin
+| Clients
+| Content
+| ContainerCluster
+
diff --git a/config-model/src/main/resources/schema/version/7.x/validation-overrides.rnc b/config-model/src/main/resources/schema/version/7.x/validation-overrides.rnc
new file mode 100644
index 00000000000..a0caa10fc60
--- /dev/null
+++ b/config-model/src/main/resources/schema/version/7.x/validation-overrides.rnc
@@ -0,0 +1,13 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+# RELAX NG Compact Syntax
+# Vespa validation overrides
+
+start = element validation-overrides {
+ Allow*
+}
+
+Allow = element allow {
+ attribute until { xsd:string } &
+ attribute comment { xsd:string }? &
+ text
+}