Merge branch 'release-6.2' of github.com:apple/foundationdb into feature-ha-fixes
This commit is contained in:
commit
44975be5b2
|
@ -219,7 +219,10 @@ else()
|
|||
-Wno-undefined-var-template
|
||||
-Wno-unused-value
|
||||
-Wno-tautological-pointer-compare
|
||||
-Wno-format)
|
||||
-Wno-format
|
||||
-Wredundant-move
|
||||
-Wpessimizing-move
|
||||
)
|
||||
if (USE_CCACHE)
|
||||
add_compile_options(
|
||||
-Wno-register
|
||||
|
|
|
@ -98,7 +98,7 @@ When you import the ``fdb`` module, it exposes only one useful symbol:
|
|||
|
||||
.. warning:: |api-version-multi-version-warning|
|
||||
|
||||
For API changes between version 13 and |api-version| (for the purpose of porting older programs), see :doc:`release-notes` and :doc:`api-version-upgrade-guide`.
|
||||
For API changes between version 13 and |api-version| (for the purpose of porting older programs), see :ref:`release-notes` and :doc:`api-version-upgrade-guide`.
|
||||
|
||||
Opening a database
|
||||
==================
|
||||
|
|
|
@ -87,7 +87,7 @@ When you require the ``FDB`` gem, it exposes only one useful method:
|
|||
|
||||
.. warning:: |api-version-multi-version-warning|
|
||||
|
||||
For API changes between version 14 and |api-version| (for the purpose of porting older programs), see :doc:`release-notes` and :doc:`api-version-upgrade-guide`.
|
||||
For API changes between version 14 and |api-version| (for the purpose of porting older programs), see :ref:`release-notes` and :doc:`api-version-upgrade-guide`.
|
||||
|
||||
Opening a database
|
||||
==================
|
||||
|
|
|
@ -213,4 +213,4 @@ Java bindings
|
|||
Older API versions
|
||||
==================
|
||||
|
||||
API versions from the beta and alpha releases of Foundationdb (pre-100) are not documented here. See :doc:`old-release-notes/release-notes-023` for details about changes in those releases.
|
||||
API versions from the beta and alpha releases of Foundationdb (pre-100) are not documented here. See :doc:`release-notes/release-notes-023` for details about changes in those releases.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Client Design
|
||||
#############
|
||||
|
||||
FoundationDB supports language bindings for application development using the ordered key-value store. The following documents cover use of the bindings, from getting started and design principles to best practices and data modeling. The latest changes are detailed in :doc:`release-notes`.
|
||||
FoundationDB supports language bindings for application development using the ordered key-value store. The following documents cover use of the bindings, from getting started and design principles to best practices and data modeling. The latest changes are detailed in :ref:`release-notes`.
|
||||
|
||||
* :doc:`getting-started-mac` explains how to install a local FoundationDB server suitable for development on macOS.
|
||||
|
||||
|
@ -27,7 +27,6 @@ FoundationDB supports language bindings for application development using the or
|
|||
:titlesonly:
|
||||
:hidden:
|
||||
|
||||
release-notes
|
||||
getting-started-mac
|
||||
getting-started-linux
|
||||
downloads
|
||||
|
|
|
@ -12,4 +12,4 @@ were used to track the feature's development.
|
|||
:maxdepth: 1
|
||||
:glob:
|
||||
|
||||
old-release-notes/*
|
||||
release-notes/*
|
||||
|
|
|
@ -22,7 +22,7 @@ FoundationDB is a robust choice for a broad range of use cases:
|
|||
|
||||
**FoundationDB supports flexible application architectures.** Your application can talk directly to FoundationDB, to a layer, or both. Layers provide new capability on top of FoundationDB but are stateless.
|
||||
|
||||
The latest changes are detailed in :doc:`release-notes`. The documentation has the following sections:
|
||||
The latest changes are detailed in :ref:`release-notes`. The documentation has the following sections:
|
||||
|
||||
* :doc:`why-foundationdb` describes the technical alternatives involved in NoSQL database design and explains the advantages of transaction processing at scale.
|
||||
|
||||
|
|
|
@ -494,6 +494,7 @@
|
|||
"data_distribution_disabled_for_ss_failures":true,
|
||||
"data_distribution_disabled_for_rebalance":true,
|
||||
"data_distribution_disabled":true,
|
||||
"active_primary_dc":"pv",
|
||||
"configuration":{
|
||||
"log_anti_quorum":0,
|
||||
"log_replicas":2,
|
||||
|
|
|
@ -119,17 +119,17 @@ Status
|
|||
|
||||
Earlier release notes
|
||||
---------------------
|
||||
* :doc:`4.5 (API Version 450) </old-release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </old-release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </old-release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </old-release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </old-release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </old-release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </old-release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </old-release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </old-release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </old-release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </old-release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </old-release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </old-release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </old-release-notes/release-notes-014>`
|
||||
* :doc:`4.5 (API Version 450) </release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </release-notes/release-notes-014>`
|
|
@ -173,18 +173,18 @@ Other Changes
|
|||
|
||||
Earlier release notes
|
||||
---------------------
|
||||
* :doc:`4.6 (API Version 460) </old-release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </old-release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </old-release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </old-release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </old-release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </old-release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </old-release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </old-release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </old-release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </old-release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </old-release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </old-release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </old-release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </old-release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </old-release-notes/release-notes-014>`
|
||||
* :doc:`4.6 (API Version 460) </release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </release-notes/release-notes-014>`
|
|
@ -196,19 +196,19 @@ Other Changes
|
|||
|
||||
Earlier release notes
|
||||
---------------------
|
||||
* :doc:`5.0 (API Version 500) </old-release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </old-release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </old-release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </old-release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </old-release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </old-release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </old-release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </old-release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </old-release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </old-release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </old-release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </old-release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </old-release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </old-release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </old-release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </old-release-notes/release-notes-014>`
|
||||
* :doc:`5.0 (API Version 500) </release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </release-notes/release-notes-014>`
|
|
@ -99,20 +99,20 @@ Other Changes
|
|||
|
||||
Earlier release notes
|
||||
---------------------
|
||||
* :doc:`5.1 (API Version 510) </old-release-notes/release-notes-510>`
|
||||
* :doc:`5.0 (API Version 500) </old-release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </old-release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </old-release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </old-release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </old-release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </old-release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </old-release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </old-release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </old-release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </old-release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </old-release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </old-release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </old-release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </old-release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </old-release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </old-release-notes/release-notes-014>`
|
||||
* :doc:`5.1 (API Version 510) </release-notes/release-notes-510>`
|
||||
* :doc:`5.0 (API Version 500) </release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </release-notes/release-notes-014>`
|
|
@ -161,21 +161,21 @@ Other Changes
|
|||
|
||||
Earlier release notes
|
||||
---------------------
|
||||
* :doc:`5.2 (API Version 520) </old-release-notes/release-notes-520>`
|
||||
* :doc:`5.1 (API Version 510) </old-release-notes/release-notes-510>`
|
||||
* :doc:`5.0 (API Version 500) </old-release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </old-release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </old-release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </old-release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </old-release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </old-release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </old-release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </old-release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </old-release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </old-release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </old-release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </old-release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </old-release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </old-release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </old-release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </old-release-notes/release-notes-014>`
|
||||
* :doc:`5.2 (API Version 520) </release-notes/release-notes-520>`
|
||||
* :doc:`5.1 (API Version 510) </release-notes/release-notes-510>`
|
||||
* :doc:`5.0 (API Version 500) </release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </release-notes/release-notes-014>`
|
|
@ -180,22 +180,22 @@ Fixes only impacting 6.1.0+
|
|||
|
||||
Earlier release notes
|
||||
---------------------
|
||||
* :doc:`6.0 (API Version 600) </old-release-notes/release-notes-600>`
|
||||
* :doc:`5.2 (API Version 520) </old-release-notes/release-notes-520>`
|
||||
* :doc:`5.1 (API Version 510) </old-release-notes/release-notes-510>`
|
||||
* :doc:`5.0 (API Version 500) </old-release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </old-release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </old-release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </old-release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </old-release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </old-release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </old-release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </old-release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </old-release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </old-release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </old-release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </old-release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </old-release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </old-release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </old-release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </old-release-notes/release-notes-014>`
|
||||
* :doc:`6.0 (API Version 600) </release-notes/release-notes-600>`
|
||||
* :doc:`5.2 (API Version 520) </release-notes/release-notes-520>`
|
||||
* :doc:`5.1 (API Version 510) </release-notes/release-notes-510>`
|
||||
* :doc:`5.0 (API Version 500) </release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </release-notes/release-notes-014>`
|
|
@ -1,7 +1,17 @@
|
|||
.. _release-notes:
|
||||
|
||||
#############
|
||||
Release Notes
|
||||
#############
|
||||
|
||||
6.2.23
|
||||
======
|
||||
|
||||
Status
|
||||
------
|
||||
|
||||
* Added ``cluster.active_primary_dc`` that indicates which datacenter is serving as the primary datacenter in multi-region setups. `(PR #3320) <https://github.com/apple/foundationdb/pull/3320>`_
|
||||
|
||||
6.2.22
|
||||
======
|
||||
|
||||
|
@ -21,6 +31,7 @@ Fixes
|
|||
* ``fdbrestore`` prefix options required exactly a single hyphen instead of the standard two. `(PR #3056) <https://github.com/apple/foundationdb/pull/3056>`_
|
||||
* Commits could stall on a newly elected proxy because of inaccurate compute estimates. `(PR #3123) <https://github.com/apple/foundationdb/pull/3123>`_
|
||||
* A transaction class process with a bad disk could be repeatedly recruited as a transaction log. `(PR #3268) <https://github.com/apple/foundationdb/pull/3268>`_
|
||||
* Fix a potential race condition that could lead to undefined behavior when connecting to a database using the multi-version client API. `(PR #3265) <https://github.com/apple/foundationdb/pull/3265>`_
|
||||
|
||||
Features
|
||||
--------
|
||||
|
@ -109,7 +120,7 @@ Performance
|
|||
* Reduced tail commit latencies by improving commit pipelining on the proxies. `(PR #2589) <https://github.com/apple/foundationdb/pull/2589>`_.
|
||||
* Data distribution does a better job balancing data when disks are more than 70% full. `(PR #2722) <https://github.com/apple/foundationdb/pull/2722>`_.
|
||||
* Reverse range reads could read too much data from disk, resulting in poor performance relative to forward range reads. `(PR #2650) <https://github.com/apple/foundationdb/pull/2650>`_.
|
||||
* Switched from LibreSSL to OpenSSL to improve the speed of establishing connections. `(PR #2650) <https://github.com/apple/foundationdb/pull/2650>`_.
|
||||
* Switched from LibreSSL to OpenSSL to improve the speed of establishing connections. `(PR #2646) <https://github.com/apple/foundationdb/pull/2646>`_.
|
||||
* The cluster controller does a better job avoiding multiple recoveries when first recruited. `(PR #2698) <https://github.com/apple/foundationdb/pull/2698>`_.
|
||||
|
||||
Fixes
|
||||
|
@ -347,23 +358,23 @@ Fixes only impacting 6.2.0+
|
|||
|
||||
Earlier release notes
|
||||
---------------------
|
||||
* :doc:`6.1 (API Version 610) </old-release-notes/release-notes-610>`
|
||||
* :doc:`6.0 (API Version 600) </old-release-notes/release-notes-600>`
|
||||
* :doc:`5.2 (API Version 520) </old-release-notes/release-notes-520>`
|
||||
* :doc:`5.1 (API Version 510) </old-release-notes/release-notes-510>`
|
||||
* :doc:`5.0 (API Version 500) </old-release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </old-release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </old-release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </old-release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </old-release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </old-release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </old-release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </old-release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </old-release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </old-release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </old-release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </old-release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </old-release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </old-release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </old-release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </old-release-notes/release-notes-014>`
|
||||
* :doc:`6.1 (API Version 610) </release-notes/release-notes-610>`
|
||||
* :doc:`6.0 (API Version 600) </release-notes/release-notes-600>`
|
||||
* :doc:`5.2 (API Version 520) </release-notes/release-notes-520>`
|
||||
* :doc:`5.1 (API Version 510) </release-notes/release-notes-510>`
|
||||
* :doc:`5.0 (API Version 500) </release-notes/release-notes-500>`
|
||||
* :doc:`4.6 (API Version 460) </release-notes/release-notes-460>`
|
||||
* :doc:`4.5 (API Version 450) </release-notes/release-notes-450>`
|
||||
* :doc:`4.4 (API Version 440) </release-notes/release-notes-440>`
|
||||
* :doc:`4.3 (API Version 430) </release-notes/release-notes-430>`
|
||||
* :doc:`4.2 (API Version 420) </release-notes/release-notes-420>`
|
||||
* :doc:`4.1 (API Version 410) </release-notes/release-notes-410>`
|
||||
* :doc:`4.0 (API Version 400) </release-notes/release-notes-400>`
|
||||
* :doc:`3.0 (API Version 300) </release-notes/release-notes-300>`
|
||||
* :doc:`2.0 (API Version 200) </release-notes/release-notes-200>`
|
||||
* :doc:`1.0 (API Version 100) </release-notes/release-notes-100>`
|
||||
* :doc:`Beta 3 (API Version 23) </release-notes/release-notes-023>`
|
||||
* :doc:`Beta 2 (API Version 22) </release-notes/release-notes-022>`
|
||||
* :doc:`Beta 1 (API Version 21) </release-notes/release-notes-021>`
|
||||
* :doc:`Alpha 6 (API Version 16) </release-notes/release-notes-016>`
|
||||
* :doc:`Alpha 5 (API Version 14) </release-notes/release-notes-014>`
|
|
@ -945,7 +945,11 @@ void printStatus(StatusObjectReader statusObj, StatusClient::StatusLevel level,
|
|||
|
||||
StatusObjectReader statusObjConfig;
|
||||
StatusArray excludedServersArr;
|
||||
Optional<std::string> activePrimaryDC;
|
||||
|
||||
if (statusObjCluster.has("active_primary_dc")) {
|
||||
activePrimaryDC = statusObjCluster["active_primary_dc"].get_str();
|
||||
}
|
||||
if (statusObjCluster.get("configuration", statusObjConfig)) {
|
||||
if (statusObjConfig.has("excluded_servers"))
|
||||
excludedServersArr = statusObjConfig.last().get_array();
|
||||
|
@ -1001,6 +1005,73 @@ void printStatus(StatusObjectReader statusObj, StatusClient::StatusLevel level,
|
|||
|
||||
if (statusObjConfig.get("log_routers", intVal))
|
||||
outputString += format("\n Desired Log Routers - %d", intVal);
|
||||
|
||||
outputString += "\n Usable Regions - ";
|
||||
if (statusObjConfig.get("usable_regions", intVal)) {
|
||||
outputString += std::to_string(intVal);
|
||||
} else {
|
||||
outputString += "unknown";
|
||||
}
|
||||
|
||||
StatusArray regions;
|
||||
if (statusObjConfig.has("regions")) {
|
||||
outputString += "\n Regions: ";
|
||||
regions = statusObjConfig["regions"].get_array();
|
||||
bool isPrimary = false;
|
||||
std::vector<std::string> regionSatelliteDCs;
|
||||
std::string regionDC;
|
||||
for (StatusObjectReader region : regions) {
|
||||
for (StatusObjectReader dc : region["datacenters"].get_array()) {
|
||||
if (!dc.has("satellite")) {
|
||||
regionDC = dc["id"].get_str();
|
||||
if (activePrimaryDC.present() && dc["id"].get_str() == activePrimaryDC.get()) {
|
||||
isPrimary = true;
|
||||
}
|
||||
} else if (dc["satellite"].get_int() == 1) {
|
||||
regionSatelliteDCs.push_back(dc["id"].get_str());
|
||||
}
|
||||
}
|
||||
if (activePrimaryDC.present()) {
|
||||
if (isPrimary) {
|
||||
outputString += "\n Primary -";
|
||||
} else {
|
||||
outputString += "\n Remote -";
|
||||
}
|
||||
} else {
|
||||
outputString += "\n Region -";
|
||||
}
|
||||
outputString += format("\n Datacenter - %s", regionDC.c_str());
|
||||
if (regionSatelliteDCs.size() > 0) {
|
||||
outputString += "\n Satellite datacenters - ";
|
||||
for (int i = 0; i < regionSatelliteDCs.size(); i++) {
|
||||
if (i != regionSatelliteDCs.size() - 1) {
|
||||
outputString += format("%s, ", regionSatelliteDCs[i].c_str());
|
||||
} else {
|
||||
outputString += format("%s", regionSatelliteDCs[i].c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
isPrimary = false;
|
||||
if (region.get("satellite_redundancy_mode", strVal)) {
|
||||
outputString += format("\n Satellite Redundancy Mode - %s", strVal.c_str());
|
||||
}
|
||||
if (region.get("satellite_anti_quorum", intVal)) {
|
||||
outputString += format("\n Satellite Anti Quorum - %d", intVal);
|
||||
}
|
||||
if (region.get("satellite_logs", intVal)) {
|
||||
outputString += format("\n Satellite Logs - %d", intVal);
|
||||
}
|
||||
if (region.get("satellite_log_policy", strVal)) {
|
||||
outputString += format("\n Satellite Log Policy - %s", strVal.c_str());
|
||||
}
|
||||
if (region.get("satellite_log_replicas", intVal)) {
|
||||
outputString += format("\n Satellite Log Replicas - %d", intVal);
|
||||
}
|
||||
if (region.get("satellite_usable_dcs", intVal)) {
|
||||
outputString += format("\n Satellite Usable DCs - %d", intVal);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (std::runtime_error& ) {
|
||||
outputString = outputStringCache;
|
||||
|
|
|
@ -633,7 +633,7 @@ Reference<LocationInfo> DatabaseContext::setCachedLocation( const KeyRangeRef& k
|
|||
locationCache.insert( KeyRangeRef(begin, end), Reference<LocationInfo>() );
|
||||
}
|
||||
locationCache.insert( keys, loc );
|
||||
return std::move(loc);
|
||||
return loc;
|
||||
}
|
||||
|
||||
void DatabaseContext::invalidateCache( const KeyRef& key, bool isBackward ) {
|
||||
|
|
|
@ -520,6 +520,7 @@ const KeyRef JSONSchemas::statusSchema = LiteralStringRef(R"statusSchema(
|
|||
"data_distribution_disabled_for_ss_failures":true,
|
||||
"data_distribution_disabled_for_rebalance":true,
|
||||
"data_distribution_disabled":true,
|
||||
"active_primary_dc":"pv",
|
||||
"configuration":{
|
||||
"log_anti_quorum":0,
|
||||
"log_replicas":2,
|
||||
|
|
|
@ -2145,6 +2145,35 @@ ACTOR Future<JsonBuilderObject> lockedStatusFetcher(Reference<AsyncVar<CachedSer
|
|||
return statusObj;
|
||||
}
|
||||
|
||||
ACTOR Future<Optional<Value>> getActivePrimaryDC(Database cx, JsonBuilderArray* messages) {
|
||||
state ReadYourWritesTransaction tr(cx);
|
||||
|
||||
state Future<Void> readTimeout = delay(5); // so that we won't loop forever
|
||||
loop {
|
||||
try {
|
||||
if (readTimeout.isReady()) {
|
||||
throw timed_out();
|
||||
}
|
||||
tr.setOption(FDBTransactionOptions::READ_SYSTEM_KEYS);
|
||||
tr.setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE);
|
||||
Optional<Value> res = wait(timeoutError(tr.get(primaryDatacenterKey), 5));
|
||||
if (!res.present()) {
|
||||
messages->push_back(
|
||||
JsonString::makeMessage("primary_dc_missing", "Unable to determine primary datacenter."));
|
||||
}
|
||||
return res;
|
||||
} catch (Error& e) {
|
||||
if (e.code() == error_code_timed_out) {
|
||||
messages->push_back(
|
||||
JsonString::makeMessage("fetch_primary_dc_timedout", "Fetching primary DC timed out."));
|
||||
return Optional<Value>();
|
||||
} else {
|
||||
wait(tr.onError(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// constructs the cluster section of the json status output
|
||||
ACTOR Future<StatusReply> clusterGetStatus(
|
||||
Reference<AsyncVar<CachedSerialization<ServerDBInfo>>> db,
|
||||
|
@ -2323,6 +2352,7 @@ ACTOR Future<StatusReply> clusterGetStatus(
|
|||
state Future<ErrorOr<vector<std::pair<MasterProxyInterface, EventMap>>>> proxyFuture = errorOr(getProxiesAndMetrics(db, address_workers));
|
||||
|
||||
state int minReplicasRemaining = -1;
|
||||
state Future<Optional<Value>> primaryDCFO = getActivePrimaryDC(cx, &messages);
|
||||
std::vector<Future<JsonBuilderObject>> futures2;
|
||||
futures2.push_back(dataStatusFetcher(ddWorker, configuration.get(), &minReplicasRemaining));
|
||||
futures2.push_back(workloadStatusFetcher(db, workers, mWorker, rkWorker, &qos, &data_overlay, &status_incomplete_reasons, storageServerFuture));
|
||||
|
@ -2341,11 +2371,17 @@ ACTOR Future<StatusReply> clusterGetStatus(
|
|||
statusObj["fault_tolerance"] = faultToleranceStatusFetcher(configuration.get(), coordinators, workers, extraTlogEligibleZones, minReplicasRemaining, loadResult.present() && loadResult.get().healthyZone.present());
|
||||
}
|
||||
|
||||
JsonBuilderObject configObj = configurationFetcher(configuration, coordinators, &status_incomplete_reasons);
|
||||
state JsonBuilderObject configObj =
|
||||
configurationFetcher(configuration, coordinators, &status_incomplete_reasons);
|
||||
|
||||
wait(success(primaryDCFO));
|
||||
if (primaryDCFO.get().present()) {
|
||||
statusObj["active_primary_dc"] = primaryDCFO.get().get();
|
||||
}
|
||||
// configArr could be empty
|
||||
if (!configObj.empty())
|
||||
if (!configObj.empty()) {
|
||||
statusObj["configuration"] = configObj;
|
||||
}
|
||||
|
||||
// workloadStatusFetcher returns the workload section but also optionally writes the qos section and adds to the data_overlay object
|
||||
if (!workerStatuses[1].empty())
|
||||
|
|
|
@ -923,18 +923,24 @@ ACTOR Future<Void> watchValue_impl( StorageServer* data, WatchValueRequest req )
|
|||
if( req.debugID.present() )
|
||||
g_traceBatch.addEvent("WatchValueDebug", req.debugID.get().first(), "watchValueQ.AfterVersion"); //.detail("TaskID", g_network->getCurrentTask());
|
||||
|
||||
state Version minVersion = data->data().latestVersion;
|
||||
state Future<Void> watchFuture = data->watches.onChange(req.key);
|
||||
loop {
|
||||
try {
|
||||
state Version latest = data->data().latestVersion;
|
||||
state Future<Void> watchFuture = data->watches.onChange(req.key);
|
||||
state Version latest = data->version.get();
|
||||
TEST(latest >= minVersion && latest < data->data().latestVersion); // Starting watch loop with latestVersion > data->version
|
||||
GetValueRequest getReq( req.key, latest, req.debugID );
|
||||
state Future<Void> getValue = getValueQ( data, getReq ); //we are relying on the delay zero at the top of getValueQ, if removed we need one here
|
||||
GetValueReply reply = wait( getReq.reply.getFuture() );
|
||||
//TraceEvent("WatcherCheckValue").detail("Key", req.key ).detail("Value", req.value ).detail("CurrentValue", v ).detail("Ver", latest);
|
||||
|
||||
if(reply.error.present()) {
|
||||
ASSERT(reply.error.get().code() != error_code_future_version);
|
||||
throw reply.error.get();
|
||||
}
|
||||
if(BUGGIFY) {
|
||||
throw transaction_too_old();
|
||||
}
|
||||
|
||||
debugMutation("ShardWatchValue", latest, MutationRef(MutationRef::DebugKey, req.key, reply.value.present() ? StringRef( reply.value.get() ) : LiteralStringRef("<null>") ) );
|
||||
|
||||
|
@ -955,7 +961,16 @@ ACTOR Future<Void> watchValue_impl( StorageServer* data, WatchValueRequest req )
|
|||
++data->numWatches;
|
||||
data->watchBytes += ( req.key.expectedSize() + req.value.expectedSize() + 1000 );
|
||||
try {
|
||||
wait( watchFuture );
|
||||
if(latest < minVersion) {
|
||||
// If the version we read is less than minVersion, then we may fail to be notified of any changes that occur up to or including minVersion
|
||||
// To prevent that, we'll check the key again once the version reaches our minVersion
|
||||
watchFuture = watchFuture || data->version.whenAtLeast(minVersion);
|
||||
}
|
||||
if(BUGGIFY) {
|
||||
// Simulate a trigger on the watch that results in the loop going around without the value changing
|
||||
watchFuture = watchFuture || delay(deterministicRandom()->random01());
|
||||
}
|
||||
wait(watchFuture);
|
||||
--data->numWatches;
|
||||
data->watchBytes -= ( req.key.expectedSize() + req.value.expectedSize() + 1000 );
|
||||
} catch( Error &e ) {
|
||||
|
@ -964,9 +979,15 @@ ACTOR Future<Void> watchValue_impl( StorageServer* data, WatchValueRequest req )
|
|||
throw;
|
||||
}
|
||||
} catch( Error &e ) {
|
||||
if( e.code() != error_code_transaction_too_old )
|
||||
if( e.code() != error_code_transaction_too_old ) {
|
||||
throw;
|
||||
}
|
||||
|
||||
TEST(true); // Reading a watched key failed with transaction_too_old
|
||||
}
|
||||
|
||||
watchFuture = data->watches.onChange(req.key);
|
||||
wait(data->version.whenAtLeast(data->data().latestVersion));
|
||||
}
|
||||
} catch (Error& e) {
|
||||
if(!canReplyWith(e))
|
||||
|
|
|
@ -19,7 +19,7 @@ struct TriggerRecoveryLoopWorkload : TestWorkload {
|
|||
numRecoveries = getOption(options, LiteralStringRef("numRecoveries"), deterministicRandom()->randomInt(1, 10));
|
||||
delayBetweenRecoveries = getOption(options, LiteralStringRef("delayBetweenRecoveries"), 0.0);
|
||||
killAllProportion = getOption(options, LiteralStringRef("killAllProportion"), 0.1);
|
||||
ASSERT(numRecoveries > 0 && startTime >= 0 and delayBetweenRecoveries >= 0);
|
||||
ASSERT((numRecoveries > 0) && (startTime >= 0) && (delayBetweenRecoveries >= 0));
|
||||
TraceEvent(SevInfo, "TriggerRecoveryLoopSetup")
|
||||
.detail("StartTime", startTime)
|
||||
.detail("NumRecoveries", numRecoveries)
|
||||
|
|
|
@ -573,7 +573,7 @@ namespace actorcompiler
|
|||
{
|
||||
LineNumber(cx.target, stmt.FirstSourceLine);
|
||||
if (stmt.decl.initializerConstructorSyntax || stmt.decl.initializer=="")
|
||||
cx.target.WriteLine("{0} = std::move( {1}({2}) );", stmt.decl.name, stmt.decl.type, stmt.decl.initializer);
|
||||
cx.target.WriteLine("{0} = {1}({2});", stmt.decl.name, stmt.decl.type, stmt.decl.initializer);
|
||||
else
|
||||
cx.target.WriteLine("{0} = {1};", stmt.decl.name, stmt.decl.initializer);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue