Class: ZeevexCluster::Election
- Inherits:
-
Base
- Object
- Base
- ZeevexCluster::Election
show all
- Defined in:
- lib/zeevex_cluster/election.rb
Instance Attribute Summary
Attributes inherited from Base
#nodename, #options
Instance Method Summary
collapse
Methods inherited from Base
#ensure_master, #run_if_master
#logger
Constructor Details
#initialize(options = {}) ⇒ Election
Returns a new instance of Election.
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/zeevex_cluster/election.rb', line 7
def initialize(options = {})
super
raise ArgumentError, 'Must specify :cluster_name' unless options[:cluster_name]
if options[:hooks]
add_hooks(options[:hooks])
end
unless (@strategy = options[:strategy])
stype = options[:strategy_type] || 'cas'
@strategy = ZeevexCluster::Strategy.create(stype,
{:nodename => options.fetch(:nodename, Socket.gethostname),
:cluster_name => options[:cluster_name],
:logger => options[:logger]}.
merge(options[:backend_options]))
end
@strategy.add_hook_observer Proc.new { |*args| hook_observer(*args) }
after_initialize
end
|
Instance Method Details
#campaign! ⇒ Object
57
58
59
60
61
|
# File 'lib/zeevex_cluster/election.rb', line 57
def campaign!
@strategy.start unless @strategy.started?
@strategy.resign 0
end
|
#can_view? ⇒ Boolean
92
93
94
|
# File 'lib/zeevex_cluster/election.rb', line 92
def can_view?
member? || observing? || @strategy.respond_to?(:can_view?) ? @strategy.can_view? : false
end
|
#join ⇒ Object
70
71
72
73
74
|
# File 'lib/zeevex_cluster/election.rb', line 70
def join
return if member?
@member = true
@strategy.start unless @strategy.started?
end
|
#leave ⇒ Object
76
77
78
79
80
81
82
|
# File 'lib/zeevex_cluster/election.rb', line 76
def leave
return unless member?
resign! if master?
@strategy.stop if @strategy.started?
ensure
@member = false
end
|
#make_master! ⇒ Object
Make this node the master, returning true if successful. No-op for now.
39
40
41
42
43
44
45
46
|
# File 'lib/zeevex_cluster/election.rb', line 39
def make_master!
return unless member?
if @strategy.steal_election!
true
else
false
end
end
|
#master ⇒ Object
Return name of master node
66
67
68
|
# File 'lib/zeevex_cluster/election.rb', line 66
def master
can_view? && @strategy.master_node && @strategy.master_node[:nodename]
end
|
#master? ⇒ Boolean
32
33
34
|
# File 'lib/zeevex_cluster/election.rb', line 32
def master?
member? && @strategy.am_i_master?
end
|
#member? ⇒ Boolean
84
85
86
|
# File 'lib/zeevex_cluster/election.rb', line 84
def member?
@strategy.member?
end
|
#members ⇒ Object
88
89
90
|
# File 'lib/zeevex_cluster/election.rb', line 88
def members
can_view? && (@strategy.respond_to?(:members) ? @strategy.members : [@nodename])
end
|
#observe ⇒ Object
101
102
103
104
|
# File 'lib/zeevex_cluster/election.rb', line 101
def observe
@strategy.observe
{:master => master, :members => members}
end
|
#observing? ⇒ Boolean
96
97
98
99
|
# File 'lib/zeevex_cluster/election.rb', line 96
def observing?
@strategy.respond_to?(:observing?) ? @strategy.observing? : true
end
|
#resign!(delay = nil) ⇒ Object
Resign from mastership; returns false if this is the only node.
No-op for now.
53
54
55
|
# File 'lib/zeevex_cluster/election.rb', line 53
def resign!(delay = nil)
@strategy.resign delay
end
|
#strategy ⇒ Object
28
29
30
|
# File 'lib/zeevex_cluster/election.rb', line 28
def strategy
@strategy
end
|