Skip to content

Allow specifying preferred replica set members #291

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Dec 7, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions conf/mongodb-consistent-backup.example.conf
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ production:
# max_priority: [2-1000] (default: 1000)
# hidden_only: [true|false] (default: false)
# read_pref_tags: [key:value,key:value,...] (default: none)
# preferred_members: rsname/host:port[,...] (default: none)
#sharding:
# balancer:
# wait_secs: [1+] (default: 300)
Expand Down
8 changes: 8 additions & 0 deletions mongodb_consistent_backup/Replication/Replset.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ def __init__(self, config, db):
self.min_priority = self.config.replication.min_priority
self.max_priority = self.config.replication.max_priority
self.hidden_only = self.config.replication.hidden_only
self.preferred_members = []
if self.config.replication.preferred_members:
self.preferred_members = self.config.replication.preferred_members.split(",")
logging.debug("Preferred members: %s" % self.preferred_members)

self.state_primary = 1
self.state_secondary = 2
Expand Down Expand Up @@ -234,6 +238,10 @@ def find_secondary(self, force=False, quiet=False):
logging.info("Found SECONDARY %s that is non-hidden and hidden-only mode is enabled! Skipping" % member_uri)
continue

if member_uri.str() in self.preferred_members:
logging.info("Bumping preferred SECONDARY member %s's score", member_uri)
score = 10000

rep_lag, optime_ts = self.get_repl_lag(member)
score = ceil((score - rep_lag) * score_scale)
if rep_lag < self.max_lag_secs:
Expand Down
3 changes: 3 additions & 0 deletions mongodb_consistent_backup/Replication/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,7 @@ def config(parser):
help="Only use hidden secondary members for backup (default: false)")
parser.add_argument("--replication.read_pref_tags", dest="replication.read_pref_tags", default=None, type=str,
help="Only use members that match replication tags in comma-separated key:value format (default: none)")
parser.add_argument("--replication.preferred_members", dest="replication.preferred_members", default=None, type=str,
help="Prefer members with these names; comma-separated URIs in rs/host:port format (default: none)")

return parser