-
Notifications
You must be signed in to change notification settings - Fork 237
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
DOCS-758 Adds new commit scope rule degradation functionality for syn…
…chronous and group commit. (#6044) * First draft reference changes. * Small changes. * Small tweaks. * More small changes in group and synchrnounous commit. * Small fixes. * More small tweaks. * tried to fix link. * Changing paths to absolute. * Update product_docs/docs/pgd/5.6/commit-scopes/synchronous_commit.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/commit-scopes/index.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Changed wording in Group commit. * Changed order of commit scopes in Commit scope rules to feature synchronous commit first. * changed overview to put synch commit before group commit. * Removed some white space. * Degrade options section. * Added Degrade on section in Commit scopes page. * Fixed some small things. * Small word change. * Move CAMO and adjust accordingly. * Small changes. * Moved degrading options to its own page. * Addressed one of DJ's comments. * Update product_docs/docs/pgd/5.6/commit-scopes/degrading.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/commit-scopes/degrading.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/commit-scopes/degrading.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/reference/commit-scopes.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/reference/commit-scopes.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Moved behavior section up. * Worked on wording given Petr's comments. * More word changes. * Add degrading bit to Overview. * Added wrap-language support, wrapped blocks, added degrading to index Signed-off-by: Dj Walker-Morgan <[email protected]> * Remove console.log hangover Signed-off-by: Dj Walker-Morgan <[email protected]> * Improve feedback Signed-off-by: Dj Walker-Morgan <[email protected]> * Shorten tooltip Signed-off-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/commit-scopes/degrading.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/commit-scopes/group-commit.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/commit-scopes/index.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/commit-scopes/synchronous_commit.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Update product_docs/docs/pgd/5.6/commit-scopes/degrading.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> * Disable startWrap for now Signed-off-by: Dj Walker-Morgan <[email protected]> * Fix link. * Update product_docs/docs/pgd/5.6/commit-scopes/commit-scope-rules.mdx Co-authored-by: Dj Walker-Morgan <[email protected]> --------- Signed-off-by: Dj Walker-Morgan <[email protected]> Co-authored-by: Dj Walker-Morgan <[email protected]> Co-authored-by: Dj Walker-Morgan <[email protected]>
- Loading branch information
1 parent
69ff3ee
commit 322319e
Showing
12 changed files
with
190 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
--- | ||
title: Degrading commit scope rules | ||
navTitle: Degrading | ||
deepToC: true | ||
--- | ||
|
||
`SYNCHRONOUS_COMMIT`, `GROUP COMMIT`, and `CAMO` each have the optional capability of degrading the requirements for transactions when particular performance thresholds are crossed. | ||
|
||
When a node is applying a transaction and that transaction times out, it can be useful to trigger a process of degrading the requirements of the transaction to be completed, rather than just rolling back. | ||
|
||
`DEGRADE ON` offers a route for gracefully degrading the commit scope rule of a transaction. At its simplest, `DEGRADE ON` takes a timeout and a second set of commit scope operations that the commit scope can gracefully degrade to. | ||
|
||
For instance, after 20ms or 30ms timeout, the requirements for satisfying a commit scope could degrade from `ALL (node_group_name) GROUP COMMIT` to `MAJORITY (node_group_name) GROUP COMMIT`, making the transactions apply more steadily. | ||
|
||
You can also require that the write leader be the originator of a transaction in order for the degrade clause to be triggered. This can be helpful in "split brain scenarios" where you have, say, 2 data nodes and a witness node. Supposing there is a network split between the two data nodes and you have connections to both of the data nodes, only one of them will be allowed to degrade, because only one of them will be elected leader through the raft election with the witness node. | ||
|
||
## Behavior | ||
|
||
There are two parts to how the generalized `DEGRADE` clause behaves as it is applied to transactions. | ||
|
||
Once during the commit, while the commit being processed is waiting for responses that satisfy the commit scope rule, PGD checks for a timeout and, if the timeout has expired, the commit being processed is reconfigured to wait for the commit scope rule in the `DEGRADE` clause. In fact, by this point, the commit scope rule in the `DEGRADE` clause might already be satisfied. | ||
|
||
This mechanism alone is insufficient for the intended behavior, as this alone would mean that every transaction—even those that were certain to degrade due to connectivity issues—must wait for the timeout to expire before degraded mode kicks in, which would severely affect performance in such degrading-cluster scenarios. | ||
|
||
To avoid this, the PGD manager process also periodically (every 5s) checks the connectivity and apply rate (the one in [bdr.node_replication_rates](/pgd/latest/reference/catalogs-visible/#bdrnode_replication_rates)) and if there are commit scopes that would degrade at that point based on the current state of replication, they will be automatically degraded—such that any transaction using that commit scope when processing after that uses the degraded rule instead of waiting for timeout—until the manager process detects that replication is moving swiftly enough again. | ||
|
||
## SYNCHRONOUS_COMMIT and GROUP COMMIT | ||
|
||
Both `SYNCHRONOUS_COMMIT` and `GROUP COMMIT` have `timeout` and `require_write_lead` parameters, with defaults of `0` and `false` respectively. You should probably always set the `timeout`, as the default of `0` causes an instant degrade. You can also require that the write leader be the originator of the transaction in order to switch to degraded (again, default is `false`). | ||
|
||
Both `SYNCHRONOUS_COMMIT` and `GROUP COMMIT` also have options regarding which rule you can degrade to—which depends on which rule you are degrading from. | ||
|
||
First of all, you can degrade to asynchronous operation: | ||
|
||
```sql | ||
ALL (left_dc) SYNCHRONOUS_COMMIT DEGRADE ON (timeout=20s) TO ASYNC | ||
``` | ||
|
||
You can also degrade to a less restrictive commit group with the same commit scope kind (again as long as the kind is either `SYNCHRONOUS_COMMIT` or `GROUP COMMIT`). For instance, you can degrade as follows: | ||
|
||
```sql | ||
ALL (left_dc) SYNCHRONOUS_COMMIT DEGRADE ON (timeout=20s) TO MAJORITY (left_dc) SYNCHRONOUS_COMMIT | ||
``` | ||
|
||
or as follows: | ||
|
||
```sql | ||
ANY 3 (left_dc) SYNCHRONOUS_COMMIT DEGRADE ON (timeout=20s) TO ANY 2 (left_dc) SYNCHRONOUS_COMMIT | ||
``` | ||
|
||
But you cannot degrade from `SYNCHRONOUS_COMMIT` to `GROUP COMMIT` or the other way around. | ||
|
||
## CAMO | ||
|
||
While [CAMO](camo) supports both the same `timeout` and `require_write_lead` parameters (with the same defaults, `0` and `false` respectively), the options are simpler in that you can only degrade to asynchronous operation. | ||
|
||
```sql | ||
ALL (left_dc) CAMO DEGRADE ON (timeout=20ms, require_write_lead=true) TO ASYNC | ||
``` | ||
|
||
Again, you should set the `timeout` parameter, as the default is `0`. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.