Class: RightScale::ReenrollManager
- Defined in:
- lib/instance/reenroll_manager.rb
Overview
Tracks reenroll votes and trigger reenroll as necessary
Constant Summary collapse
- REENROLL_THRESHOLD =
Number of votes required to trigger re-enroll
3
- MAXIMUM_REENROLL_DELAY =
Additional number of seconds that should be spent in offline mode before triggering a re-enroll after vote threshold has been reached
900
- RESET_DELAY =
Delay in seconds until votes count is reset if no more votes occur This value should be more than two hours as this is the period at which votes will get generated in offline mode
7200
Class Method Summary collapse
-
.reenroll!(args = nil) ⇒ Object
Trigger reenroll.
-
.reenrolling? ⇒ Boolean
Are we currently reenrolling?.
-
.reset_votes ⇒ Object
Reset votes count.
-
.set_reenrolling ⇒ Object
Set reenrolling flag.
-
.vote ⇒ Object
Vote for re-enrolling, if threshold is reached re-enroll If no vote occurs in the next two hours, then reset counter.
Class Method Details
.reenroll!(args = nil) ⇒ Object
Trigger reenroll
Parameters
- args(String)
-
Arguments to be passed through to rs_reenroll
Return
- true
-
If command ran successfully
- false
-
Otherwise
95 96 97 98 99 100 |
# File 'lib/instance/reenroll_manager.rb', line 95 def self.reenroll!(args=nil) cmd = "rs_reenroll #{args}" cmd += '&' unless RightScale::Platform.windows? AMQP.stop { EM.stop } rescue nil system(cmd) end |
.reenrolling? ⇒ Boolean
Are we currently reenrolling?
Return
- true
-
If we are currently re-enrolling (note: process is going away)
- false
-
Otherwise
45 46 47 |
# File 'lib/instance/reenroll_manager.rb', line 45 def self.reenrolling? @reenrolling end |
.reset_votes ⇒ Object
Reset votes count
Return
- true
-
Always return true
81 82 83 84 85 |
# File 'lib/instance/reenroll_manager.rb', line 81 def self.reset_votes @total_votes = 0 @reset_timer = nil true end |
.set_reenrolling ⇒ Object
Set reenrolling flag
Return
- true
-
Always return true
53 54 55 |
# File 'lib/instance/reenroll_manager.rb', line 53 def self.set_reenrolling @reenrolling = true end |
.vote ⇒ Object
Vote for re-enrolling, if threshold is reached re-enroll If no vote occurs in the next two hours, then reset counter
Return
- true
-
Always return true
62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/instance/reenroll_manager.rb', line 62 def self.vote @total_votes ||= 0 @reenrolling ||= false @total_votes += 1 @reset_timer.cancel if @reset_timer @reset_timer = EM::Timer.new(RESET_DELAY) { reset_votes } if @total_votes >= REENROLL_THRESHOLD && !@reenrolling delay = rand(MAXIMUM_REENROLL_DELAY) Log.info("[re-enroll] Re-enroll threshold reached, shutting down and re-enrolling in #{delay} seconds") set_reenrolling EM::Timer.new(delay) { reenroll! } end true end |