All Downloads are FREE. Search and download functionalities are using the official Maven repository.

schema.content.rnc Maven / Gradle / Ivy

# Copyright Vespa.ai. 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:integer { minInclusive = "1" maxInclusive = "65534" }
}

MinRedundancy = element min-redundancy {
    xsd:integer { minInclusive = "1" maxInclusive = "65534" }
}

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 }? &
    element groups-allowed-down-ratio { xsd:double { minInclusive = "0" maxInclusive = "1" } }?
}

DispatchTuning = element dispatch {
    element max-hits-per-partition { xsd:nonNegativeInteger }? &
    element dispatch-policy { string "round-robin" | string "adaptive" | string "random" | "best-of-random-2" | "latency-amortized-over-requests" | "latency-amortized-over-time"}? &
    element min-active-docs-coverage { xsd:double }? &
    element top-k-probability { xsd:double }?
}

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 }? &
    Redundancy? &
    MinRedundancy? &
    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" } }?
}

# TODO: Deprecated, remove in Vespa 9
Dispatch = element dispatch {
    element num-dispatch-groups { xsd:nonNegativeInteger }? &
    DispatchGroup*
}

# TODO: Deprecated, remove in Vespa 9
DispatchGroup = element group {
    DispatchNode+
}

# TODO: Deprecated, remove in Vespa 9
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 { maxInclusive = "65534" } } &
    attribute capacity { xsd:double { minExclusive = "0.0" } }? &
    attribute mmap-core-limit { xsd:nonNegativeInteger }? &
    attribute core-on-oom { xsd:boolean }? &
    attribute no-vespamalloc { xsd:NMTOKENS }? &
    attribute vespamalloc { xsd:NMTOKENS }? &
    attribute vespamalloc-debug { xsd:NMTOKENS }? &
    attribute vespamalloc-debug-stacktrace { xsd:NMTOKENS }? &
    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:NMTOKENS }? &
    attribute vespamalloc { xsd:NMTOKENS }? &
    attribute vespamalloc-debug { xsd:NMTOKENS }? &
    attribute vespamalloc-debug-stacktrace { xsd:NMTOKENS }? &
    (
      (
        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 }? &
        attribute group-size { 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:NMTOKENS }? &
    attribute vespamalloc { xsd:NMTOKENS }? &
    attribute vespamalloc-debug { xsd:NMTOKENS }? &
    attribute vespamalloc-debug-stacktrace { xsd:NMTOKENS }? &
    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 {
   # TODO: Deprecated, remove in Vespa 9
   # Use the one under the content tag.
   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 lidspace {
         element max-bloat-factor { xsd:double { minInclusive = "0.0" maxInclusive = "1.0" } }?
      }? &
      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 {
         # resizing is deprecated and will be gone on vespa 9
         element initialdocumentcount { xsd:nonNegativeInteger }? &
         element amortize-count { xsd:nonNegativeInteger }?
      }? &
      element index {
         element io {
            # io.read and io.write is deprecated and will be gone on vespa 9
            element write { TuningIoOptionsLight }? &
            element read { TuningIoOptionsLight }? &
            element search { TuningIoOptionsSearch }?
         }? &
         element warmup { 
            element time { xsd:double { minInclusive = "0.0" } }? &
            element unpack { xsd:boolean }?
         }?
      }? &
      element attribute {
         # attribute element is deprecated and will be gone on vespa 9
         element io {
            element write { TuningIoOptionsLight }?
         }
      }? &
      element summary {
         element io {
            # summary.io.write is deprecated and will be gone on vespa 9
            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" } }? &
               # initialentries is deprecated and will be gone on vespa 9
               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 niceness { 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 }?
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy