Skip to content

Commit b73884d

Browse files
committed
Merge branch 'master' into PYTHON-5168
2 parents 4e35cc3 + 4ed621b commit b73884d

17 files changed

+60
-29
lines changed

.github/workflows/release-python.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ env:
2020
# Changes per repo
2121
PRODUCT_NAME: PyMongo
2222
# Changes per branch
23-
SILK_ASSET_GROUP: mongodb-python-driver
2423
EVERGREEN_PROJECT: mongo-python-driver
2524
# Constant
2625
# inputs will be empty on a scheduled run. so, we only set dry_run
@@ -122,7 +121,6 @@ jobs:
122121
version: ${{ env.VERSION }}
123122
following_version: ${{ env.FOLLOWING_VERSION }}
124123
product_name: ${{ env.PRODUCT_NAME }}
125-
silk_asset_group: ${{ env.SILK_ASSET_GROUP }}
126124
evergreen_project: ${{ env.EVERGREEN_PROJECT }}
127125
token: ${{ github.token }}
128126
dry_run: ${{ env.DRY_RUN }}

pymongo/topology_description.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
from bson.min_key import MinKey
3434
from bson.objectid import ObjectId
3535
from pymongo import common
36-
from pymongo.errors import ConfigurationError
36+
from pymongo.errors import ConfigurationError, PyMongoError
3737
from pymongo.read_preferences import ReadPreference, _AggWritePref, _ServerMode
3838
from pymongo.server_description import ServerDescription
3939
from pymongo.server_selectors import Selection
@@ -563,7 +563,11 @@ def _update_rs_from_primary(
563563
if None not in new_election_tuple:
564564
if None not in max_election_tuple and new_election_tuple < max_election_tuple:
565565
# Stale primary, set to type Unknown.
566-
sds[server_description.address] = server_description.to_unknown()
566+
sds[server_description.address] = server_description.to_unknown(
567+
PyMongoError(
568+
f"primary marked stale due to electionId/setVersion mismatch, {new_election_tuple} is stale compared to {max_election_tuple}"
569+
)
570+
)
567571
return _check_has_primary(sds), replica_set_name, max_set_version, max_election_id
568572
max_election_id = server_description.election_id
569573

@@ -578,7 +582,11 @@ def _update_rs_from_primary(
578582
max_election_safe = tuple(MinKey() if i is None else i for i in max_election_tuple)
579583
if new_election_safe < max_election_safe:
580584
# Stale primary, set to type Unknown.
581-
sds[server_description.address] = server_description.to_unknown()
585+
sds[server_description.address] = server_description.to_unknown(
586+
PyMongoError(
587+
f"primary marked stale due to electionId/setVersion mismatch, {new_election_tuple} is stale compared to {max_election_tuple}"
588+
)
589+
)
582590
return _check_has_primary(sds), replica_set_name, max_set_version, max_election_id
583591
else:
584592
max_election_id = server_description.election_id
@@ -591,7 +599,9 @@ def _update_rs_from_primary(
591599
and server.address != server_description.address
592600
):
593601
# Reset old primary's type to Unknown.
594-
sds[server.address] = server.to_unknown()
602+
sds[server.address] = server.to_unknown(
603+
PyMongoError("primary marked stale due to discovery of newer primary")
604+
)
595605

596606
# There can be only one prior primary.
597607
break

test/asynchronous/test_client.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1847,20 +1847,20 @@ def server_description_count():
18471847
return i
18481848

18491849
gc.collect()
1850-
with client_knobs(min_heartbeat_interval=0.003):
1850+
with client_knobs(min_heartbeat_interval=0.002):
18511851
client = self.simple_client(
1852-
"invalid:27017", heartbeatFrequencyMS=3, serverSelectionTimeoutMS=150
1852+
"invalid:27017", heartbeatFrequencyMS=2, serverSelectionTimeoutMS=200
18531853
)
18541854
initial_count = server_description_count()
18551855
with self.assertRaises(ServerSelectionTimeoutError):
18561856
await client.test.test.find_one()
18571857
gc.collect()
18581858
final_count = server_description_count()
1859+
await client.close()
18591860
# If a bug like PYTHON-2433 is reintroduced then too many
18601861
# ServerDescriptions will be kept alive and this test will fail:
1861-
# AssertionError: 19 != 46 within 15 delta (27 difference)
1862-
# On Python 3.11 we seem to get more of a delta.
1863-
self.assertAlmostEqual(initial_count, final_count, delta=20)
1862+
# AssertionError: 11 != 47 within 20 delta (36 difference)
1863+
self.assertAlmostEqual(initial_count, final_count, delta=30)
18641864

18651865
@async_client_context.require_failCommand_fail_point
18661866
async def test_network_error_message(self):

test/asynchronous/test_discovery_and_monitoring.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,9 @@ def check_outcome(self, topology, outcome):
180180
server_type_name(expected_server_type),
181181
server_type_name(actual_server_description.server_type),
182182
)
183+
expected_error = expected_server.get("error")
184+
if expected_error:
185+
self.assertIn(expected_error, str(actual_server_description.error))
183186

184187
self.assertEqual(expected_server.get("setName"), actual_server_description.replica_set_name)
185188

test/asynchronous/unified_format.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,7 @@ async def drop(self: AsyncGridFSBucket, *args: Any, **kwargs: Any) -> None:
384384
name = spec["id"]
385385
thread = SpecRunnerTask(name)
386386
await thread.start()
387+
self.test.addAsyncCleanup(thread.join, 5)
387388
self[name] = thread
388389
return
389390

test/discovery_and_monitoring/rs/new_primary.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@
5858
"servers": {
5959
"a:27017": {
6060
"type": "Unknown",
61-
"setName": null
61+
"setName": null,
62+
"error": "primary marked stale due to discovery of newer primary"
6263
},
6364
"b:27017": {
6465
"type": "RSPrimary",

test/discovery_and_monitoring/rs/new_primary_new_electionid.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@
7676
"a:27017": {
7777
"type": "Unknown",
7878
"setName": null,
79-
"electionId": null
79+
"electionId": null,
80+
"error": "primary marked stale due to discovery of newer primary"
8081
},
8182
"b:27017": {
8283
"type": "RSPrimary",
@@ -123,7 +124,8 @@
123124
"a:27017": {
124125
"type": "Unknown",
125126
"setName": null,
126-
"electionId": null
127+
"electionId": null,
128+
"error": "primary marked stale due to electionId/setVersion mismatch"
127129
},
128130
"b:27017": {
129131
"type": "RSPrimary",

test/discovery_and_monitoring/rs/new_primary_new_setversion.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@
7676
"a:27017": {
7777
"type": "Unknown",
7878
"setName": null,
79-
"electionId": null
79+
"electionId": null,
80+
"error": "primary marked stale due to discovery of newer primary"
8081
},
8182
"b:27017": {
8283
"type": "RSPrimary",
@@ -123,7 +124,8 @@
123124
"a:27017": {
124125
"type": "Unknown",
125126
"setName": null,
126-
"electionId": null
127+
"electionId": null,
128+
"error": "primary marked stale due to electionId/setVersion mismatch"
127129
},
128130
"b:27017": {
129131
"type": "RSPrimary",

test/discovery_and_monitoring/rs/primary_disconnect_electionid.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@
4848
"a:27017": {
4949
"type": "Unknown",
5050
"setName": null,
51-
"electionId": null
51+
"electionId": null,
52+
"error": "primary marked stale due to discovery of newer primary"
5253
},
5354
"b:27017": {
5455
"type": "RSPrimary",
@@ -124,6 +125,7 @@
124125
"a:27017": {
125126
"type": "Unknown",
126127
"setName": null,
128+
"error": "primary marked stale due to electionId/setVersion mismatch",
127129
"electionId": null
128130
},
129131
"b:27017": {

test/discovery_and_monitoring/rs/primary_disconnect_setversion.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@
4848
"a:27017": {
4949
"type": "Unknown",
5050
"setName": null,
51-
"electionId": null
51+
"electionId": null,
52+
"error": "primary marked stale due to discovery of newer primary"
5253
},
5354
"b:27017": {
5455
"type": "RSPrimary",
@@ -124,6 +125,7 @@
124125
"a:27017": {
125126
"type": "Unknown",
126127
"setName": null,
128+
"error": "primary marked stale due to electionId/setVersion mismatch",
127129
"electionId": null
128130
},
129131
"b:27017": {

0 commit comments

Comments
 (0)