summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWenbin Zhu <wenbin.zhu@mongodb.com>2021-10-06 17:35:35 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-10-06 19:07:14 +0000
commite9e18132e3342afd815033e7629041c37c07118b (patch)
treebe49568a22b9c23b95d4a093ce105b9ad8d2e368
parent35d5a6fc01fbe994873024c4f44d0bc4da9d6a1e (diff)
downloadmongo-e9e18132e3342afd815033e7629041c37c07118b.tar.gz
SERVER-59041 Update replication architecture guide for the relaxed voting constraint.
-rw-r--r--src/mongo/db/repl/README.md13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/mongo/db/repl/README.md b/src/mongo/db/repl/README.md
index 949a2ae4ac3..3cf67a21f1b 100644
--- a/src/mongo/db/repl/README.md
+++ b/src/mongo/db/repl/README.md
@@ -477,9 +477,11 @@ The receiving node's `TopologyCoordinator` updates the last time it received a h
sending node for liveness checking in its `MemberData` list.
If the sending node's config is newer than the receiving node's, then the receiving node schedules a
-heartbeat to get the config. The receiving node's `TopologyCoordinator` also updates its
-`MemberData` with the last update from the sending node and marks it as being up. See more details on
-config propagation via heartbeats in the [Reconfiguration](#Reconfiguration) section.
+heartbeat to get the config, except when the receiving node is [in primary state but cannot accept
+non-local writes](https://github.com/mongodb/mongo/blob/04777b82b0e0f7f83b99f1c837816bc93ba4d23b/src/mongo/db/repl/replication_coordinator_impl_heartbeat.cpp#L610-L618).
+The receiving node's `TopologyCoordinator` also updates its `MemberData` with the last update from
+the sending node and marks it as being up. See more details on config propagation via heartbeats in
+the [Reconfiguration](#Reconfiguration) section.
It then creates a `ReplSetHeartbeatResponse` object. This includes:
@@ -1821,9 +1823,8 @@ will be "newer" than any other config in the system.
Config ordering also affects voting behavior. If a replica set node is a candidate for election in
config `(vc, tc)`, then a prospective voter with config `(v, t)` will only cast a vote for the
-candidate if `(vc, tc) = (v, t)`. For correctness, it would be acceptable for a candidate to cast
-its vote whenever `(vc, tc) >= (v, t)`, but the current implementation is more restrictive. For a
-description of the complete voting behavior, see the [Elections](#Elections) section.
+candidate if `(vc, tc) >= (v, t)`. For a description of the complete voting behavior, see the
+[Elections](#Elections) section.
### Formal Specification