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 |