From 524dde24dad2a2fbaa8091d66a70c14ffa14d614 Mon Sep 17 00:00:00 2001 From: Alex Pecsi Date: Sun, 3 Jun 2018 23:43:16 +0100 Subject: [PATCH] Added manual service stopping --- config/config.yml | 2 +- lib/console/mode_core.rb | 2 +- lib/core.rb | 20 ++++++++++++++++++-- lib/core/state.rb | 6 ++++++ lib/service/framework.rb | 4 ++-- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/config/config.yml b/config/config.yml index 8bff202..18e1c9d 100644 --- a/config/config.yml +++ b/config/config.yml @@ -4,4 +4,4 @@ watch_dir: packages scan_interval: 5 :console: - mode: dumb + mode: normal diff --git a/lib/console/mode_core.rb b/lib/console/mode_core.rb index 7d33314..0364790 100644 --- a/lib/console/mode_core.rb +++ b/lib/console/mode_core.rb @@ -39,7 +39,7 @@ def list_services(out, framework) end def stop_service(out, framework, service_id) - framework.stop_service service_id + framework.stop_service service_id, true end def start_service(out, framework, service_id) diff --git a/lib/core.rb b/lib/core.rb index 33e620a..a21e552 100644 --- a/lib/core.rb +++ b/lib/core.rb @@ -166,6 +166,8 @@ def process_stages(stages) end + satisfied_dependencies = [] + registrations = add_requests.map do |add_request| @service_registry.register_service(*(add_request.drop(1))) { |registration| if has_required_dependencies? registration.service @@ -177,6 +179,8 @@ def process_stages(stages) dependants(registration.service)[:required].each do |dependant| if has_required_dependencies? dependant.service and dependant.service.state? RunState::INSTALLED dependant.service.set_state_resolved + + satisfied_dependencies << dependant end end } @@ -186,6 +190,10 @@ def process_stages(stages) start_service registration end + satisfied_dependencies.each do |dependant| + start_service dependant + end + # Process the remaining stages process_stages stages end @@ -224,6 +232,12 @@ def update_status(service) def start_service(service_registration) service = service_registration[:service] + # If the service had been stopped manually before the start, we'll first need to check if all required dependencies + # are present before proceeding. + if service.state? RunState::STOPPED and has_required_dependencies? service + service.set_state_resolved + end + if service.state? RunState::RESOLVED service.set_state_starting @@ -260,7 +274,7 @@ def start_service(service_registration) end end - def stop_service(service_registration) + def stop_service(service_registration, requested = false) service = service_registration[:service] if service.state? RunState::ACTIVE @@ -280,7 +294,9 @@ def stop_service(service_registration) service.stop - if has_required_dependencies?(service) + if requested + service.set_state_stopped + elsif has_required_dependencies?(service) service.set_state_resolved else service.set_state_installed diff --git a/lib/core/state.rb b/lib/core/state.rb index 39fe0c3..a315272 100644 --- a/lib/core/state.rb +++ b/lib/core/state.rb @@ -6,6 +6,7 @@ module RunState STARTING = :starting ACTIVE = :active STOPPING = :stopping + STOPPED = :stopped def set_state_uninstalled(verbose_state = "") @_state = RunState::UNINSTALLED @@ -37,6 +38,11 @@ def set_state_starting(verbose_state = "") @_verbose_state = verbose_state end + def set_state_stopped(verbose_state = "") + @_state = RunState::STOPPED + @_verbose_state = verbose_state + end + # Query the current state def state @_state || RunState::INSTALLED diff --git a/lib/service/framework.rb b/lib/service/framework.rb index 2fff807..d51829f 100644 --- a/lib/service/framework.rb +++ b/lib/service/framework.rb @@ -48,8 +48,8 @@ def start_service(service_id) @core.start_service service_registration unless service_registration.nil? end - def stop_service(service_id) + def stop_service(service_id, requested = false) service_registration = @core.service_registry.find { |service| service.service_id == service_id.to_sym } - @core.stop_service service_registration unless service_registration.nil? + @core.stop_service service_registration, requested unless service_registration.nil? end end