5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/mongolly/extensions/mongo/mongo_replica_set_client.rb', line 5
def most_current_secondary(threshold = 0, prefer_hidden = true)
replica = self['admin'].command( replSetGetStatus: 1 )
secondaries = replica['members'].select { |m| m['state'] == 2 }.sort_by { |m| [m['optime'], m['name']] }
most_current = secondaries.first
hidden = self['local']['system']['replset'].find_one['members'].select { |mem| mem['hidden'] }.map { |mem| mem['host'] }
if prefer_hidden && !hidden.include?(most_current['name'])
secondaries[1..-1].each do |secondary|
if hidden.include?(secondary['name']) && (most_current['optime'] - secondary['optime']) < threshold
most_current = secondary
break
end
end
end
@mongolly_logger.debug("Found most current secondary #{most_current['name']}, hidden: #{hidden.include? most_current['name']}")
most_current['name']
end
|