33
33
from bson .min_key import MinKey
34
34
from bson .objectid import ObjectId
35
35
from pymongo import common
36
- from pymongo .errors import ConfigurationError
36
+ from pymongo .errors import ConfigurationError , PyMongoError
37
37
from pymongo .read_preferences import ReadPreference , _AggWritePref , _ServerMode
38
38
from pymongo .server_description import ServerDescription
39
39
from pymongo .server_selectors import Selection
@@ -563,7 +563,11 @@ def _update_rs_from_primary(
563
563
if None not in new_election_tuple :
564
564
if None not in max_election_tuple and new_election_tuple < max_election_tuple :
565
565
# 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
+ )
567
571
return _check_has_primary (sds ), replica_set_name , max_set_version , max_election_id
568
572
max_election_id = server_description .election_id
569
573
@@ -578,7 +582,11 @@ def _update_rs_from_primary(
578
582
max_election_safe = tuple (MinKey () if i is None else i for i in max_election_tuple )
579
583
if new_election_safe < max_election_safe :
580
584
# 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
+ )
582
590
return _check_has_primary (sds ), replica_set_name , max_set_version , max_election_id
583
591
else :
584
592
max_election_id = server_description .election_id
@@ -591,7 +599,9 @@ def _update_rs_from_primary(
591
599
and server .address != server_description .address
592
600
):
593
601
# 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
+ )
595
605
596
606
# There can be only one prior primary.
597
607
break
0 commit comments