Class: Daemon::Runner::StopService

Inherits:
Object
  • Object
show all
Includes:
Utils::Loggable
Defined in:
lib/onapp/engine/runner/stop_service.rb

Constant Summary

STEP =
15

Instance Attribute Summary

Attributes included from Utils::Loggable

#logger

Instance Method Summary (collapse)

Methods included from Utils::Loggable

#debug, #error, #fatal, #info, #lwarn

Constructor Details

- (StopService) initialize(logger = Daemon.logger)

Returns a new instance of StopService



10
11
12
13
14
# File 'lib/onapp/engine/runner/stop_service.rb', line 10

def initialize(logger = Daemon.logger)
  @logger = logger
  @facility = "stop_service"
  @mutex = Mutex.new
end

Instance Method Details

- (Object) cleanup



54
55
56
57
58
59
60
# File 'lib/onapp/engine/runner/stop_service.rb', line 54

def cleanup
  Daemon.delete_pid
  if File.exists?(Daemon.unix_socket)
    File.delete(Daemon.unix_socket)
  end
  Redis::FadingValue.clear
end

- (Object) perform(force = false, blocking = true)



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/onapp/engine/runner/stop_service.rb', line 16

def perform(force = false, blocking = true)
  debug { "Trying to lock stop_service. force: #{force.inspect}; blocking: #{blocking.inspect}; Thread: #{Thread.current.inspect}\n#{Thread.current.backtrace[0..15].join("\n")}" }

  if blocking
    @mutex.lock
  else
    return unless @mutex.try_lock
  end

  begin
    debug { "Locked! #{Thread.current.inspect}" }

    debug { "reactor_running?: #{::EM.reactor_running?.inspect}" }

    info { force ? "Performing force stop" : "Performing graceful stop" }

    unless force
      result = wait { unfinished_activities.none? }
      info { result ? "Workers finished" : "Timeout!" }
    end

    if force || !result
      info { "Cancelling activity..." }
      Daemon.callbacks.invoke_cancel_activity
    end

    info { "Cleanup..." }
    cleanup

    info { "Exiting..." }
  ensure
    exit! 0
  end

rescue => ex
  Daemon.logger.log_exception(ex)
end

- (Object) unfinished_activities



62
63
64
65
66
67
68
69
70
# File 'lib/onapp/engine/runner/stop_service.rb', line 62

def unfinished_activities
  Daemon::Supervision::Registry.workers(Daemon::Supervision::Registry.id).select do |registry|
    if registry.size > 0
      Daemon.logger.info("#{registry.size} workers busy in #{registry.key}")

      true
    end
  end
end