Skip to content

Commit 627f0fd

Browse files
author
Tim Vaillancourt
committed
adding scaling of scoring based on max_lag_secs, added compatability for different 'optime' fields
1 parent d4df54e commit 627f0fd

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

MongoBackup/ReplsetHandler.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,13 @@ def find_desirable_secondary(self):
6161
'host': member['name'],
6262
'optime': member['optimeDate']
6363
}
64+
optime = member['optime']
65+
if 'ts' in member['optime']:
66+
optime = member['optime']['ts']
6467
logging.debug("Found PRIMARY: %s/%s with optime %s" % (
6568
rs_name,
6669
member['name'],
67-
str(member['optime']['ts'])
70+
str(optime)
6871
))
6972
if primary is None:
7073
logging.fatal("Unable to locate a PRIMARY member for replset %s, giving up" % rs_name)
@@ -73,22 +76,24 @@ def find_desirable_secondary(self):
7376
secondary = None
7477
for member in rs_status['members']:
7578
if member['stateStr'] == 'SECONDARY' and member['health'] > 0:
76-
log_data = {}
77-
score = 100
79+
score = self.max_lag_secs * 10
80+
score_scale = 100 / score
81+
log_data = {}
7882

83+
hidden_weight = 0.20
7984
for member_config in rs_config['config']['members']:
8085
if member_config['host'] == member['name']:
8186
if 'hidden' in member_config and member_config['hidden'] == True:
82-
score += 20
87+
score += (score * hidden_weight)
8388
log_data['hidden'] = True
8489
if 'priority' in member_config:
8590
log_data['priority'] = int(member_config['priority'])
86-
if member_config['priority'] > 1:
91+
if member_config['priority'] > 0:
8792
score = score - member_config['priority']
8893
break
8994

9095
rep_lag = (mktime(primary['optime'].timetuple()) - mktime(member['optimeDate'].timetuple()))
91-
score = score - rep_lag
96+
score = ceil((score - rep_lag) * score_scale)
9297
if rep_lag < self.max_lag_secs:
9398
if secondary is None or score > secondary['score']:
9499
secondary = {
@@ -102,7 +107,9 @@ def find_desirable_secondary(self):
102107
else:
103108
log_msg = "Found SECONDARY %s/%s with too-high replication lag! Skipping" % (rs_name, member['name'])
104109

105-
log_data['optime'] = member['optime']['ts']
110+
log_data['optime'] = member['optime']
111+
if 'ts' in member['optime']:
112+
log_data['optime'] = member['optime']['ts']
106113
log_data['score'] = int(score)
107114
logging.debug("%s: %s" % (log_msg, str(log_data)))
108115
if secondary is None or (secondary['count'] + 1) < quorum_count:

0 commit comments

Comments
 (0)