@@ -21,6 +21,10 @@ def any_server_selector(server_descriptions):
21
21
return server_descriptions
22
22
23
23
24
+ def readable_server_selector (server_descriptions ):
25
+ return [s for s in server_descriptions if s .is_readable ]
26
+
27
+
24
28
def writable_server_selector (server_descriptions ):
25
29
return [s for s in server_descriptions if s .is_writable ]
26
30
@@ -49,6 +53,11 @@ def single_tag_set_server_selector(tag_set, server_descriptions):
49
53
A server tagged {'a': '1', 'b': '2'} matches the tag set {'a': '1'}.
50
54
51
55
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.
52
61
"""
53
62
def tags_match (server_tags ):
54
63
for key , value in tag_set .items ():
@@ -68,6 +77,11 @@ def tag_sets_server_selector(tag_sets, server_descriptions):
68
77
[{'a': 'value'}, {}] expresses a preference for servers tagged
69
78
{'a': 'value'}, but accepts any server if none matches the first
70
79
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.
71
85
"""
72
86
for tag_set in tag_sets :
73
87
selected = single_tag_set_server_selector (tag_set , server_descriptions )
@@ -81,6 +95,11 @@ def apply_local_threshold(latency_ms, server_descriptions):
81
95
"""All servers with round trip times within latency_ms of the fastest one.
82
96
83
97
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.
84
103
"""
85
104
if not server_descriptions :
86
105
# Avoid ValueError from min() with empty sequence.
@@ -104,4 +123,5 @@ def secondary_with_tags_server_selector(tag_sets, server_descriptions):
104
123
105
124
def member_with_tags_server_selector (tag_sets , server_descriptions ):
106
125
"""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