@@ -17,8 +17,11 @@ def __init__(self, config, db):
1717 self .max_priority = self .config .replication .max_priority
1818 self .hidden_only = self .config .replication .hidden_only
1919
20- self .hidden_weight = 0.20
21- self .pri0_weight = 0.10
20+ self .state_primary = 1
21+ self .state_secondary = 2
22+ self .state_arbiter = 7
23+ self .hidden_weight = 0.20
24+ self .pri0_weight = 0.10
2225
2326 self .replset = True
2427 self .rs_config = None
@@ -144,7 +147,7 @@ def find_primary(self, force=False, quiet=False):
144147 rs_status = self .get_rs_status (force , quiet )
145148 rs_name = rs_status ['set' ]
146149 for member in rs_status ['members' ]:
147- if member ['stateStr ' ] == 'PRIMARY' and member ['health' ] > 0 :
150+ if member ['state ' ] == self . state_primary and member ['health' ] > 0 :
148151 member_uri = MongoUri (member ['name' ], 27017 , rs_name )
149152 optime_ts = member ['optime' ]
150153 if isinstance (member ['optime' ], dict ) and 'ts' in member ['optime' ]:
@@ -184,14 +187,14 @@ def find_secondary(self, force=False, quiet=False):
184187 if self .is_member_electable (member_config ):
185188 electable_count += 1
186189
187- if member ['state' ] == 7 :
190+ if member ['state' ] == self . state_arbiter :
188191 logging .info ("Found ARBITER %s, skipping" % member_uri )
189- elif member ['state' ] > 2 :
192+ elif member ['state' ] > self . state_secondary :
190193 logging .warning ("Found down or unhealthy SECONDARY %s with state: %s" % (member_uri , member ['stateStr' ]))
191- elif member ['state' ] == 2 and member ['health' ] > 0 :
194+ elif member ['state' ] == self . state_secondary and member ['health' ] > 0 :
192195 log_data = {}
193196 score = self .max_lag_secs * 10
194- score_scale = 100 / score
197+ score_scale = 100.00 / float ( score )
195198 priority = 0
196199 if 'hidden' in member_config and member_config ['hidden' ]:
197200 score += (score * self .hidden_weight )
@@ -224,6 +227,10 @@ def find_secondary(self, force=False, quiet=False):
224227 else :
225228 log_msg = "Found SECONDARY %s with too high replication lag! Skipping" % member_uri
226229
230+ if self .secondary ['score' ] == 0 :
231+ logging .error ("Chosen SECONDARY %s has a score of zero/0! This is unexpected, exiting" % member_uri )
232+ raise OperationError ("Chosen SECONDARY %s has a score of zero/0!" % member_uri )
233+
227234 if 'configsvr' in rs_status and rs_status ['configsvr' ]:
228235 log_data ['configsvr' ] = True
229236
0 commit comments