Skip to content

Commit ea5626a

Browse files
authored
Merge pull request #218 from timvaillancourt/1.2.0-issue_177
1.2.0: Fix for replication.max_lag_secs Issue #177
2 parents 0325797 + 72d6263 commit ea5626a

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

mongodb_consistent_backup/Replication/Replset.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)