class MCollective::Runner - mcollective version 2.12.5

# class MCollective::Runner

### Attributes

state[R]

### Public Class Methods

new(configfile) click to toggle source

       # File lib/mcollective/runner.rb
     5 def initialize(configfile)
     6   begin
     7     @config = Config.instance
     8     @config.loadconfig(configfile) unless @config.configured
     9     @config.mode = :server
    10     @stats = PluginManager["global_stats"]
    11     @connection = PluginManager["connector_plugin"]
    12
    13     # @state describes the current contextual state of the MCollective runner.
    14     # Valid states are:
    15     #   :running   - MCollective is alive and receiving messages from the middleware
    16     #   :stopping  - MCollective is shutting down and in the process of terminating
    17     #   :stopped   - MCollective is not running
    18     #   :pausing   - MCollective is going into it's paused state
    19     #   :unpausing - MCollective is waking up from it's paused state
    20     #   :paused    - MCollective is paused and not receiving messages but can be woken up
    21     @state = :stopped
    22     @exit_receiver_thread = false
    23     @registration_thread = nil
    24     @agent_threads = []
    25
    26     @security = PluginManager["security_plugin"]
    27     @security.initiated_by = :node
    28
    29     unless Util.windows?
    30       Signal.trap("USR1") do
    31         Thread.new do
    32           Log.info("Reloading all agents after receiving USR1 signal")
    33           @agents.loadagents
    34         end
    35       end
    36
    37       Signal.trap("USR2") do
    38         Thread.new do
    39           Log.info("Cycling logging level due to USR2 signal")
    40           Log.cycle_level
    41         end
    42       end
    43
    44       Signal.trap("WINCH") do
    45         Thread.new do
    46           Log.info("Reopening logfiles due to WINCH signal")
    47           Log.reopen
    48           Log.info("Reopened logfiles due to WINCH signal")
    49         end
    50       end
    51     else
    52       Util.setup_windows_sleeper
    53     end
    54   rescue => e
    55     Log.error("Failed to initialize MCollective runner.")
    56     Log.error(e)
    57     Log.error(e.backtrace.join("\n\t"))
    58     raise e
    59   end
    60 end

### Public Instance Methods

main_loop() click to toggle source

The main runner loop

        # File lib/mcollective/runner.rb
     69 def main_loop
     70   # Enter the main context
     71   @receiver_thread = start_receiver_thread
     72   loop do
     73     begin
     74       case @state
     75       when :stopping
     76         Log.debug("Stopping MCollective server")
     77
     78         # If soft_shutdown has been enabled we wait for all running agents to
     79         # finish, one way or the other.
     80         if @config.soft_shutdown
     81           soft_shutdown
     82         end
     83
     84         stop_threads
     85         @state = :stopped
     86         return
     87
     88       # When pausing we stop the receiver thread but keep everything else alive
     89       # This means that running agents also run to completion.
     90       when :pausing
     91         Log.debug("Pausing MCollective server")
     92         stop_threads
     93         @state = :paused
     94
     95       when :unpausing
     96         Log.debug("Unpausing MCollective server")
     97         start_receiver_thread
     98       end
     99
    100       # prune dead threads from the agent_threads array
    101       @agent_threads.reject! { |t| !t.alive? }
    102       sleep 0.1
    103     rescue SignalException => e
    104       Log.info("Exiting after signal: #{e}")
    105       stop
    106     rescue => e
    107       Log.error("A failure occurred in the MCollective runner.")
    108       Log.error(e)
    109       Log.error(e.backtrace.join("\n\t"))
    110       stop
    111     end
    112   end
    113 end

pause() click to toggle source

        # File lib/mcollective/runner.rb
    119 def pause
    120   if @state == :running
    121     @state = :pausing
    122   else
    123     Log.error("Cannot pause MCollective while not in a running state")
    124   end
    125 end

resume() click to toggle source

        # File lib/mcollective/runner.rb
    127 def resume
    128   if @state == :paused
    129     @state = :unpausing
    130   else
    131     Log.error("Cannot unpause MCollective when it is not paused")
    132   end
    133 end

run() click to toggle source

Deprecated

       # File lib/mcollective/runner.rb
    63 def run
    64   Log.warn("The #run method has been deprecated. Use #main_loop instead.")
    65   main_loop
    66 end

stop() click to toggle source

        # File lib/mcollective/runner.rb
    115 def stop
    116   @state = :stopping
    117 end