Skip to content

Commit ab9ca27

Browse files
committed
Revert "PYTHON-2970 Prioritize electionId over setVersion for stale primary check (#845)"
This reverts commit 52d7795.
1 parent ee262d6 commit ab9ca27

11 files changed

+51
-471
lines changed

doc/changelog.rst

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ PyMongo 3.13 drops support for Python 3.4.
1212
Bug fixes
1313
.........
1414

15-
- Fixed a bug where the client could be unable to discover the new primary
16-
after a simultaneous replica set election and reconfig (`PYTHON-2970`_).
1715
- Fixed a memory leak bug when calling :func:`~bson.decode_all` without a
1816
``codec_options`` argument (`PYTHON-3222`_).
1917
- Fixed a bug where :func:`~bson.decode_all` did not accept ``codec_options``
@@ -29,7 +27,6 @@ Deprecations
2927
See the `PyMongo 3.13.0 release notes in JIRA`_ for the list of resolved issues
3028
in this release.
3129

32-
.. _PYTHON-2970: https://jira.mongodb.org/browse/PYTHON-2970
3330
.. _PYTHON-3222: https://jira.mongodb.org/browse/PYTHON-3222
3431
.. _PyMongo 3.13.0 release notes in JIRA: https://jira.mongodb.org/secure/ReleaseNote.jspa?projectId=10004&version=31570
3532

pymongo/collection.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3109,8 +3109,6 @@ def map_reduce(self, map, reduce, out, full_response=False, session=None, **kwar
31093109
31103110
- https://docs.mongodb.com/manual/reference/map-reduce-to-aggregation-pipeline/
31113111
- https://docs.mongodb.com/manual/reference/aggregation-commands-comparison/
3112-
3113-
.. _mapReduce command: https://docs.mongodb.com/manual/reference/command/mapReduce/
31143112
.. versionchanged:: 3.4
31153113
Added the `collation` option.
31163114
.. versionchanged:: 2.2
@@ -3119,7 +3117,6 @@ def map_reduce(self, map, reduce, out, full_response=False, session=None, **kwar
31193117
.. _map reduce command: http://docs.mongodb.org/manual/reference/command/mapReduce/
31203118
31213119
.. seealso:: The MongoDB documentation on `mapreduce <https://dochub.mongodb.org/core/mapreduce>`_.
3122-
31233120
"""
31243121
warnings.warn(
31253122
'map_reduce is deprecated, use aggregate instead',
@@ -3183,7 +3180,7 @@ def inline_map_reduce(self, map, reduce, full_response=False, session=None, **kw
31833180
.. versionchanged:: 3.4
31843181
Added the `collation` option.
31853182
3186-
.. _mapReduce command: https://docs.mongodb.com/manual/reference/command/mapReduce/
3183+
.. _map reduce command: http://docs.mongodb.org/manual/reference/command/mapReduce/
31873184
"""
31883185
warnings.warn(
31893186
'inline_map_reduce is deprecated, use aggregate instead',

pymongo/topology_description.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
from collections import namedtuple
1818

19-
from bson.min_key import MinKey
2019
from pymongo import common
2120
from pymongo.errors import ConfigurationError
2221
from pymongo.read_preferences import ReadPreference
@@ -495,16 +494,24 @@ def _update_rs_from_primary(
495494
sds.pop(server_description.address)
496495
return (_check_has_primary(sds), replica_set_name, max_set_version, max_election_id)
497496

498-
new_election_tuple = server_description.election_id, server_description.set_version
499-
max_election_tuple = max_election_id, max_set_version
500-
new_election_safe = tuple(MinKey() if i is None else i for i in new_election_tuple)
501-
max_election_safe = tuple(MinKey() if i is None else i for i in max_election_tuple)
502-
if new_election_safe >= max_election_safe:
503-
max_election_id, max_set_version = new_election_tuple
504-
else:
505-
# Stale primary, set to type Unknown.
506-
sds[server_description.address] = server_description.to_unknown()
507-
return _check_has_primary(sds), replica_set_name, max_set_version, max_election_id
497+
max_election_tuple = max_set_version, max_election_id
498+
if None not in server_description.election_tuple:
499+
if (
500+
None not in max_election_tuple
501+
and max_election_tuple > server_description.election_tuple
502+
):
503+
504+
# Stale primary, set to type Unknown.
505+
sds[server_description.address] = server_description.to_unknown()
506+
return (_check_has_primary(sds), replica_set_name, max_set_version, max_election_id)
507+
508+
max_election_id = server_description.election_id
509+
510+
if server_description.set_version is not None and (
511+
max_set_version is None or server_description.set_version > max_set_version
512+
):
513+
514+
max_set_version = server_description.set_version
508515

509516
# We've heard from the primary. Is it the same primary as before?
510517
for server in sds.values():

test/discovery_and_monitoring/rs/electionId_precedence_setVersion.json

Lines changed: 0 additions & 92 deletions
This file was deleted.

test/discovery_and_monitoring/rs/null_election_id.json

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -120,18 +120,15 @@
120120
"outcome": {
121121
"servers": {
122122
"a:27017": {
123-
"type": "Unknown",
124-
"setName": null,
125-
"setVersion": null,
126-
"electionId": null
127-
},
128-
"b:27017": {
129123
"type": "RSPrimary",
130124
"setName": "rs",
131125
"setVersion": 1,
132-
"electionId": {
133-
"$oid": "000000000000000000000002"
134-
}
126+
"electionId": null
127+
},
128+
"b:27017": {
129+
"type": "Unknown",
130+
"setName": null,
131+
"electionId": null
135132
},
136133
"c:27017": {
137134
"type": "Unknown",
@@ -173,18 +170,15 @@
173170
"outcome": {
174171
"servers": {
175172
"a:27017": {
176-
"type": "Unknown",
177-
"setName": null,
178-
"setVersion": null,
179-
"electionId": null
180-
},
181-
"b:27017": {
182173
"type": "RSPrimary",
183174
"setName": "rs",
184175
"setVersion": 1,
185-
"electionId": {
186-
"$oid": "000000000000000000000002"
187-
}
176+
"electionId": null
177+
},
178+
"b:27017": {
179+
"type": "Unknown",
180+
"setName": null,
181+
"electionId": null
188182
},
189183
"c:27017": {
190184
"type": "Unknown",

test/discovery_and_monitoring/rs/secondary_ignore_ok_0.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"description": "Secondary ignored when ok is zero",
2+
"description": "New primary",
33
"uri": "mongodb://a,b/?replicaSet=rs",
44
"phases": [
55
{

test/discovery_and_monitoring/rs/set_version_can_rollback.json

Lines changed: 0 additions & 149 deletions
This file was deleted.

0 commit comments

Comments
 (0)