diff options
author | Harald Musum <musum@yahooinc.com> | 2022-06-07 09:17:02 +0200 |
---|---|---|
committer | gjoranv <gv@verizonmedia.com> | 2022-06-08 11:45:30 +0200 |
commit | f83581a8b30946e88b8c6e2c15c5c7f7d4642b1c (patch) | |
tree | c42c553f8e8ce35b4ca922f2f14b8d4301c1892b /config-model | |
parent | c4ee8c6f7fad73483a38692bc2411a1422f7644b (diff) |
Install xml schemas for 7.x
XML schemas for 7.x copied from master branch
Diffstat (limited to 'config-model')
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 +} |