# Copyright (C) 2019-present MongoDB, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the Server Side Public License, version 1,
# as published by MongoDB, Inc.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# Server Side Public License for more details.
#
# You should have received a copy of the Server Side Public License
# along with this program. If not, see
# <http://www.mongodb.com/licensing/server-side-public-license>.
#
# As a special exception, the copyright holders give permission to link the
# code of portions of this program with the OpenSSL library under certain
# conditions as described in each individual source file and distribute
# linked combinations including the program with the OpenSSL library. You
# must comply with the Server Side Public License in all respects for
# all of the code used other than as permitted herein. If you modify file(s)
# with this exception, you may extend this exception to your version of the
# file(s), but you are not obligated to do so. If you do not wish to do so,
# delete this exception statement from your version. If you delete this
# exception statement from all source files in the program, then also delete
# it in the license file.
#

global:
  cpp_namespace: "mongo"

server_parameters:
  # Commit quorum option is supported only for two phase index builds.
  enableIndexBuildCommitQuorum:
    description: "Support for using commit quorum for two phase index builds."
    set_at: startup
    cpp_vartype: bool
    cpp_varname: "enableIndexBuildCommitQuorum"
    default: true
    test_only: true
    redact: false

  maxNumActiveUserIndexBuilds:
    description: >
      Specifies the maximum number of active user index builds that can be built simultaneously on
      the primary node. Index builds initiated by the system are not subject to this limitation.

      Additionally, active index builds initiated by the system count towards the limit and can
      delay scheduling user index builds even when the number of active user index builds is below
      the limit.
    set_at: [ startup, runtime ]
    cpp_vartype: AtomicWord<int>
    cpp_varname: maxNumActiveUserIndexBuilds
    default: 3
    validator:
      gte: 0
    redact: false

  resumableIndexBuildMajorityOpTimeTimeoutMillis:
    description: >
      Time in milliseconds a node waits for the last optime before installing the interceptors to
      be majority committed for a resumable index build. Once the interceptors are installed, the
      index build process will start the collection scan phase.
      If the majority commit point is not reached by the end of this waiting period, the index
      build will proceed as a non-resumable index build.
      Set to 0 to skip the wait. This will also disable resumable index builds.
      Set to a negative value to wait indefinitely for the majority commit point.
    set_at: startup
    cpp_vartype: long long
    cpp_varname: gResumableIndexBuildMajorityOpTimeTimeoutMillis
    default: 10000
    redact: false

  indexBuildMinAvailableDiskSpaceMB:
    description: Minimum disk space required to build an index
    set_at: [ startup, runtime ]
    cpp_vartype: AtomicWord<long long>
    cpp_varname: gIndexBuildMinAvailableDiskSpaceMB
    default: 500
    validator:
      gte: 0
      # This is equal to std::numeric_limits<int64_t>::max() / (1024 * 1024)
      lte: 8796093022207
    redact: false
