Class: ZeevexCluster::Election
- Defined in:
- lib/zeevex_cluster/election.rb
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #campaign! ⇒ Object
-
#initialize(options = {}) ⇒ Election
constructor
A new instance of Election.
- #join ⇒ Object
- #leave ⇒ Object
-
#make_master! ⇒ Object
Make this node the master, returning true if successful.
-
#master ⇒ Object
Return name of master node.
- #master? ⇒ Boolean
- #member? ⇒ Boolean
- #members ⇒ Object
-
#resign!(delay = nil) ⇒ Object
Resign from mastership; returns false if this is the only node.
Methods inherited from Base
#ensure_master, #run_if_master
Methods included from Util::Logging
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( = {}) super raise ArgumentError, 'Must specify :cluster_name' unless [:cluster_name] if [:hooks] add_hooks([:hooks]) end unless (@strategy = [:strategy]) stype = [:strategy_type] || 'cas' @strategy = ZeevexCluster::Strategy.create(stype, {:nodename => .fetch(:nodename, Socket.gethostname), :cluster_name => [:cluster_name], :logger => [:logger]}. merge([:backend_options])) end @strategy.add_hook_observer Proc.new { |*args| hook_observer(*args) } after_initialize end |
Instance Method Details
#campaign! ⇒ Object
53 54 55 56 57 |
# File 'lib/zeevex_cluster/election.rb', line 53 def campaign! @strategy.start unless @strategy.started? # stop sitting out the election @strategy.resign 0 end |
#join ⇒ Object
66 67 68 69 70 |
# File 'lib/zeevex_cluster/election.rb', line 66 def join return if member? @member = true @strategy.start unless @strategy.started? end |
#leave ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/zeevex_cluster/election.rb', line 72 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.
35 36 37 38 39 40 41 42 |
# File 'lib/zeevex_cluster/election.rb', line 35 def make_master! return unless member? if @strategy.steal_election! true else false end end |
#master ⇒ Object
Return name of master node
62 63 64 |
# File 'lib/zeevex_cluster/election.rb', line 62 def master member? && @strategy.master_node && @strategy.master_node[:nodename] end |
#master? ⇒ Boolean
28 29 30 |
# File 'lib/zeevex_cluster/election.rb', line 28 def master? member? && @strategy.am_i_master? end |
#member? ⇒ Boolean
80 81 82 |
# File 'lib/zeevex_cluster/election.rb', line 80 def member? @strategy.member? end |
#members ⇒ Object
84 85 86 |
# File 'lib/zeevex_cluster/election.rb', line 84 def members member? && (@strategy.respond_to?(:members) ? @strategy.members : [@nodename]) end |
#resign!(delay = nil) ⇒ Object
Resign from mastership; returns false if this is the only node.
No-op for now.
49 50 51 |
# File 'lib/zeevex_cluster/election.rb', line 49 def resign!(delay = nil) @strategy.resign delay end |