Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e537413523 | ||
|
|
dadbb35421 | ||
|
|
aa2faa3625 | ||
|
|
80e15a92ba | ||
|
|
ac459eee58 | ||
|
|
75cb2b8a3e | ||
|
|
c9836d0ea3 | ||
|
|
598bd617db | ||
|
|
ba31e37094 | ||
|
|
6fcc68702d | ||
|
|
5240cf5ed8 |
@@ -19,40 +19,40 @@ not authored by MongoDB, and has a license which requires reproduction,
|
||||
a notice will be included in
|
||||
`THIRD-PARTY-NOTICES`.
|
||||
|
||||
| Name | License | Upstream Version | Vendored Version | Emits persisted data | Distributed in Release Binaries |
|
||||
| ---------------------------| ----------------- | ---------------- | ------------------| :------------------: | :-----------------------------: |
|
||||
| [abseil-cpp] | Apache-2.0 | | 070f6e47b3 | | ✗ |
|
||||
| Aladdin MD5 | Zlib | | Unknown | ✗ | ✗ |
|
||||
| [ASIO] | BSL-1.0 | 1.16.1 | b0926b61b0 | | ✗ |
|
||||
| [benchmark] | Apache-2.0 | 1.5.1 | 1.5.0 | | |
|
||||
| [Boost] | BSL-1.0 | 1.73.0 | 1.70.0 | | ✗ |
|
||||
| [fmt] | BSD-2-Clause | 6.2.1 | 6.1.1 | | ✗ |
|
||||
| [GPerfTools] | BSD-3-Clause | 2.8 | 2.8 | | ✗ |
|
||||
| [ICU4] | ICU | 67.1 | 57.1 | ✗ | ✗ |
|
||||
| [Intel Decimal FP Library] | BSD-3-Clause | 2.0 Update 2 | 2.0 Update 1 | | ✗ |
|
||||
| [JSON-Schema-Test-Suite] | MIT | | 728066f9c5 | | |
|
||||
| [kms-message] | | | 75e391a037 | | ✗ |
|
||||
| [libstemmer] | BSD-3-Clause | | Unknown | ✗ | ✗ |
|
||||
| [linenoise] | BSD-3-Clause | | Unknown + changes | | ✗ |
|
||||
| [MozJS] | MPL-2.0 | ESR 68.9 | ESR 60.3.0 | | ✗ |
|
||||
| [MurmurHash3] | Public Domain | | Unknown + changes | ✗ | ✗ |
|
||||
| [ocspbuilder] | MIT | 0.10.2 | 0.10.2 | | |
|
||||
| [ocspresponder] | Apache-2.0 | 0.5.0 | 0.5.0 | | |
|
||||
| [peglib] | MIT | 0.1.12 | 0.1.12 | | ✗ |
|
||||
| [Pcre] | BSD-3-Clause | 8.44 | 8.42 | | ✗ |
|
||||
| [S2] | Apache-2.0 | | Unknown | ✗ | ✗ |
|
||||
| [SafeInt] | MIT | 3.24 | 3.23 | | |
|
||||
| [scons] | MIT | 3.1.2 | 3.1.2 | | |
|
||||
| [Snappy] | BSD-3-Clause | 1.1.8 | 1.1.7 | ✗ | ✗ |
|
||||
| [timelib] | MIT | 2018.03 | 2018.01 | | ✗ |
|
||||
| [TomCrypt] | Public Domain | 1.18.2 | 1.18.2 | ✗ | ✗ |
|
||||
| [Unicode] | Unicode-DFS-2015 | 13.0.0 | 8.0.0 | ✗ | ✗ |
|
||||
| [Valgrind] | BSD-3-Clause<sup>\[<a href="#note_vg" id="ref_vg">1</a>]</sup> | 3.16.1 | 3.11.0 | | ✗ |
|
||||
| [variant] | BSL-1.0 | 1.4.0 | 1.4.0 | | ✗ |
|
||||
| [wiredtiger] | | | <sup>\[<a href="#note_wt" id="ref_wt">2</a>]</sup> | ✗ | ✗ |
|
||||
| [yaml-cpp] | MIT | 0.6.3 | 0.6.2 | | ✗ |
|
||||
| [Zlib] | Zlib | 1.2.11 | 1.2.11 | ✗ | ✗ |
|
||||
| [Zstandard] | BSD-3-Clause | 1.4.5 | 1.4.4 | ✗ | ✗ |
|
||||
| Name | License | Vendored Version | Emits persisted data | Distributed in Release Binaries |
|
||||
| ---------------------------| ----------------- | ------------------| :------------------: | :-----------------------------: |
|
||||
| [abseil-cpp] | Apache-2.0 | 070f6e47b3 | | ✗ |
|
||||
| Aladdin MD5 | Zlib | Unknown | ✗ | ✗ |
|
||||
| [ASIO] | BSL-1.0 | b0926b61b0 | | ✗ |
|
||||
| [benchmark] | Apache-2.0 | 1.5.0 | | |
|
||||
| [Boost] | BSL-1.0 | 1.70.0 | | ✗ |
|
||||
| [fmt] | BSD-2-Clause | 6.1.1 | | ✗ |
|
||||
| [GPerfTools] | BSD-3-Clause | 2.8 | | ✗ |
|
||||
| [ICU4] | ICU | 57.1 | ✗ | ✗ |
|
||||
| [Intel Decimal FP Library] | BSD-3-Clause | 2.0 Update 1 | | ✗ |
|
||||
| [JSON-Schema-Test-Suite] | MIT | 728066f9c5 | | |
|
||||
| [kms-message] | | 75e391a037 | | ✗ |
|
||||
| [libstemmer] | BSD-3-Clause | Unknown | ✗ | ✗ |
|
||||
| [linenoise] | BSD-3-Clause | Unknown + changes | | ✗ |
|
||||
| [MozJS] | MPL-2.0 | ESR 60.3.0 | | ✗ |
|
||||
| [MurmurHash3] | Public Domain | Unknown + changes | ✗ | ✗ |
|
||||
| [ocspbuilder] | MIT | 0.10.2 | | |
|
||||
| [ocspresponder] | Apache-2.0 | 0.5.0 | | |
|
||||
| [peglib] | MIT | 0.1.12 | | ✗ |
|
||||
| [Pcre] | BSD-3-Clause | 8.42 | | ✗ |
|
||||
| [S2] | Apache-2.0 | Unknown | ✗ | ✗ |
|
||||
| [SafeInt] | MIT | 3.23 | | |
|
||||
| [scons] | MIT | 3.1.2 | | |
|
||||
| [Snappy] | BSD-3-Clause | 1.1.7 | ✗ | ✗ |
|
||||
| [timelib] | MIT | 2018.01 | | ✗ |
|
||||
| [TomCrypt] | Public Domain | 1.18.2 | ✗ | ✗ |
|
||||
| [Unicode] | Unicode-DFS-2015 | 8.0.0 | ✗ | ✗ |
|
||||
| [Valgrind] | BSD-3-Clause<sup>\[<a href="#note_vg" id="ref_vg">1</a>]</sup> | 3.11.0 | | ✗ |
|
||||
| [variant] | BSL-1.0 | 1.4.0 | | ✗ |
|
||||
| [wiredtiger] | | <sup>\[<a href="#note_wt" id="ref_wt">2</a>]</sup> | ✗ | ✗ |
|
||||
| [yaml-cpp] | MIT | 0.6.2 | | ✗ |
|
||||
| [Zlib] | Zlib | 1.2.11 | ✗ | ✗ |
|
||||
| [Zstandard] | BSD-3-Clause | 1.4.4 | ✗ | ✗ |
|
||||
|
||||
[abseil-cpp]: https://github.com/abseil/abseil-cpp
|
||||
[ASIO]: https://github.com/chriskohlhoff/asio
|
||||
|
||||
@@ -60,8 +60,8 @@ def generate_version_expansions():
|
||||
raise ValueError("Unable to parse version from stdin and no version.json provided")
|
||||
|
||||
if version_parts[0]:
|
||||
expansions["suffix"] = "latest"
|
||||
expansions["src_suffix"] = "latest"
|
||||
expansions["suffix"] = "v4.7-latest"
|
||||
expansions["src_suffix"] = "v4.7-latest"
|
||||
expansions["is_release"] = "false"
|
||||
else:
|
||||
expansions["suffix"] = version_line
|
||||
|
||||
@@ -60,8 +60,8 @@ def generate_version_expansions():
|
||||
raise ValueError("Unable to parse version from stdin and no version.json provided")
|
||||
|
||||
if version_parts[0]:
|
||||
expansions["suffix"] = "latest"
|
||||
expansions["src_suffix"] = "latest"
|
||||
expansions["suffix"] = "v4.7-latest"
|
||||
expansions["src_suffix"] = "v4.7-latest"
|
||||
expansions["is_release"] = "false"
|
||||
else:
|
||||
expansions["suffix"] = version_line
|
||||
|
||||
@@ -69,6 +69,8 @@ GENERIC_FCV = [
|
||||
r'::kDowngradingFromLatestToLastLTS',
|
||||
r'::kDowngradingFromLatestToLastContinuous',
|
||||
r'\.isUpgradingOrDowngrading',
|
||||
r'::kDowngradingFromLatestToLastContinuous',
|
||||
r'::kUpgradingFromLastLTSToLastContinuous',
|
||||
]
|
||||
_RE_GENERIC_FCV_REF = re.compile(r'(' + '|'.join(GENERIC_FCV) + r')\b')
|
||||
|
||||
|
||||
@@ -378,7 +378,6 @@ variables:
|
||||
- enterprise-windows-inmem
|
||||
- enterprise-windows-nopush-template
|
||||
- enterprise-windows-required
|
||||
- enterprise-windows-wtdevelop
|
||||
- ubuntu1804-debug-asan
|
||||
- ubuntu1804-debug-ubsan
|
||||
- ubuntu1804-debug-aubsan-lite
|
||||
@@ -508,7 +507,6 @@ functions:
|
||||
directory: ${git_project_directory|src}
|
||||
revisions: # for each module include revision as <module_name> : ${<module_name>_rev}
|
||||
enterprise: ${enterprise_rev}
|
||||
wtdevelop: ${wtdevelop_rev}
|
||||
|
||||
"fetch artifacts": &fetch_artifacts
|
||||
command: s3.get
|
||||
@@ -637,7 +635,7 @@ functions:
|
||||
"get buildnumber": &get_buildnumber
|
||||
command: keyval.inc
|
||||
params:
|
||||
key: "${build_variant}_master"
|
||||
key: "${build_variant}_v4.7"
|
||||
destination: "builder_num"
|
||||
|
||||
"run diskstats": &run_diskstats
|
||||
@@ -768,12 +766,12 @@ functions:
|
||||
set -o errexit
|
||||
|
||||
cat <<EOF > notary_env.sh
|
||||
export NOTARY_TOKEN=${signing_auth_token_46}
|
||||
export NOTARY_TOKEN=${signing_auth_token_47}
|
||||
export BARQUE_USERNAME=${barque_user}
|
||||
export BARQUE_API_KEY=${barque_api_key}
|
||||
EOF
|
||||
|
||||
echo "${signing_auth_token_46}" > signing_auth_token
|
||||
echo "${signing_auth_token_47}" > signing_auth_token
|
||||
|
||||
"set up remote credentials": &set_up_remote_credentials
|
||||
command: shell.exec
|
||||
@@ -7797,7 +7795,7 @@ tasks:
|
||||
mv distsrc.${ext|tgz} mongodb-src-${src_suffix}.${ext|tar.gz} || true
|
||||
/usr/bin/find build/ -type f | grep msi$ | xargs -I original_filename cp original_filename mongodb-${push_name}-${push_arch}-${suffix}.msi || true
|
||||
|
||||
/usr/local/bin/notary-client.py --key-name "server-4.6" --auth-token-file ${workdir}/src/signing_auth_token --comment "Evergreen Automatic Signing ${revision} - ${build_variant} - ${branch_name}" --notary-url http://notary-service.build.10gen.cc:5000 --skip-missing mongodb-${push_name}-${push_arch}-${suffix}.${ext|tgz} mongodb-shell-${push_name}-${push_arch}-${suffix}.${ext|tgz} mongodb-${push_name}-${push_arch}-debugsymbols-${suffix}.${ext|tgz} mongodb-${push_name}-${push_arch}-${suffix}.msi mongodb-src-${src_suffix}.${ext|tar.gz} mongodb-cryptd-${push_name}-${push_arch}-${suffix}.${ext|tgz}
|
||||
/usr/local/bin/notary-client.py --key-name "server-4.7" --auth-token-file ${workdir}/src/signing_auth_token --comment "Evergreen Automatic Signing ${revision} - ${build_variant} - ${branch_name}" --notary-url http://notary-service.build.10gen.cc:5000 --skip-missing mongodb-${push_name}-${push_arch}-${suffix}.${ext|tgz} mongodb-shell-${push_name}-${push_arch}-${suffix}.${ext|tgz} mongodb-${push_name}-${push_arch}-debugsymbols-${suffix}.${ext|tgz} mongodb-${push_name}-${push_arch}-${suffix}.msi mongodb-src-${src_suffix}.${ext|tar.gz} mongodb-cryptd-${push_name}-${push_arch}-${suffix}.${ext|tgz}
|
||||
|
||||
# Put the binaries tarball/zipfile
|
||||
- command: s3.put
|
||||
@@ -8571,12 +8569,7 @@ modules:
|
||||
- name: enterprise
|
||||
repo: git@github.com:10gen/mongo-enterprise-modules.git
|
||||
prefix: src/mongo/db/modules
|
||||
branch: master
|
||||
|
||||
- name: wtdevelop
|
||||
repo: git@github.com:wiredtiger/wiredtiger.git
|
||||
prefix: src/third_party
|
||||
branch: develop
|
||||
branch: v4.7
|
||||
|
||||
#######################################
|
||||
# Buildvariants #
|
||||
@@ -8672,18 +8665,6 @@ buildvariants:
|
||||
- name: server_discovery_and_monitoring_json_test_TG
|
||||
- name: server_selection_json_test_TG
|
||||
|
||||
- <<: *linux-64-debug-template
|
||||
name: linux-64-debug-wtdevelop
|
||||
display_name: "~ Linux DEBUG WiredTiger develop"
|
||||
batchtime: 240 # 4 hours
|
||||
modules:
|
||||
- wtdevelop
|
||||
expansions:
|
||||
use_wt_develop: true
|
||||
resmoke_jobs_factor: 0.5 # Avoid starting too many mongod's
|
||||
compile_flags: --dbg=on --opt=on -j$(grep -c ^processor /proc/cpuinfo) --variables-files=etc/scons/mongodbtoolchain_v3_gcc.vars --enable-free-mon=off --enable-http-client=off
|
||||
test_flags: --excludeWithAnyTags=requires_http_client
|
||||
|
||||
- name: linux-64-duroff
|
||||
display_name: Linux (No Journal)
|
||||
run_on:
|
||||
@@ -8827,7 +8808,6 @@ buildvariants:
|
||||
display_name: TLA+
|
||||
run_on:
|
||||
- ubuntu1804-build
|
||||
batchtime: 10080 # 7 days
|
||||
stepback: false
|
||||
expansions:
|
||||
timeout_secs: 345600 # 4 days
|
||||
@@ -9097,7 +9077,6 @@ buildvariants:
|
||||
- enterprise
|
||||
run_on:
|
||||
- ubuntu1804-zseries-test
|
||||
batchtime: 10080 # 7 days
|
||||
stepback: false
|
||||
expansions:
|
||||
additional_package_targets: archive-mongocryptd archive-mongocryptd-debug
|
||||
@@ -9761,17 +9740,6 @@ buildvariants:
|
||||
- windows-64-vs2019-large
|
||||
- name: .benchmarks
|
||||
|
||||
- <<: *enterprise-windows-nopush-template
|
||||
name: enterprise-windows-wtdevelop
|
||||
display_name: "~ Enterprise Windows WiredTiger develop"
|
||||
batchtime: 240 # 4 hours
|
||||
modules:
|
||||
- enterprise
|
||||
- wtdevelop
|
||||
expansions:
|
||||
<<: *enterprise-windows-nopush-expansions-template
|
||||
use_wt_develop: true
|
||||
|
||||
- name: enterprise-windows-inmem
|
||||
display_name: Enterprise Windows (inMemory)
|
||||
modules:
|
||||
@@ -10024,7 +9992,6 @@ buildvariants:
|
||||
display_name: "Embedded SDK - macOS"
|
||||
run_on:
|
||||
- macos-1014
|
||||
batchtime: 10080 # 7 days
|
||||
expansions:
|
||||
test_flags: --excludeWithAnyTags=uses_transactions
|
||||
cmake_path: /Applications/cmake-3.11.0-Darwin-x86_64/CMake.app/Contents/bin/cmake
|
||||
@@ -10074,7 +10041,6 @@ buildvariants:
|
||||
|
||||
- name: enterprise-rhel-62-64-bit
|
||||
display_name: "Enterprise RHEL 6.2"
|
||||
batchtime: 1440 # 1 day
|
||||
modules:
|
||||
- enterprise
|
||||
run_on:
|
||||
@@ -10298,7 +10264,6 @@ buildvariants:
|
||||
- enterprise
|
||||
run_on:
|
||||
- rhel62-small
|
||||
batchtime: 10080 # 7 days
|
||||
expansions:
|
||||
additional_package_targets: archive-mongocryptd archive-mongocryptd-debug
|
||||
compile_flags: >-
|
||||
@@ -10503,6 +10468,7 @@ buildvariants:
|
||||
# currently only run on our daily builders.
|
||||
- name: enterprise-rhel-62-64-bit-multiversion
|
||||
display_name: "Enterprise RHEL 6.2 (implicit multiversion)"
|
||||
batchtime: 1440 # 1 day
|
||||
modules:
|
||||
- enterprise
|
||||
run_on:
|
||||
@@ -10537,7 +10503,6 @@ buildvariants:
|
||||
- enterprise
|
||||
run_on:
|
||||
- rhel62-small
|
||||
batchtime: 10080 # 7 days
|
||||
expansions: &enterprise-rhel-62-64-bit-flow-control-off
|
||||
additional_package_targets: archive-mongocryptd archive-mongocryptd-debug
|
||||
test_flags: >-
|
||||
@@ -10644,7 +10609,6 @@ buildvariants:
|
||||
- enterprise
|
||||
run_on:
|
||||
- rhel62-large
|
||||
batchtime: 10080 # 7 days
|
||||
stepback: false
|
||||
expansions:
|
||||
additional_package_targets: archive-mongocryptd archive-mongocryptd-debug
|
||||
@@ -10705,7 +10669,6 @@ buildvariants:
|
||||
# are spending when we split tasks into multiple sub-tasks.
|
||||
- name: enterprise-rhel-62-64-bit-single-task-baseline
|
||||
display_name: "Enterprise RHEL 6.2 (Single Task Baseline)"
|
||||
batchtime: 10080 # 1 week.
|
||||
modules:
|
||||
- enterprise
|
||||
run_on:
|
||||
@@ -10934,7 +10897,6 @@ buildvariants:
|
||||
- <<: *enterprise-rhel-70-64-bit-template
|
||||
name: enterprise-rhel-70-64-bit-kitchen-sink
|
||||
display_name: "~ Enterprise RHEL 7.0 (Dagger)"
|
||||
batchtime: 1440 # 1 day
|
||||
expansions:
|
||||
<<: *enterprise-rhel-70-64-bit-expansions-template
|
||||
compile_flags: --ssl MONGO_DISTMOD=rhel70 -j$(grep -c ^processor /proc/cpuinfo) --variables-files=etc/scons/mongodbtoolchain_v3_gcc.vars
|
||||
@@ -10948,7 +10910,6 @@ buildvariants:
|
||||
- <<: *enterprise-rhel-70-64-bit-template
|
||||
name: hot_backups-rhel-70-64-bit
|
||||
display_name: "hot_backups RHEL 7.0"
|
||||
batchtime: 1440 # 1 day
|
||||
run_on:
|
||||
- rhel70
|
||||
expansions:
|
||||
@@ -10964,7 +10925,6 @@ buildvariants:
|
||||
- <<: *enterprise-rhel-70-64-bit-template
|
||||
name: enterprise-rhel-70-64-bit-no-libunwind
|
||||
display_name: "~ Enterprise RHEL 7.0 (no-libunwind)"
|
||||
batchtime: 10080 # 1 week
|
||||
run_on:
|
||||
- rhel70
|
||||
expansions:
|
||||
@@ -11366,7 +11326,6 @@ buildvariants:
|
||||
- enterprise
|
||||
run_on:
|
||||
- rhel72-zseries-test
|
||||
batchtime: 10080 # 7 days
|
||||
stepback: false
|
||||
expansions:
|
||||
additional_package_targets: archive-mongocryptd archive-mongocryptd-debug
|
||||
@@ -11448,7 +11407,6 @@ buildvariants:
|
||||
- enterprise
|
||||
run_on:
|
||||
- rhel67-zseries-test
|
||||
batchtime: 10080 # 7 days
|
||||
stepback: false
|
||||
expansions:
|
||||
additional_package_targets: archive-mongocryptd archive-mongocryptd-debug
|
||||
@@ -11696,7 +11654,6 @@ buildvariants:
|
||||
- enterprise
|
||||
run_on:
|
||||
- suse12-zseries-test
|
||||
batchtime: 10080 # 7 days
|
||||
stepback: false
|
||||
expansions:
|
||||
additional_package_targets: archive-mongocryptd archive-mongocryptd-debug
|
||||
@@ -12264,7 +12221,6 @@ buildvariants:
|
||||
- enterprise
|
||||
run_on:
|
||||
- rhel71-power8-test
|
||||
batchtime: 10080 # 7 days
|
||||
stepback: false
|
||||
expansions:
|
||||
additional_package_targets: archive-mongocryptd archive-mongocryptd-debug
|
||||
@@ -12577,7 +12533,6 @@ buildvariants:
|
||||
|
||||
- name: enterprise-ubuntu-no-latch-1604-64-bit
|
||||
display_name: "~ Enterprise Ubuntu 16.04 (without Diagnostic Latches)"
|
||||
batchtime: 1440 # 1 day
|
||||
modules:
|
||||
- enterprise
|
||||
expansions:
|
||||
@@ -12589,7 +12544,6 @@ buildvariants:
|
||||
|
||||
- name: enterprise-ubuntu-no-latch-1804-64-bit
|
||||
display_name: "~ Enterprise Ubuntu 18.04 DEBUG (Unoptimized)"
|
||||
batchtime: 1440 # 1 day
|
||||
modules:
|
||||
- enterprise
|
||||
expansions:
|
||||
@@ -12602,7 +12556,6 @@ buildvariants:
|
||||
|
||||
- name: enterprise-ubuntu-scanning-replica-set-monitor-1604-64-bit
|
||||
display_name: "~ Enterprise Ubuntu 16.04 (with ScanningReplicaSetMonitor)"
|
||||
batchtime: 1440 # 1 day
|
||||
run_on:
|
||||
- ubuntu1604-test
|
||||
modules:
|
||||
@@ -12633,7 +12586,6 @@ buildvariants:
|
||||
|
||||
- name: enterprise-ubuntu-sdam-replica-set-monitor-1604-64-bit
|
||||
display_name: "~ Enterprise Ubuntu 16.04 (with SdamReplicaSetMonitor)"
|
||||
batchtime: 1440 # 1 day
|
||||
run_on:
|
||||
- ubuntu1604-test
|
||||
modules:
|
||||
@@ -12664,7 +12616,6 @@ buildvariants:
|
||||
|
||||
- name: enterprise-ubuntu-task-executor-pool-size-1604-64-bit
|
||||
display_name: "~ Enterprise Ubuntu 16.04 (with {taskExecutorPoolSize: 4})"
|
||||
batchtime: 1440 # 1 day
|
||||
run_on:
|
||||
- ubuntu1604-test
|
||||
modules:
|
||||
|
||||
@@ -43,7 +43,7 @@ modules:
|
||||
- name: enterprise
|
||||
repo: git@github.com:10gen/mongo-enterprise-modules.git
|
||||
prefix: src/mongo/db/modules
|
||||
branch: master
|
||||
branch: v4.7
|
||||
- name: mongo-perf
|
||||
repo: git@github.com:mongodb/mongo-perf.git
|
||||
prefix: ../../src
|
||||
|
||||
@@ -46,7 +46,6 @@ variables:
|
||||
_modules: &modules
|
||||
- enterprise
|
||||
- mongo-tools
|
||||
- wtdevelop
|
||||
|
||||
- dsi
|
||||
- signal-processing
|
||||
@@ -74,10 +73,6 @@ modules:
|
||||
repo: git@github.com:10gen/workloads.git
|
||||
prefix: workloads
|
||||
branch: master
|
||||
- name: wtdevelop
|
||||
repo: git@github.com:wiredtiger/wiredtiger.git
|
||||
prefix: src/third_party
|
||||
branch: develop
|
||||
- name: linkbench
|
||||
repo: git@github.com:10gen/linkbench.git
|
||||
prefix: linkbench
|
||||
@@ -92,7 +87,7 @@ modules:
|
||||
- name: enterprise
|
||||
repo: git@github.com:10gen/mongo-enterprise-modules.git
|
||||
prefix: src/mongo/db/modules
|
||||
branch: master
|
||||
branch: v4.7
|
||||
- name: mongo-tools
|
||||
repo: git@github.com:mongodb/mongo-tools.git
|
||||
prefix: mongo-tools/src/github.com/mongodb
|
||||
@@ -915,17 +910,6 @@ buildvariants:
|
||||
- name: bestbuy_agg_merge_wordcount
|
||||
- name: bestbuy_query
|
||||
|
||||
|
||||
- <<: *compile-amazon2
|
||||
name: wtdevelop-compile-amazon2
|
||||
display_name: WT Develop Compile
|
||||
modules: *modules
|
||||
expansions:
|
||||
<<: *compile-expansions
|
||||
compile-variant: -wtdevelop
|
||||
tasks:
|
||||
- name: compile
|
||||
|
||||
- name: compile-rhel70
|
||||
display_name: Compile for Atlas-like
|
||||
modules: *modules
|
||||
@@ -1500,54 +1484,3 @@ buildvariants:
|
||||
- name: linkbench
|
||||
- name: genny_patch_tasks
|
||||
- name: genny_auto_tasks
|
||||
|
||||
- name: wtdevelop-1-node-replSet
|
||||
display_name: WT Develop 1-Node ReplSet
|
||||
batchtime: 10080 # 7 days
|
||||
modules: *modules
|
||||
expansions:
|
||||
mongodb_setup: single-replica
|
||||
infrastructure_provisioning: single
|
||||
platform: linux
|
||||
project_dir: *project_dir
|
||||
compile-variant: -wtdevelop
|
||||
authentication: enabled
|
||||
storageEngine: wiredTiger
|
||||
run_on:
|
||||
- "rhel70-perf-single"
|
||||
depends_on: *_compile_wtdevelop_amazon2
|
||||
tasks: *1nodetasks
|
||||
|
||||
- name: wtdevelop-standalone
|
||||
display_name: WT Develop Standalone
|
||||
batchtime: 10080 # 7 days
|
||||
modules: *modules
|
||||
expansions:
|
||||
mongodb_setup: standalone
|
||||
infrastructure_provisioning: single
|
||||
platform: linux
|
||||
project_dir: *project_dir
|
||||
compile-variant: -wtdevelop
|
||||
authentication: enabled
|
||||
storageEngine: wiredTiger
|
||||
run_on:
|
||||
- "rhel70-perf-single"
|
||||
depends_on: *_compile_wtdevelop_amazon2
|
||||
tasks: *standalonetasks
|
||||
|
||||
- name: wtdevelop-3-node-replSet
|
||||
display_name: WT Develop 3-Node ReplSet
|
||||
batchtime: 10080 # 7 days
|
||||
modules: *modules
|
||||
expansions:
|
||||
mongodb_setup: replica
|
||||
infrastructure_provisioning: replica
|
||||
platform: linux
|
||||
project_dir: *project_dir
|
||||
compile-variant: -wtdevelop
|
||||
authentication: enabled
|
||||
storageEngine: wiredTiger
|
||||
run_on:
|
||||
- "rhel70-perf-replset"
|
||||
depends_on: *_compile_wtdevelop_amazon2
|
||||
tasks: *3nodetasks
|
||||
|
||||
@@ -69,8 +69,8 @@ function runStandaloneTest(downgradeVersion) {
|
||||
{setFeatureCompatibilityVersion: downgradeFCV, downgradeOnDiskChanges: false}),
|
||||
ErrorCodes.IllegalOperation);
|
||||
} else {
|
||||
jsTestLog(
|
||||
"Test that setFeatureCompatibilityVersion succeeds with downgradeOnDiskChanges parameter when FCV is last-continuous");
|
||||
jsTestLog("Test that setFeatureCompatibilityVersion succeeds with downgradeOnDiskChanges " +
|
||||
"parameter when FCV is last-continuous");
|
||||
assert.commandWorked(adminDB.runCommand(
|
||||
{setFeatureCompatibilityVersion: downgradeFCV, downgradeOnDiskChanges: true}));
|
||||
checkFCV(adminDB, downgradeFCV);
|
||||
@@ -132,18 +132,38 @@ function runStandaloneTest(downgradeVersion) {
|
||||
checkFCV(adminDB, downgradeFCV);
|
||||
|
||||
// setFeatureCompatibilityVersion does not support upgrading/downgrading between last-lts and
|
||||
// last-continuous FCV.
|
||||
// last-continuous FCV by default. Upgrading from last-lts to last-continuous is allowed if
|
||||
// fromConfigServer is set to true.
|
||||
if (lastContinuousFCV !== lastLTSFCV) {
|
||||
if (downgradeFCV === lastContinuousFCV) {
|
||||
// Attempt to downgrade FCV from last-continuous to last-lts.
|
||||
assert.commandFailedWithCode(
|
||||
adminDB.runCommand({setFeatureCompatibilityVersion: lastLTSFCV}),
|
||||
ErrorCodes.IllegalOperation);
|
||||
// Downgrading from last-continuous to last-lts is not allowed even with
|
||||
// fromConfigServer: true.
|
||||
assert.commandFailedWithCode(
|
||||
adminDB.runCommand(
|
||||
{setFeatureCompatibilityVersion: lastLTSFCV, fromConfigServer: true}),
|
||||
ErrorCodes.IllegalOperation);
|
||||
} else {
|
||||
// Attempt to upgrade FCV from last-lts to last-continuous.
|
||||
assert.commandFailedWithCode(
|
||||
adminDB.runCommand({setFeatureCompatibilityVersion: lastContinuousFCV}),
|
||||
ErrorCodes.IllegalOperation);
|
||||
adminDB.runCommand({setFeatureCompatibilityVersion: lastContinuousFCV}), 5070603);
|
||||
|
||||
assert.commandFailedWithCode(
|
||||
adminDB.runCommand(
|
||||
{setFeatureCompatibilityVersion: lastContinuousFCV, fromConfigServer: false}),
|
||||
5070603);
|
||||
assert.commandWorked(adminDB.runCommand(
|
||||
{setFeatureCompatibilityVersion: lastContinuousFCV, fromConfigServer: true}));
|
||||
checkFCV(adminDB, lastContinuousFCV);
|
||||
|
||||
// Reset the FCV back to last-lts.
|
||||
assert.commandWorked(adminDB.runCommand({setFeatureCompatibilityVersion: latestFCV}));
|
||||
checkFCV(adminDB, latestFCV);
|
||||
assert.commandWorked(adminDB.runCommand({setFeatureCompatibilityVersion: lastLTSFCV}));
|
||||
checkFCV(adminDB, lastLTSFCV);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,12 +230,12 @@ function runStandaloneTest(downgradeVersion) {
|
||||
MongoRunner.stopMongod(conn);
|
||||
|
||||
// A 'latest' binary mongod started with --shardsvr and clean data files defaults to
|
||||
// 'downgradeFCV'.
|
||||
// lastLTSFCV.
|
||||
conn = MongoRunner.runMongod({dbpath: dbpath, binVersion: latest, shardsvr: ""});
|
||||
assert.neq(
|
||||
null, conn, "mongod was unable to start up with version=" + latest + " and no data files");
|
||||
adminDB = conn.getDB("admin");
|
||||
checkFCV(adminDB, downgradeFCV);
|
||||
checkFCV(adminDB, lastLTSFCV);
|
||||
MongoRunner.stopMongod(conn);
|
||||
}
|
||||
|
||||
@@ -292,6 +312,16 @@ function runReplicaSetTest(downgradeVersion) {
|
||||
primary.adminCommand({setFeatureCompatibilityVersion: downgradeFCV}),
|
||||
ErrorCodes.IllegalOperation);
|
||||
|
||||
if (downgradeFCV === lastLTSFCV && lastLTSFCV !== lastContinuousFCV) {
|
||||
// Upgrading to last-continuous should fail if we are in the middle of upgrading to latest.
|
||||
assert.commandFailedWithCode(
|
||||
primary.adminCommand({setFeatureCompatibilityVersion: lastContinuousFCV}), 5070602);
|
||||
assert.commandFailedWithCode(
|
||||
primary.adminCommand(
|
||||
{setFeatureCompatibilityVersion: lastContinuousFCV, fromConfigServer: true}),
|
||||
5070602);
|
||||
}
|
||||
|
||||
// Because the failed upgrade command left the primary in an intermediary state, complete the
|
||||
// upgrade.
|
||||
assert.commandWorked(primary.adminCommand({setFeatureCompatibilityVersion: latestFCV}));
|
||||
@@ -319,6 +349,32 @@ function runReplicaSetTest(downgradeVersion) {
|
||||
// Complete the downgrade.
|
||||
assert.commandWorked(primary.adminCommand({setFeatureCompatibilityVersion: downgradeFCV}));
|
||||
|
||||
if (downgradeFCV === lastLTSFCV && lastContinuousFCV !== lastLTSFCV) {
|
||||
// The command should fail because wtimeout expires before a majority responds.
|
||||
stopServerReplication(secondary);
|
||||
res = primary.adminCommand({
|
||||
setFeatureCompatibilityVersion: lastContinuousFCV,
|
||||
fromConfigServer: true,
|
||||
writeConcern: {wtimeout: 1000}
|
||||
});
|
||||
assert.eq(0, res.ok);
|
||||
assert.commandFailedWithCode(res, ErrorCodes.WriteConcernFailed);
|
||||
restartServerReplication(secondary);
|
||||
|
||||
// Upgrading the FCV to latest should fail if a previous upgrade to lastContinuous has not
|
||||
// yet completed.
|
||||
assert.commandFailedWithCode(
|
||||
primary.adminCommand({setFeatureCompatibilityVersion: latestFCV}), 5070602);
|
||||
|
||||
// Complete the upgrade to last-continuous.
|
||||
assert.commandWorked(primary.adminCommand(
|
||||
{setFeatureCompatibilityVersion: lastContinuousFCV, fromConfigServer: true}));
|
||||
|
||||
// Reset the FCV back to last-lts.
|
||||
assert.commandWorked(primary.adminCommand({setFeatureCompatibilityVersion: latestFCV}));
|
||||
assert.commandWorked(primary.adminCommand({setFeatureCompatibilityVersion: lastLTSFCV}));
|
||||
}
|
||||
|
||||
secondary = rst.add({binVersion: downgradeVersion});
|
||||
secondaryAdminDB = secondary.getDB("admin");
|
||||
|
||||
@@ -439,7 +495,7 @@ function runShardingTest(downgradeVersion) {
|
||||
checkFCV(configPrimaryAdminDB, downgradeFCV);
|
||||
checkFCV(shardPrimaryAdminDB, downgradeFCV);
|
||||
|
||||
// A 'latest' binary replica set started as a shard server defaults to 'downgradeFCV'.
|
||||
// A 'latest' binary replica set started as a shard server defaults to 'lastLTSFCV'.
|
||||
let latestShard = new ReplSetTest({
|
||||
name: "latestShard",
|
||||
nodes: [{binVersion: latest}, {binVersion: latest}],
|
||||
@@ -449,7 +505,7 @@ function runShardingTest(downgradeVersion) {
|
||||
latestShard.startSet();
|
||||
latestShard.initiate();
|
||||
let latestShardPrimaryAdminDB = latestShard.getPrimary().getDB("admin");
|
||||
checkFCV(latestShardPrimaryAdminDB, downgradeFCV);
|
||||
checkFCV(latestShardPrimaryAdminDB, lastLTSFCV);
|
||||
assert.commandWorked(mongosAdminDB.runCommand({addShard: latestShard.getURL()}));
|
||||
checkFCV(latestShardPrimaryAdminDB, downgradeFCV);
|
||||
|
||||
@@ -489,12 +545,13 @@ function runShardingTest(downgradeVersion) {
|
||||
downgradedShard.stopSet();
|
||||
}
|
||||
|
||||
runStandaloneTest('last-continuous');
|
||||
runStandaloneTest('last-lts');
|
||||
|
||||
runReplicaSetTest('last-continuous');
|
||||
runReplicaSetTest('last-lts');
|
||||
|
||||
runShardingTest('last-continuous');
|
||||
runShardingTest('last-lts');
|
||||
|
||||
if (lastLTSFCV != lastContinuousFCV) {
|
||||
runStandaloneTest('last-continuous');
|
||||
runReplicaSetTest('last-continuous');
|
||||
runShardingTest('last-continuous');
|
||||
}
|
||||
})();
|
||||
|
||||
@@ -42,8 +42,8 @@ function assertBinVersionComparesEqual(v1, v2) {
|
||||
|
||||
// The current version is in the 4.5 series. This has to be changed very time we bump
|
||||
// the major version pair, but it provides a useful test of assumptions.
|
||||
assertBinVersionsEqual("4.5", version());
|
||||
assertBinVersionComparesEqual("4.5", version());
|
||||
assertBinVersionsEqual("4.7", version());
|
||||
assertBinVersionComparesEqual("4.7", version());
|
||||
|
||||
// "latest" is the same version as the shell, "last-lts" is not.
|
||||
assertBinVersionsEqual("latest", version());
|
||||
|
||||
@@ -20,7 +20,7 @@ for (let oldVersion of [lastLTSFCV, lastContinuousFCV]) {
|
||||
{$set: {version: oldVersion}}));
|
||||
checkFCV(adminDB, oldVersion);
|
||||
|
||||
// Upgrading to lastest.
|
||||
// Upgrading to latest.
|
||||
assert.commandWorked(
|
||||
adminDB.system.version.update({_id: "featureCompatibilityVersion"},
|
||||
{$set: {version: oldVersion, targetVersion: latestFCV}}));
|
||||
@@ -51,6 +51,22 @@ for (let oldVersion of [lastLTSFCV, lastContinuousFCV]) {
|
||||
checkFCV(adminDB, latestFCV);
|
||||
}
|
||||
|
||||
if (lastLTSFCV !== lastContinuousFCV) {
|
||||
// Test that we can update from last-lts to last-continuous when the two versions are not equal.
|
||||
// This upgrade path is exposed to users through the setFeatureCompatibilityVersion command with
|
||||
// fromConfigServer: true.
|
||||
assert.commandWorked(adminDB.system.version.update(
|
||||
{_id: "featureCompatibilityVersion"},
|
||||
{$set: {version: lastLTSFCV, targetVersion: lastContinuousFCV}}));
|
||||
checkFCV(adminDB, lastLTSFCV, lastContinuousFCV);
|
||||
|
||||
// Reset to latestFCV.
|
||||
assert.commandWorked(adminDB.system.version.update(
|
||||
{_id: "featureCompatibilityVersion"},
|
||||
{$set: {version: latestFCV}, $unset: {targetVersion: true, previousVersion: true}}));
|
||||
checkFCV(adminDB, latestFCV);
|
||||
}
|
||||
|
||||
// Updating the featureCompatibilityVersion document with an invalid version fails.
|
||||
assert.writeErrorWithCode(
|
||||
adminDB.system.version.update({_id: "featureCompatibilityVersion"}, {$set: {version: "3.2"}}),
|
||||
|
||||
@@ -98,6 +98,10 @@ function runTest(oldVersion) {
|
||||
// 'last-lts'.
|
||||
if (lastContinuousFCV !== lastLTSFCV) {
|
||||
runTest(lastContinuousFCV);
|
||||
|
||||
// Upgrading from last-lts to last-continuous. This FCV transition is allowed through the
|
||||
// setFeatureCompatibilityVersion command with fromConfigServer: true.
|
||||
testFCVChange({fcvDoc: {version: lastLTSFCV, targetVersion: lastContinuousFCV}});
|
||||
}
|
||||
|
||||
// Test upgrade/downgrade between 'latest' and 'last-lts'.
|
||||
|
||||
@@ -165,17 +165,94 @@ function runTest(downgradeFCV) {
|
||||
assert.eq(0, numAwaitingTopologyChangeOnSecondary);
|
||||
|
||||
// Get the new topologyVersion.
|
||||
const primaryResponseAfterDowngrade = isMasterAsInternalClient();
|
||||
let primaryResponseAfterDowngrade = isMasterAsInternalClient();
|
||||
assert(primaryResponseAfterDowngrade.hasOwnProperty("topologyVersion"),
|
||||
tojson(primaryResponseAfterDowngrade));
|
||||
const primaryTopologyVersionAfterDowngrade = primaryResponseAfterDowngrade.topologyVersion;
|
||||
const minWireVersionAfterDowngrade = primaryResponseAfterDowngrade.minWireVersion;
|
||||
let primaryTopologyVersionAfterDowngrade = primaryResponseAfterDowngrade.topologyVersion;
|
||||
let minWireVersionAfterDowngrade = primaryResponseAfterDowngrade.minWireVersion;
|
||||
|
||||
const secondaryResponseAfterDowngrade =
|
||||
let secondaryResponseAfterDowngrade =
|
||||
assert.commandWorked(secondaryAdminDB.runCommand({isMaster: 1}));
|
||||
assert(secondaryResponseAfterDowngrade.hasOwnProperty("topologyVersion"),
|
||||
tojson(secondaryResponseAfterDowngrade));
|
||||
const secondaryTopologyVersionAfterDowngrade = secondaryResponseAfterDowngrade.topologyVersion;
|
||||
let secondaryTopologyVersionAfterDowngrade = secondaryResponseAfterDowngrade.topologyVersion;
|
||||
|
||||
if (downgradeFCV === lastLTSFCV && lastLTSFCV !== lastContinuousFCV) {
|
||||
// Test upgrading from last-lts to last-continuous FCV. We allow this upgrade path via the
|
||||
// setFeatureCompatibilityVersion command with fromConfigServer: true.
|
||||
|
||||
// Reconfigure the failpoint to refresh the number of times the failpoint has been entered.
|
||||
primaryFailPoint = configureFailPoint(primary, "waitForIsMasterResponse");
|
||||
secondaryFailPoint = configureFailPoint(secondary, "waitForIsMasterResponse");
|
||||
let awaitIsMasterBeforeUpgradeOnPrimary =
|
||||
startParallelShell(funWithArgs(runAwaitableIsMasterBeforeFCVChange,
|
||||
primaryTopologyVersionAfterDowngrade,
|
||||
lastContinuousFCV,
|
||||
true /* isPrimary */,
|
||||
minWireVersionAfterDowngrade,
|
||||
maxWireVersion),
|
||||
primary.port);
|
||||
let awaitIsMasterBeforeUpgradeOnSecondary =
|
||||
startParallelShell(funWithArgs(runAwaitableIsMasterBeforeFCVChange,
|
||||
secondaryTopologyVersionAfterDowngrade,
|
||||
lastContinuousFCV,
|
||||
false /* isPrimary */,
|
||||
minWireVersionAfterDowngrade,
|
||||
maxWireVersion),
|
||||
secondary.port);
|
||||
primaryFailPoint.wait();
|
||||
secondaryFailPoint.wait();
|
||||
|
||||
// Each node has one isMaster request waiting on a topology change.
|
||||
numAwaitingTopologyChangeOnPrimary =
|
||||
primaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
|
||||
numAwaitingTopologyChangeOnSecondary =
|
||||
secondaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
|
||||
assert.eq(1, numAwaitingTopologyChangeOnPrimary);
|
||||
assert.eq(1, numAwaitingTopologyChangeOnSecondary);
|
||||
|
||||
// Upgrade the FCV to last-continuous.
|
||||
assert.commandWorked(primaryAdminDB.runCommand(
|
||||
{setFeatureCompatibilityVersion: lastContinuousFCV, fromConfigServer: true}));
|
||||
awaitIsMasterBeforeUpgradeOnPrimary();
|
||||
awaitIsMasterBeforeUpgradeOnSecondary();
|
||||
|
||||
// Ensure the featureCompatibilityVersion document update has been replicated.
|
||||
rst.awaitReplication();
|
||||
checkFCV(primaryAdminDB, lastContinuousFCV);
|
||||
checkFCV(secondaryAdminDB, lastContinuousFCV);
|
||||
|
||||
// All isMaster requests should have been responded to after the FCV change.
|
||||
numAwaitingTopologyChangeOnPrimary =
|
||||
primaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
|
||||
numAwaitingTopologyChangeOnSecondary =
|
||||
secondaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
|
||||
assert.eq(0, numAwaitingTopologyChangeOnPrimary);
|
||||
assert.eq(0, numAwaitingTopologyChangeOnSecondary);
|
||||
|
||||
// Reset the FCV back to last-lts and the get the new isMaster parameters.
|
||||
// We must upgrade to latestFCV first since downgrading from last-continuous to last-stable
|
||||
// is forbidden.
|
||||
assert.commandWorked(
|
||||
primaryAdminDB.runCommand({setFeatureCompatibilityVersion: latestFCV}));
|
||||
assert.commandWorked(
|
||||
primaryAdminDB.runCommand({setFeatureCompatibilityVersion: lastLTSFCV}));
|
||||
rst.awaitReplication();
|
||||
checkFCV(primaryAdminDB, lastLTSFCV);
|
||||
checkFCV(secondaryAdminDB, lastLTSFCV);
|
||||
|
||||
primaryResponseAfterDowngrade = isMasterAsInternalClient();
|
||||
assert(primaryResponseAfterDowngrade.hasOwnProperty("topologyVersion"),
|
||||
tojson(primaryResponseAfterDowngrade));
|
||||
primaryTopologyVersionAfterDowngrade = primaryResponseAfterDowngrade.topologyVersion;
|
||||
minWireVersionAfterDowngrade = primaryResponseAfterDowngrade.minWireVersion;
|
||||
|
||||
secondaryResponseAfterDowngrade =
|
||||
assert.commandWorked(secondaryAdminDB.runCommand({isMaster: 1}));
|
||||
assert(secondaryResponseAfterDowngrade.hasOwnProperty("topologyVersion"),
|
||||
tojson(secondaryResponseAfterDowngrade));
|
||||
secondaryTopologyVersionAfterDowngrade = secondaryResponseAfterDowngrade.topologyVersion;
|
||||
}
|
||||
|
||||
// Reconfigure the failpoint to refresh the number of times the failpoint has been entered.
|
||||
primaryFailPoint = configureFailPoint(primary, "waitForIsMasterResponse");
|
||||
|
||||
@@ -118,17 +118,64 @@ void runUpdateCommand(OperationContext* opCtx, const FeatureCompatibilityVersion
|
||||
client.runCommand(nss.db().toString(), updateCmd.obj(), updateResult);
|
||||
uassertStatusOK(getStatusFromWriteCommandReply(updateResult));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the expected value of the 'targetVersion' field in the FCV document based on the
|
||||
* in-memory FCV value. Returns boost::none if current FCV is not currently upgrading or
|
||||
* downgrading.
|
||||
*/
|
||||
boost::optional<FeatureCompatibilityParams::Version> getFcvDocTargetVersionField() {
|
||||
if (!serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading()) {
|
||||
return boost::none;
|
||||
}
|
||||
const auto currentFcv = serverGlobalParams.featureCompatibility.getVersion();
|
||||
if (currentFcv == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest ||
|
||||
currentFcv == FeatureCompatibilityParams::kUpgradingFromLastContinuousToLatest) {
|
||||
return FeatureCompatibilityParams::kLatest;
|
||||
} else if (currentFcv == FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous ||
|
||||
currentFcv == FeatureCompatibilityParams::kDowngradingFromLatestToLastContinuous) {
|
||||
return FeatureCompatibilityParams::kLastContinuous;
|
||||
} else {
|
||||
invariant(currentFcv == FeatureCompatibilityParams::kDowngradingFromLatestToLastLTS);
|
||||
return FeatureCompatibilityParams::kLastLTS;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the expected value of the 'version' field in the FCV document based on the in-memory FCV
|
||||
* value.
|
||||
*/
|
||||
FeatureCompatibilityParams::Version getFcvDocVersionField() {
|
||||
if (!serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading()) {
|
||||
return serverGlobalParams.featureCompatibility.getVersion();
|
||||
}
|
||||
const auto currentFcv = serverGlobalParams.featureCompatibility.getVersion();
|
||||
if (currentFcv == FeatureCompatibilityParams::kUpgradingFromLastContinuousToLatest ||
|
||||
currentFcv == FeatureCompatibilityParams::kDowngradingFromLatestToLastContinuous) {
|
||||
return FeatureCompatibilityParams::kLastContinuous;
|
||||
} else {
|
||||
invariant(currentFcv == FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous ||
|
||||
currentFcv == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest ||
|
||||
currentFcv == FeatureCompatibilityParams::kDowngradingFromLatestToLastLTS);
|
||||
return FeatureCompatibilityParams::kLastLTS;
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
void FeatureCompatibilityVersion::setTargetUpgradeFrom(
|
||||
OperationContext* opCtx, FeatureCompatibilityParams::Version fromVersion) {
|
||||
OperationContext* opCtx,
|
||||
FeatureCompatibilityParams::Version fromVersion,
|
||||
FeatureCompatibilityParams::Version newVersion) {
|
||||
invariant(fromVersion < newVersion);
|
||||
|
||||
FeatureCompatibilityParams::Version version;
|
||||
// It is possible that we did not fully complete a previous upgrade. In that case, we
|
||||
// must set the source version to be the fully downgraded version as the FCV document
|
||||
// serializer does not recognize upgrading/downgrading states.
|
||||
if (fromVersion == FeatureCompatibilityParams::kUpgradingFromLastContinuousToLatest) {
|
||||
version = FeatureCompatibilityParams::kLastContinuous;
|
||||
} else if (fromVersion == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest) {
|
||||
} else if (fromVersion == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest ||
|
||||
fromVersion == FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous) {
|
||||
version = FeatureCompatibilityParams::kLastLTS;
|
||||
} else {
|
||||
version = fromVersion;
|
||||
@@ -136,9 +183,9 @@ void FeatureCompatibilityVersion::setTargetUpgradeFrom(
|
||||
// Sets both 'version' and 'targetVersion' fields.
|
||||
FeatureCompatibilityVersionDocument fcvDoc;
|
||||
fcvDoc.setVersion(version);
|
||||
fcvDoc.setTargetVersion(FeatureCompatibilityParams::kLatest);
|
||||
fcvDoc.setTargetVersion(newVersion);
|
||||
runUpdateCommand(opCtx, fcvDoc);
|
||||
}
|
||||
} // namespace mongo
|
||||
|
||||
void FeatureCompatibilityVersion::setTargetDowngrade(OperationContext* opCtx,
|
||||
FeatureCompatibilityParams::Version version) {
|
||||
@@ -211,25 +258,24 @@ bool FeatureCompatibilityVersion::isCleanStartUp() {
|
||||
|
||||
void FeatureCompatibilityVersion::updateMinWireVersion() {
|
||||
WireSpec& wireSpec = WireSpec::instance();
|
||||
|
||||
if (serverGlobalParams.featureCompatibility.isGreaterThanOrEqualTo(
|
||||
FeatureCompatibilityParams::kLatest) ||
|
||||
serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading()) {
|
||||
// FCV == kLatest or FCV is upgrading/downgrading.
|
||||
const auto currentFcv = serverGlobalParams.featureCompatibility.getVersion();
|
||||
if (currentFcv == FeatureCompatibilityParams::kLatest ||
|
||||
(serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading() &&
|
||||
currentFcv != FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous)) {
|
||||
// FCV == kLatest or FCV is upgrading/downgrading to or from kLatest.
|
||||
WireSpec::Specification newSpec = *wireSpec.get();
|
||||
newSpec.incomingInternalClient.minWireVersion = LATEST_WIRE_VERSION;
|
||||
newSpec.outgoing.minWireVersion = LATEST_WIRE_VERSION;
|
||||
wireSpec.reset(std::move(newSpec));
|
||||
} else if (serverGlobalParams.featureCompatibility.isGreaterThanOrEqualTo(
|
||||
FeatureCompatibilityParams::kLastContinuous)) {
|
||||
// FCV == kLastContinuous
|
||||
} else if (currentFcv == FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous ||
|
||||
currentFcv == FeatureCompatibilityParams::kLastContinuous) {
|
||||
// FCV == kLastContinuous or upgrading to kLastContinuous.
|
||||
WireSpec::Specification newSpec = *wireSpec.get();
|
||||
newSpec.incomingInternalClient.minWireVersion = LAST_CONT_WIRE_VERSION;
|
||||
newSpec.outgoing.minWireVersion = LAST_CONT_WIRE_VERSION;
|
||||
wireSpec.reset(std::move(newSpec));
|
||||
} else {
|
||||
// FCV == kLastLTS
|
||||
invariant(serverGlobalParams.featureCompatibility.isVersionInitialized());
|
||||
invariant(currentFcv == FeatureCompatibilityParams::kLastLTS);
|
||||
WireSpec::Specification newSpec = *wireSpec.get();
|
||||
newSpec.incomingInternalClient.minWireVersion = LAST_LTS_WIRE_VERSION;
|
||||
newSpec.outgoing.minWireVersion = LAST_LTS_WIRE_VERSION;
|
||||
@@ -337,23 +383,16 @@ void FeatureCompatibilityVersionParameter::append(OperationContext* opCtx,
|
||||
FeatureCompatibilityVersionDocument fcvDoc;
|
||||
BSONObjBuilder featureCompatibilityVersionBuilder(b.subobjStart(name));
|
||||
auto version = serverGlobalParams.featureCompatibility.getVersion();
|
||||
switch (version) {
|
||||
case ServerGlobalParams::FeatureCompatibility::kLatest:
|
||||
case ServerGlobalParams::FeatureCompatibility::kLastLTS:
|
||||
fcvDoc.setVersion(version);
|
||||
break;
|
||||
case ServerGlobalParams::FeatureCompatibility::kUpgradingFromLastLTSToLatest:
|
||||
fcvDoc.setVersion(ServerGlobalParams::FeatureCompatibility::kLastLTS);
|
||||
fcvDoc.setTargetVersion(ServerGlobalParams::FeatureCompatibility::kLatest);
|
||||
break;
|
||||
case ServerGlobalParams::FeatureCompatibility::kDowngradingFromLatestToLastLTS:
|
||||
fcvDoc.setVersion(ServerGlobalParams::FeatureCompatibility::kLastLTS);
|
||||
fcvDoc.setTargetVersion(ServerGlobalParams::FeatureCompatibility::kLastLTS);
|
||||
fcvDoc.setPreviousVersion(ServerGlobalParams::FeatureCompatibility::kLatest);
|
||||
break;
|
||||
case ServerGlobalParams::FeatureCompatibility::Version::kUnsetDefault44Behavior:
|
||||
// getVersion() does not return this value.
|
||||
MONGO_UNREACHABLE;
|
||||
if (serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading()) {
|
||||
fcvDoc.setVersion(getFcvDocVersionField());
|
||||
fcvDoc.setTargetVersion(getFcvDocTargetVersionField());
|
||||
if (version == FeatureCompatibilityParams::kDowngradingFromLatestToLastContinuous ||
|
||||
version == FeatureCompatibilityParams::kDowngradingFromLatestToLastLTS) {
|
||||
// We only support downgrading from the latest FCV.
|
||||
fcvDoc.setPreviousVersion(FeatureCompatibilityParams::kLatest);
|
||||
}
|
||||
} else {
|
||||
fcvDoc.setVersion(version);
|
||||
}
|
||||
featureCompatibilityVersionBuilder.appendElements(fcvDoc.toBSON().removeField("_id"));
|
||||
}
|
||||
|
||||
@@ -67,12 +67,13 @@ public:
|
||||
static void fassertInitializedAfterStartup(OperationContext* opCtx);
|
||||
|
||||
/**
|
||||
* Records intent to perform a currentVersion -> kLatest upgrade by updating the on-disk
|
||||
* Records intent to perform a fromVersion -> newVersion upgrade by updating the on-disk
|
||||
* feature compatibility version document to have 'version'=currentVersion,
|
||||
* 'targetVersion'=kLatest. Should be called before schemas are modified.
|
||||
* 'targetVersion'=newVersion. Should be called before schemas are modified.
|
||||
*/
|
||||
static void setTargetUpgradeFrom(OperationContext* opCtx,
|
||||
ServerGlobalParams::FeatureCompatibility::Version fromVersion);
|
||||
ServerGlobalParams::FeatureCompatibility::Version fromVersion,
|
||||
ServerGlobalParams::FeatureCompatibility::Version newVersion);
|
||||
|
||||
/**
|
||||
* Records intent to perform a downgrade from the latest version by updating the on-disk feature
|
||||
|
||||
@@ -39,22 +39,24 @@
|
||||
|
||||
namespace mongo {
|
||||
|
||||
using FeatureCompatibilityParams = ServerGlobalParams::FeatureCompatibility;
|
||||
|
||||
constexpr StringData FeatureCompatibilityVersionParser::kParameterName;
|
||||
|
||||
constexpr StringData FeatureCompatibilityVersionParser::kLastLTS;
|
||||
constexpr StringData FeatureCompatibilityVersionParser::kLastContinuous;
|
||||
constexpr StringData FeatureCompatibilityVersionParser::kLatest;
|
||||
|
||||
ServerGlobalParams::FeatureCompatibility::Version FeatureCompatibilityVersionParser::parseVersion(
|
||||
FeatureCompatibilityParams::Version FeatureCompatibilityVersionParser::parseVersion(
|
||||
StringData versionString) {
|
||||
if (versionString == kLastLTS) {
|
||||
return ServerGlobalParams::FeatureCompatibility::kLastLTS;
|
||||
return FeatureCompatibilityParams::kLastLTS;
|
||||
}
|
||||
if (versionString == kLastContinuous) {
|
||||
return ServerGlobalParams::FeatureCompatibility::kLastContinuous;
|
||||
return FeatureCompatibilityParams::kLastContinuous;
|
||||
}
|
||||
if (versionString == kLatest) {
|
||||
return ServerGlobalParams::FeatureCompatibility::kLatest;
|
||||
return FeatureCompatibilityParams::kLatest;
|
||||
}
|
||||
uasserted(4926900,
|
||||
str::stream() << "Invalid value for " << kParameterName << "document in "
|
||||
@@ -66,14 +68,14 @@ ServerGlobalParams::FeatureCompatibility::Version FeatureCompatibilityVersionPar
|
||||
}
|
||||
|
||||
StringData FeatureCompatibilityVersionParser::serializeVersion(
|
||||
ServerGlobalParams::FeatureCompatibility::Version version) {
|
||||
if (version == ServerGlobalParams::FeatureCompatibility::kLastLTS) {
|
||||
FeatureCompatibilityParams::Version version) {
|
||||
if (version == FeatureCompatibilityParams::kLastLTS) {
|
||||
return kLastLTS;
|
||||
}
|
||||
if (version == ServerGlobalParams::FeatureCompatibility::kLastContinuous) {
|
||||
if (version == FeatureCompatibilityParams::kLastContinuous) {
|
||||
return kLastContinuous;
|
||||
}
|
||||
if (version == ServerGlobalParams::FeatureCompatibility::kLatest) {
|
||||
if (version == FeatureCompatibilityParams::kLatest) {
|
||||
return kLatest;
|
||||
}
|
||||
// It is a bug if we hit here.
|
||||
@@ -82,16 +84,16 @@ StringData FeatureCompatibilityVersionParser::serializeVersion(
|
||||
}
|
||||
|
||||
Status FeatureCompatibilityVersionParser::validatePreviousVersionField(
|
||||
ServerGlobalParams::FeatureCompatibility::Version version) {
|
||||
if (version == ServerGlobalParams::FeatureCompatibility::kLatest) {
|
||||
FeatureCompatibilityParams::Version version) {
|
||||
if (version == FeatureCompatibilityParams::kLatest) {
|
||||
return Status::OK();
|
||||
}
|
||||
return Status(ErrorCodes::Error(4926901),
|
||||
"when present, 'previousVersion' field must be the latest binary version");
|
||||
}
|
||||
|
||||
StatusWith<ServerGlobalParams::FeatureCompatibility::Version>
|
||||
FeatureCompatibilityVersionParser::parse(const BSONObj& featureCompatibilityVersionDoc) {
|
||||
StatusWith<FeatureCompatibilityParams::Version> FeatureCompatibilityVersionParser::parse(
|
||||
const BSONObj& featureCompatibilityVersionDoc) {
|
||||
try {
|
||||
auto fcvDoc = FeatureCompatibilityVersionDocument::parse(
|
||||
IDLParserErrorContext("FeatureCompatibilityVersionParser"),
|
||||
@@ -101,8 +103,8 @@ FeatureCompatibilityVersionParser::parse(const BSONObj& featureCompatibilityVers
|
||||
auto previousVersion = fcvDoc.getPreviousVersion();
|
||||
|
||||
// Downgrading FCV.
|
||||
if ((version == ServerGlobalParams::FeatureCompatibility::kLastLTS ||
|
||||
version == ServerGlobalParams::FeatureCompatibility::kLastContinuous) &&
|
||||
if ((version == FeatureCompatibilityParams::kLastLTS ||
|
||||
version == FeatureCompatibilityParams::kLastContinuous) &&
|
||||
version == targetVersion) {
|
||||
// Downgrading FCV must have a "previousVersion" field.
|
||||
if (!previousVersion) {
|
||||
@@ -117,12 +119,11 @@ FeatureCompatibilityVersionParser::parse(const BSONObj& featureCompatibilityVers
|
||||
<< feature_compatibility_version_documentation::kCompatibilityLink
|
||||
<< ".");
|
||||
}
|
||||
if (version == ServerGlobalParams::FeatureCompatibility::kLastLTS) {
|
||||
if (version == FeatureCompatibilityParams::kLastLTS) {
|
||||
// Downgrading to last-lts.
|
||||
return ServerGlobalParams::FeatureCompatibility::kDowngradingFromLatestToLastLTS;
|
||||
return FeatureCompatibilityParams::kDowngradingFromLatestToLastLTS;
|
||||
} else {
|
||||
return ServerGlobalParams::FeatureCompatibility::
|
||||
kDowngradingFromLatestToLastContinuous;
|
||||
return FeatureCompatibilityParams::kDowngradingFromLatestToLastContinuous;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,9 +143,9 @@ FeatureCompatibilityVersionParser::parse(const BSONObj& featureCompatibilityVers
|
||||
|
||||
// Upgrading FCV.
|
||||
if (targetVersion) {
|
||||
// For upgrading FCV, "targetVersion" must be kLatest and "version" must be
|
||||
// kLastContinuous or kLastLTS.
|
||||
if (targetVersion != ServerGlobalParams::FeatureCompatibility::kLatest ||
|
||||
// For upgrading FCV, "targetVersion" must be kLatest or kLastContinuous and "version"
|
||||
// must be kLastContinuous or kLastLTS.
|
||||
if (targetVersion == FeatureCompatibilityParams::kLastLTS ||
|
||||
version == ServerGlobalParams::FeatureCompatibility::kLatest) {
|
||||
return Status(ErrorCodes::Error(4926904),
|
||||
str::stream()
|
||||
@@ -155,12 +156,20 @@ FeatureCompatibilityVersionParser::parse(const BSONObj& featureCompatibilityVers
|
||||
<< ".");
|
||||
}
|
||||
|
||||
if (version == ServerGlobalParams::FeatureCompatibility::kLastLTS) {
|
||||
return ServerGlobalParams::FeatureCompatibility::kUpgradingFromLastLTSToLatest;
|
||||
if (version == FeatureCompatibilityParams::kLastLTS) {
|
||||
return targetVersion == FeatureCompatibilityParams::kLastContinuous
|
||||
? FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous
|
||||
: FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest;
|
||||
} else {
|
||||
invariant(version == ServerGlobalParams::FeatureCompatibility::kLastContinuous);
|
||||
return ServerGlobalParams::FeatureCompatibility::
|
||||
kUpgradingFromLastContinuousToLatest;
|
||||
uassert(5070601,
|
||||
str::stream()
|
||||
<< "Invalid " << kParameterName << " document in "
|
||||
<< NamespaceString::kServerConfigurationNamespace.toString() << ": "
|
||||
<< featureCompatibilityVersionDoc << ". See "
|
||||
<< feature_compatibility_version_documentation::kCompatibilityLink
|
||||
<< ".",
|
||||
version == ServerGlobalParams::FeatureCompatibility::kLastContinuous);
|
||||
return FeatureCompatibilityParams::kUpgradingFromLastContinuousToLatest;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "mongo/db/server_options.h"
|
||||
|
||||
namespace mongo {
|
||||
using FeatureCompatibilityParams = ServerGlobalParams::FeatureCompatibility;
|
||||
|
||||
/**
|
||||
* Helpers to parse featureCompatibilityVersion document BSON objects into
|
||||
@@ -51,40 +52,56 @@ public:
|
||||
static constexpr StringData kLastLTS = kVersion44;
|
||||
static constexpr StringData kLastContinuous = kVersion44;
|
||||
static constexpr StringData kLatest = kVersion47;
|
||||
static constexpr StringData kUpgradingFromLastLTSToLatest = kVersionUpgradingFrom44To47;
|
||||
static constexpr StringData kUpgradingFromLastContinuousToLatest = kVersionUpgradingFrom44To47;
|
||||
// kVersionUpgradingFromLastLTSToLastContinuous should assigned kVersionUnset when kLastLTS and
|
||||
// kLastContinuous are equal.
|
||||
static constexpr StringData kVersionUpgradingFromLastLTSToLastContinuous = kVersionUnset;
|
||||
static constexpr StringData kDowngradingFromLatestToLastLTS = kVersionDowngradingFrom47To44;
|
||||
static constexpr StringData kDowngradingFromLatestToLastContinuous =
|
||||
kVersionDowngradingFrom47To44;
|
||||
|
||||
static ServerGlobalParams::FeatureCompatibility::Version parseVersion(StringData versionString);
|
||||
static FeatureCompatibilityParams::Version parseVersion(StringData versionString);
|
||||
|
||||
static StringData serializeVersion(ServerGlobalParams::FeatureCompatibility::Version version);
|
||||
static StringData serializeVersion(FeatureCompatibilityParams::Version version);
|
||||
|
||||
static Status validatePreviousVersionField(
|
||||
ServerGlobalParams::FeatureCompatibility::Version version);
|
||||
static Status validatePreviousVersionField(FeatureCompatibilityParams::Version version);
|
||||
|
||||
/**
|
||||
* Parses the featureCompatibilityVersion document from the server configuration collection
|
||||
* (admin.system.version), and returns the state represented by the combination of the
|
||||
* targetVersion and version.
|
||||
*/
|
||||
static StatusWith<ServerGlobalParams::FeatureCompatibility::Version> parse(
|
||||
static StatusWith<FeatureCompatibilityParams::Version> parse(
|
||||
const BSONObj& featureCompatibilityVersionDoc);
|
||||
|
||||
/**
|
||||
* Useful for message logging.
|
||||
*/
|
||||
static StringData toString(ServerGlobalParams::FeatureCompatibility::Version version) {
|
||||
switch (version) {
|
||||
case ServerGlobalParams::FeatureCompatibility::Version::kUnsetDefault44Behavior:
|
||||
return kVersionUnset;
|
||||
case ServerGlobalParams::FeatureCompatibility::Version::kFullyDowngradedTo44:
|
||||
return kVersion44;
|
||||
case ServerGlobalParams::FeatureCompatibility::Version::kUpgradingFrom44To47:
|
||||
return kVersionUpgradingFrom44To47;
|
||||
case ServerGlobalParams::FeatureCompatibility::Version::kDowngradingFrom47To44:
|
||||
return kVersionDowngradingFrom47To44;
|
||||
case ServerGlobalParams::FeatureCompatibility::Version::kVersion47:
|
||||
return kVersion47;
|
||||
default:
|
||||
MONGO_UNREACHABLE;
|
||||
static StringData toString(FeatureCompatibilityParams::Version version) {
|
||||
if (version == FeatureCompatibilityParams::Version::kUnsetDefault44Behavior) {
|
||||
return kVersionUnset;
|
||||
} else if (version == FeatureCompatibilityParams::kLastLTS) {
|
||||
return kLastLTS;
|
||||
} else if (version == FeatureCompatibilityParams::kDowngradingFromLatestToLastLTS) {
|
||||
return kDowngradingFromLatestToLastLTS;
|
||||
} else if (version == FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous) {
|
||||
// kUpgradingFromLastLTSToLastContinuous is only a valid FCV state when last-continuous
|
||||
// and last-lts are not equal. Otherwise, it is set to kInvalid.
|
||||
invariant(version != FeatureCompatibilityParams::Version::kInvalid);
|
||||
return kVersionUpgradingFromLastLTSToLastContinuous;
|
||||
} else if (version == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest) {
|
||||
return kUpgradingFromLastLTSToLatest;
|
||||
} else if (version == FeatureCompatibilityParams::kLastContinuous) {
|
||||
return kLastContinuous;
|
||||
} else if (version == FeatureCompatibilityParams::kDowngradingFromLatestToLastContinuous) {
|
||||
return kDowngradingFromLatestToLastContinuous;
|
||||
} else if (version == FeatureCompatibilityParams::kUpgradingFromLastContinuousToLatest) {
|
||||
return kUpgradingFromLastContinuousToLatest;
|
||||
} else if (version == FeatureCompatibilityParams::kLatest) {
|
||||
return kLatest;
|
||||
}
|
||||
MONGO_UNREACHABLE;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -49,3 +49,8 @@ commands:
|
||||
downgraded featureCompatibilityVersion."
|
||||
type: safeBool
|
||||
optional: true
|
||||
fromConfigServer:
|
||||
description: "A boolean that indicates whether the command is being requested by a
|
||||
config server."
|
||||
type: safeBool
|
||||
optional: true
|
||||
|
||||
@@ -135,18 +135,44 @@ Status validateDowngradeRequest(FeatureCompatibilityParams::Version actualVersio
|
||||
}
|
||||
|
||||
Status validateUpgradeRequest(FeatureCompatibilityParams::Version actualVersion,
|
||||
FeatureCompatibilityParams::Version requestedVersion) {
|
||||
FeatureCompatibilityParams::Version requestedVersion,
|
||||
boost::optional<bool> fromConfigServer) {
|
||||
invariant(actualVersion < requestedVersion);
|
||||
|
||||
if (actualVersion == FeatureCompatibilityParams::kDowngradingFromLatestToLastLTS ||
|
||||
actualVersion == FeatureCompatibilityParams::kDowngradingFromLatestToLastContinuous) {
|
||||
return Status(ErrorCodes::IllegalOperation,
|
||||
str::stream() << "cannot initiate featureCompatibilityVersion upgrade to "
|
||||
<< FCVP::kLatest
|
||||
<< FCVP::toString(requestedVersion)
|
||||
<< " while a previous featureCompatibilityVersion downgrade to "
|
||||
<< FCVP::kLastLTS << " or " << FCVP::kLastContinuous
|
||||
<< " has not completed. Finish downgrade then upgrade to "
|
||||
<< FCVP::kLatest);
|
||||
}
|
||||
|
||||
if ((actualVersion == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest &&
|
||||
requestedVersion == FeatureCompatibilityParams::kLastContinuous) ||
|
||||
(actualVersion == FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous &&
|
||||
requestedVersion == FeatureCompatibilityParams::kLatest)) {
|
||||
auto incompleteUpgradeVersionString =
|
||||
actualVersion == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest
|
||||
? FCVP::kLatest
|
||||
: FCVP::kLastContinuous;
|
||||
return Status(ErrorCodes::Error(5070602),
|
||||
str::stream()
|
||||
<< "cannot initiate featureCompatibilityVersion upgrade to "
|
||||
<< FCVP::toString(requestedVersion) << " while a previous upgrade to "
|
||||
<< incompleteUpgradeVersionString
|
||||
<< " has not yet completed. Finish upgrade then try again.");
|
||||
}
|
||||
|
||||
if (requestedVersion == FeatureCompatibilityParams::kLastContinuous &&
|
||||
!fromConfigServer.get_value_or(false)) {
|
||||
return Status(ErrorCodes::Error(5070603),
|
||||
str::stream() << "cannot initiate featureCompatibilityVersion upgrade from "
|
||||
<< FCVP::kLastLTS << " to " << FCVP::kLastContinuous << ".");
|
||||
}
|
||||
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
@@ -243,9 +269,9 @@ public:
|
||||
const auto requestedVersionString = FCVP::serializeVersion(requestedVersion);
|
||||
FeatureCompatibilityParams::Version actualVersion =
|
||||
serverGlobalParams.featureCompatibility.getVersion();
|
||||
|
||||
if (request.getDowngradeOnDiskChanges() &&
|
||||
requestedVersion != FeatureCompatibilityParams::kLastContinuous) {
|
||||
(requestedVersion != FeatureCompatibilityParams::kLastContinuous ||
|
||||
actualVersion < requestedVersion)) {
|
||||
std::stringstream downgradeOnDiskErrorSS;
|
||||
downgradeOnDiskErrorSS
|
||||
<< "cannot set featureCompatibilityVersion to " << requestedVersionString
|
||||
@@ -255,18 +281,19 @@ public:
|
||||
uasserted(ErrorCodes::IllegalOperation, downgradeOnDiskErrorSS.str());
|
||||
}
|
||||
|
||||
if (requestedVersion == FeatureCompatibilityParams::kLatest) {
|
||||
uassertStatusOK(validateUpgradeRequest(actualVersion, requestedVersion));
|
||||
if (actualVersion == FeatureCompatibilityParams::kLatest) {
|
||||
// Set the client's last opTime to the system last opTime so no-ops wait for
|
||||
// writeConcern.
|
||||
repl::ReplClientInfo::forClient(opCtx->getClient())
|
||||
.setLastOpToSystemLastOpTime(opCtx);
|
||||
return true;
|
||||
}
|
||||
if (actualVersion == requestedVersion) {
|
||||
// Set the client's last opTime to the system last opTime so no-ops wait for
|
||||
// writeConcern.
|
||||
repl::ReplClientInfo::forClient(opCtx->getClient()).setLastOpToSystemLastOpTime(opCtx);
|
||||
return true;
|
||||
}
|
||||
|
||||
FeatureCompatibilityVersion::setTargetUpgradeFrom(opCtx, actualVersion);
|
||||
if (actualVersion < requestedVersion) {
|
||||
uassertStatusOK(validateUpgradeRequest(
|
||||
actualVersion, requestedVersion, request.getFromConfigServer()));
|
||||
|
||||
FeatureCompatibilityVersion::setTargetUpgradeFrom(
|
||||
opCtx, actualVersion, requestedVersion);
|
||||
{
|
||||
// Take the global lock in S mode to create a barrier for operations taking the
|
||||
// global IX or X locks. This ensures that either
|
||||
@@ -298,19 +325,9 @@ public:
|
||||
|
||||
hangWhileUpgrading.pauseWhileSet(opCtx);
|
||||
FeatureCompatibilityVersion::unsetTargetUpgradeOrDowngrade(opCtx, requestedVersion);
|
||||
} else if (requestedVersion == FeatureCompatibilityParams::kLastLTS ||
|
||||
requestedVersion == FeatureCompatibilityParams::kLastContinuous) {
|
||||
} else {
|
||||
uassertStatusOK(validateDowngradeRequest(actualVersion, requestedVersion));
|
||||
|
||||
if (actualVersion == FeatureCompatibilityParams::kLastLTS ||
|
||||
actualVersion == FeatureCompatibilityParams::kLastContinuous) {
|
||||
// Set the client's last opTime to the system last opTime so no-ops wait for
|
||||
// writeConcern.
|
||||
repl::ReplClientInfo::forClient(opCtx->getClient())
|
||||
.setLastOpToSystemLastOpTime(opCtx);
|
||||
return true;
|
||||
}
|
||||
|
||||
auto replCoord = repl::ReplicationCoordinator::get(opCtx);
|
||||
const bool isReplSet =
|
||||
replCoord->getReplicationMode() == repl::ReplicationCoordinator::modeReplSet;
|
||||
|
||||
@@ -52,6 +52,11 @@ using FeatureCompatibilityParams = ServerGlobalParams::FeatureCompatibility;
|
||||
|
||||
void FcvOpObserver::_setVersion(OperationContext* opCtx,
|
||||
ServerGlobalParams::FeatureCompatibility::Version newVersion) {
|
||||
boost::optional<FeatureCompatibilityParams::Version> prevVersion;
|
||||
|
||||
if (serverGlobalParams.featureCompatibility.isVersionInitialized()) {
|
||||
prevVersion = serverGlobalParams.featureCompatibility.getVersion();
|
||||
}
|
||||
serverGlobalParams.mutableFeatureCompatibility.setVersion(newVersion);
|
||||
FeatureCompatibilityVersion::updateMinWireVersion();
|
||||
|
||||
@@ -92,9 +97,12 @@ void FcvOpObserver::_setVersion(OperationContext* opCtx,
|
||||
// (Generic FCV reference): This FCV check should exist across LTS binary versions.
|
||||
const auto shouldIncrementTopologyVersion =
|
||||
newVersion == FeatureCompatibilityParams::kLastLTS ||
|
||||
newVersion == FeatureCompatibilityParams::kLastContinuous ||
|
||||
(prevVersion &&
|
||||
prevVersion.get() == FeatureCompatibilityParams::kDowngradingFromLatestToLastContinuous) ||
|
||||
newVersion == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest ||
|
||||
newVersion == FeatureCompatibilityParams::kUpgradingFromLastContinuousToLatest;
|
||||
newVersion == FeatureCompatibilityParams::kUpgradingFromLastContinuousToLatest ||
|
||||
newVersion == FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous;
|
||||
|
||||
if (isReplSet && shouldIncrementTopologyVersion) {
|
||||
replCoordinator->incrementTopologyVersion();
|
||||
}
|
||||
|
||||
@@ -531,6 +531,7 @@ env.CppUnitTest(
|
||||
],
|
||||
LIBDEPS=[
|
||||
'$BUILD_DIR/mongo/db/auth/authmocks',
|
||||
'$BUILD_DIR/mongo/db/commands/set_feature_compatibility_version_idl',
|
||||
'$BUILD_DIR/mongo/db/pipeline/document_source_mock',
|
||||
'$BUILD_DIR/mongo/db/read_write_concern_defaults_mock',
|
||||
'$BUILD_DIR/mongo/db/repl/replication_info',
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "mongo/client/remote_command_targeter_factory_mock.h"
|
||||
#include "mongo/client/remote_command_targeter_mock.h"
|
||||
#include "mongo/db/commands.h"
|
||||
#include "mongo/db/commands/set_feature_compatibility_version_gen.h"
|
||||
#include "mongo/db/ops/write_ops.h"
|
||||
#include "mongo/db/repl/replication_coordinator_mock.h"
|
||||
#include "mongo/db/s/add_shard_cmd_gen.h"
|
||||
@@ -134,13 +135,16 @@ protected:
|
||||
void expectSetFeatureCompatibilityVersion(const HostAndPort& target,
|
||||
StatusWith<BSONObj> response,
|
||||
BSONObj writeConcern) {
|
||||
// (Generic FCV reference): This FCV reference should exist across LTS binary versions.
|
||||
SetFeatureCompatibilityVersion fcvCmd(ServerGlobalParams::FeatureCompatibility::kLatest);
|
||||
fcvCmd.setFromConfigServer(true);
|
||||
fcvCmd.setDbName(NamespaceString::kAdminDb);
|
||||
const auto setFcvObj = fcvCmd.toBSON(BSON("writeConcern" << writeConcern));
|
||||
|
||||
onCommandForAddShard([&, target, response](const RemoteCommandRequest& request) {
|
||||
ASSERT_EQ(request.target, target);
|
||||
ASSERT_EQ(request.dbname, "admin");
|
||||
ASSERT_BSONOBJ_EQ(request.cmdObj,
|
||||
BSON("setFeatureCompatibilityVersion"
|
||||
<< "4.7"
|
||||
<< "writeConcern" << writeConcern));
|
||||
ASSERT_BSONOBJ_EQ(request.cmdObj, setFcvObj);
|
||||
|
||||
return response;
|
||||
});
|
||||
|
||||
@@ -84,6 +84,7 @@ using CallbackHandle = executor::TaskExecutor::CallbackHandle;
|
||||
using CallbackArgs = executor::TaskExecutor::CallbackArgs;
|
||||
using RemoteCommandCallbackArgs = executor::TaskExecutor::RemoteCommandCallbackArgs;
|
||||
using RemoteCommandCallbackFn = executor::TaskExecutor::RemoteCommandCallbackFn;
|
||||
using FeatureCompatibilityParams = ServerGlobalParams::FeatureCompatibility;
|
||||
|
||||
const ReadPreferenceSetting kConfigReadSelector(ReadPreference::Nearest, TagSet{});
|
||||
|
||||
@@ -338,23 +339,24 @@ StatusWith<ShardType> ShardingCatalogManager::_validateHostAsShard(
|
||||
<< "field when attempting to add "
|
||||
<< connectionString.toString() << " as a shard");
|
||||
}
|
||||
const auto currentFcv = serverGlobalParams.featureCompatibility.getVersion();
|
||||
// (Generic FCV reference): These FCV checks should exist across LTS binary versions.
|
||||
if (serverGlobalParams.featureCompatibility.isGreaterThanOrEqualTo(
|
||||
ServerGlobalParams::FeatureCompatibility::kLatest) ||
|
||||
serverGlobalParams.featureCompatibility.isUpgradingOrDowngrading()) {
|
||||
// If the cluster's FCV is kLatest, or upgrading to / downgrading from, the node being added
|
||||
// must be a version kLatest binary.
|
||||
if (currentFcv == FeatureCompatibilityParams::kLatest ||
|
||||
currentFcv == FeatureCompatibilityParams::kDowngradingFromLatestToLastContinuous ||
|
||||
currentFcv == FeatureCompatibilityParams::kDowngradingFromLatestToLastLTS ||
|
||||
currentFcv == FeatureCompatibilityParams::kUpgradingFromLastContinuousToLatest ||
|
||||
currentFcv == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest) {
|
||||
// If the cluster's FCV is kLatest, or upgrading to / downgrading from kLatest, the node
|
||||
// being added must be a version kLatest binary.
|
||||
invariant(maxWireVersion == WireVersion::LATEST_WIRE_VERSION);
|
||||
} else if (serverGlobalParams.featureCompatibility.isGreaterThanOrEqualTo(
|
||||
ServerGlobalParams::FeatureCompatibility::kLastContinuous)) {
|
||||
// If we are using the kLastContinuous FCV, the node being added must be of the
|
||||
// last-continuous or latest binary version.
|
||||
} else if (currentFcv == FeatureCompatibilityParams::kLastContinuous ||
|
||||
currentFcv == FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous) {
|
||||
// If we are using the kLastContinuous or upgrading to kLastContinuous FCV, the node being
|
||||
// added must be of the last-continuous or latest binary version.
|
||||
invariant(maxWireVersion >= WireVersion::LAST_CONT_WIRE_VERSION);
|
||||
} else {
|
||||
// If we are using the kLastLTS FCV, the node being added must be of the last-lts or latest
|
||||
// binary version.
|
||||
invariant(maxWireVersion == WireVersion::LAST_LTS_WIRE_VERSION ||
|
||||
maxWireVersion == WireVersion::LATEST_WIRE_VERSION);
|
||||
// (Generic FCV reference): These FCV checks should exist across LTS binary versions.
|
||||
invariant(currentFcv == FeatureCompatibilityParams::kLastLTS);
|
||||
}
|
||||
|
||||
// Check whether there is a master. If there isn't, the replica set may not have been
|
||||
@@ -656,32 +658,49 @@ StatusWith<std::string> ShardingCatalogManager::addShard(
|
||||
invariant(!opCtx->lockState()->isLocked());
|
||||
Lock::SharedLock lk(opCtx->lockState(), FeatureCompatibilityVersion::fcvLock);
|
||||
|
||||
BSONObjBuilder setFCVBuilder;
|
||||
// (Generic FCV reference): These FCV checks should exist across LTS binary versions.
|
||||
switch (serverGlobalParams.featureCompatibility.getVersion()) {
|
||||
case ServerGlobalParams::FeatureCompatibility::kLatest:
|
||||
case ServerGlobalParams::FeatureCompatibility::Version::kUpgradingFrom44To47: {
|
||||
SetFeatureCompatibilityVersion setLatestCmd(
|
||||
ServerGlobalParams::FeatureCompatibility::kLatest);
|
||||
// The serialize function generated by IDL requires the DB name to be set.
|
||||
setLatestCmd.setDbName(NamespaceString::kAdminDb);
|
||||
setLatestCmd.serialize({}, &setFCVBuilder);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
// Get the target version that the newly added shard should be set to.
|
||||
const FeatureCompatibilityParams::Version setVersion = [] {
|
||||
const auto currentFcv = serverGlobalParams.featureCompatibility.getVersion();
|
||||
// (Generic FCV reference): These FCV checks should exist across LTS binary versions.
|
||||
if (currentFcv == FeatureCompatibilityParams::kLatest ||
|
||||
currentFcv == FeatureCompatibilityParams::kUpgradingFromLastContinuousToLatest ||
|
||||
currentFcv == FeatureCompatibilityParams::kUpgradingFromLastLTSToLatest) {
|
||||
return FeatureCompatibilityParams::kLatest;
|
||||
} else if (currentFcv == FeatureCompatibilityParams::kLastContinuous ||
|
||||
currentFcv ==
|
||||
FeatureCompatibilityParams::kDowngradingFromLatestToLastContinuous ||
|
||||
currentFcv ==
|
||||
FeatureCompatibilityParams::kUpgradingFromLastLTSToLastContinuous) {
|
||||
// (Generic FCV reference): These FCV checks should exist across LTS binary
|
||||
// versions.
|
||||
return FeatureCompatibilityParams::kLastContinuous;
|
||||
} else {
|
||||
// (Generic FCV reference): This FCV reference should exist across LTS binary
|
||||
// versions.
|
||||
SetFeatureCompatibilityVersion setLastLTSCmd(
|
||||
ServerGlobalParams::FeatureCompatibility::kLastLTS);
|
||||
// The serialize function generated by IDL requires the DB name to be set.
|
||||
setLastLTSCmd.setDbName(NamespaceString::kAdminDb);
|
||||
setLastLTSCmd.serialize({}, &setFCVBuilder);
|
||||
break;
|
||||
invariant(currentFcv ==
|
||||
FeatureCompatibilityParams::kDowngradingFromLatestToLastLTS ||
|
||||
currentFcv == FeatureCompatibilityParams::kLastLTS);
|
||||
return FeatureCompatibilityParams::kLastLTS;
|
||||
}
|
||||
}();
|
||||
|
||||
SetFeatureCompatibilityVersion setFcvCmd(setVersion);
|
||||
setFcvCmd.setDbName(NamespaceString::kAdminDb);
|
||||
// TODO (SERVER-50954): Remove this FCV check once 4.4 is no longer the last LTS
|
||||
// version.
|
||||
if (serverGlobalParams.featureCompatibility.isGreaterThanOrEqualTo(
|
||||
FeatureCompatibilityParams::Version::kVersion47)) {
|
||||
// fromConfigServer is a new parameter added to 4.8 with intention to be backported
|
||||
// to 4.7.
|
||||
setFcvCmd.setFromConfigServer(true);
|
||||
}
|
||||
setFCVBuilder.append(WriteConcernOptions::kWriteConcernField,
|
||||
opCtx->getWriteConcern().toBSON());
|
||||
auto versionResponse = _runCommandForAddShard(
|
||||
opCtx, targeter.get(), NamespaceString::kAdminDb, setFCVBuilder.obj());
|
||||
|
||||
auto versionResponse =
|
||||
_runCommandForAddShard(opCtx,
|
||||
targeter.get(),
|
||||
NamespaceString::kAdminDb,
|
||||
setFcvCmd.toBSON(BSON(WriteConcernOptions::kWriteConcernField
|
||||
<< opCtx->getWriteConcern().toBSON())));
|
||||
if (!versionResponse.isOK()) {
|
||||
return versionResponse.getStatus();
|
||||
}
|
||||
|
||||
@@ -193,11 +193,12 @@ struct ServerGlobalParams {
|
||||
// The order of these enums matter, higher upgrades having higher values, so that
|
||||
// features can be active or inactive if the version is higher than some minimum or
|
||||
// lower than some maximum, respectively.
|
||||
kUnsetDefault44Behavior = 0,
|
||||
kFullyDowngradedTo44 = 1,
|
||||
kDowngradingFrom47To44 = 2,
|
||||
kUpgradingFrom44To47 = 3,
|
||||
kVersion47 = 4,
|
||||
kInvalid = 0,
|
||||
kUnsetDefault44Behavior = 1,
|
||||
kFullyDowngradedTo44 = 2,
|
||||
kDowngradingFrom47To44 = 3,
|
||||
kUpgradingFrom44To47 = 4,
|
||||
kVersion47 = 5,
|
||||
};
|
||||
|
||||
// These constants should only be used for generic FCV references. Generic references are
|
||||
@@ -215,6 +216,10 @@ struct ServerGlobalParams {
|
||||
static constexpr Version kDowngradingFromLatestToLastLTS = Version::kDowngradingFrom47To44;
|
||||
static constexpr Version kDowngradingFromLatestToLastContinuous =
|
||||
Version::kDowngradingFrom47To44;
|
||||
// kUpgradingFromLastLTSToLastContinuous is only ever set to a valid FCV when
|
||||
// kLastLTS and kLastContinuous are not equal. Otherwise, this value should be set to
|
||||
// kInvalid.
|
||||
static constexpr Version kUpgradingFromLastLTSToLastContinuous = Version::kInvalid;
|
||||
|
||||
/**
|
||||
* On startup, the featureCompatibilityVersion may not have been explicitly set yet. This
|
||||
|
||||
@@ -62,15 +62,15 @@ msi_platform = 'x64'
|
||||
# Enterprise
|
||||
if 'enterprise' in env['MONGO_MODULES']:
|
||||
msi_edition = 'Enterprise'
|
||||
upgrade_code = 'a6b1bdf1-df59-4951-b06f-9c725f0e4718'
|
||||
upgrade_code = 'a345b849-e311-4be7-afd8-3f29ee404882'
|
||||
# Community
|
||||
else:
|
||||
if get_option('ssl') == 'on':
|
||||
msi_edition = 'SSL'
|
||||
upgrade_code = '3849e763-ce67-472c-8f51-99584207c5f9'
|
||||
upgrade_code = '06ac54f6-a00b-41b1-a3f2-6327ceba0882'
|
||||
else:
|
||||
msi_edition = 'Standard'
|
||||
upgrade_code = 'f0a6c3e0-eb06-4e1f-8f8e-25dce563e5b8'
|
||||
upgrade_code = '38b73dec-0435-470b-9dfd-d52e724f17ec'
|
||||
|
||||
sourcesList.append("Installer_64.wxs")
|
||||
|
||||
@@ -94,7 +94,7 @@ major_version = "%s.%s" % (mv[0], mv[1])
|
||||
# It allows upgrade from 3.2.0 to 3.2.1 in place instead of side-by-side.
|
||||
# 3. Update the check for the next major release below so we bump the GUIDs in the future.
|
||||
#
|
||||
if float(major_version) > 4.6:
|
||||
if float(major_version) > 4.8:
|
||||
# If you are troubleshooting this error, see the comment above
|
||||
env.FatalError("The upgrade codes are out of date for this release. Please \n" +
|
||||
"replace the existing GUIDs listed in this file with new GUIDs so " +
|
||||
|
||||
Reference in New Issue
Block a user