Class: Legion::Cluster::Leader

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/cluster/leader.rb

Constant Summary collapse

HEARTBEAT_INTERVAL =

seconds

10
LOCK_NAME =
'legion_leader'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node_id: SecureRandom.uuid) ⇒ Leader

Returns a new instance of Leader.



11
12
13
14
15
16
# File 'lib/legion/cluster/leader.rb', line 11

def initialize(node_id: SecureRandom.uuid)
  @node_id = node_id
  @is_leader = false
  @heartbeat_thread = nil
  @running = false
end

Instance Attribute Details

#is_leaderObject (readonly)

Returns the value of attribute is_leader.



9
10
11
# File 'lib/legion/cluster/leader.rb', line 9

def is_leader
  @is_leader
end

#node_idObject (readonly)

Returns the value of attribute node_id.



9
10
11
# File 'lib/legion/cluster/leader.rb', line 9

def node_id
  @node_id
end

Instance Method Details

#leader?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/legion/cluster/leader.rb', line 29

def leader?
  @is_leader
end

#startObject



18
19
20
21
# File 'lib/legion/cluster/leader.rb', line 18

def start
  @running = true
  @heartbeat_thread = Thread.new { election_loop }
end

#stopObject



23
24
25
26
27
# File 'lib/legion/cluster/leader.rb', line 23

def stop
  @running = false
  @heartbeat_thread&.join(HEARTBEAT_INTERVAL + 2)
  resign if @is_leader
end