82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/synapse/service_watcher/base.rb', line 82
def backends
filtered = backends_filtered_by_labels
if @leader_election
failure_warning = nil
if filtered.empty?
failure_warning = "synapse: service #{@name}: leader election failed: no backends to choose from"
end
all_backends_have_ids = filtered.all?{|b| b.key?('id') && b['id']}
unless all_backends_have_ids
failure_warning = "synapse: service #{@name}: leader election failed; not all backends include an id"
end
if failure_warning.nil?
smallest = filtered.sort_by{ |b| b['id']}.first
log.debug "synapse: leader election chose one of #{filtered.count} backends " \
"(#{smallest['host']}:#{smallest['port']} with id #{smallest['id']})"
return [smallest]
elsif (Time.now - @leader_last_warn) > LEADER_WARN_INTERVAL
@leader_last_warn = Time.now
log.warn failure_warning
return []
end
end
return filtered
end
|