@@ -21,6 +21,10 @@ def any_server_selector(server_descriptions):
2121 return server_descriptions
2222
2323
24+ def readable_server_selector (server_descriptions ):
25+ return [s for s in server_descriptions if s .is_readable ]
26+
27+
2428def writable_server_selector (server_descriptions ):
2529 return [s for s in server_descriptions if s .is_writable ]
2630
@@ -49,6 +53,11 @@ def single_tag_set_server_selector(tag_set, server_descriptions):
4953 A server tagged {'a': '1', 'b': '2'} matches the tag set {'a': '1'}.
5054
5155 The empty tag set {} matches any server.
56+
57+ The `server_descriptions` passed to this function should have
58+ non-readable servers (e.g. RSGhost, RSArbiter, Unknown) filtered
59+ out (e.g. by readable_server_selector or secondary_server_selector)
60+ first.
5261 """
5362 def tags_match (server_tags ):
5463 for key , value in tag_set .items ():
@@ -68,6 +77,11 @@ def tag_sets_server_selector(tag_sets, server_descriptions):
6877 [{'a': 'value'}, {}] expresses a preference for servers tagged
6978 {'a': 'value'}, but accepts any server if none matches the first
7079 preference.
80+
81+ The `server_descriptions` passed to this function should have
82+ non-readable servers (e.g. RSGhost, RSArbiter, Unknown) filtered
83+ out (e.g. by readable_server_selector or secondary_server_selector)
84+ first.
7185 """
7286 for tag_set in tag_sets :
7387 selected = single_tag_set_server_selector (tag_set , server_descriptions )
@@ -81,6 +95,11 @@ def apply_local_threshold(latency_ms, server_descriptions):
8195 """All servers with round trip times within latency_ms of the fastest one.
8296
8397 No ServerDescription's round_trip_time can be None.
98+
99+ The `server_descriptions` passed to this function should have
100+ non-readable servers (e.g. RSGhost, RSArbiter, Unknown) filtered
101+ out (e.g. by readable_server_selector or secondary_server_selector)
102+ first.
84103 """
85104 if not server_descriptions :
86105 # Avoid ValueError from min() with empty sequence.
@@ -104,4 +123,5 @@ def secondary_with_tags_server_selector(tag_sets, server_descriptions):
104123
105124def member_with_tags_server_selector (tag_sets , server_descriptions ):
106125 """All near-enough members matching the tag sets."""
107- return tag_sets_server_selector (tag_sets , server_descriptions )
126+ return tag_sets_server_selector (
127+ tag_sets , readable_server_selector (server_descriptions ))
0 commit comments