Class: Nonnative::Pool
- Inherits:
-
Object
- Object
- Nonnative::Pool
- Defined in:
- lib/nonnative/pool.rb
Overview
Orchestrates lifecycle for configured processes, servers and services.
A pool is created when start is called and is accessible via pool.
Lifecycle order is important:
- On start: services first, then servers/processes (in parallel port-check threads)
- On stop: processes/servers first, then services
Readiness and shutdown are determined via TCP port checks (Nonnative::Ports#open? / Nonnative::Ports#closed?).
Instance Method Summary collapse
-
#initialize(configuration) ⇒ Pool
constructor
A new instance of Pool.
-
#process_by_name(name) ⇒ Nonnative::Process
Finds a running process runner by configured name.
-
#reset ⇒ void
Resets service proxies in this pool.
-
#rollback ⇒ Array<String>
Stops only runners that have already been instantiated in this pool.
-
#server_by_name(name) ⇒ Nonnative::Server
Finds a running server runner by configured name.
-
#service_by_name(name) ⇒ Nonnative::Service
Finds a running service runner by configured name.
-
#start ⇒ Array<String>
Starts all configured runners and collects lifecycle and readiness errors.
-
#stop ⇒ Array<String>
Stops all configured runners and collects lifecycle and shutdown errors.
Constructor Details
#initialize(configuration) ⇒ Pool
Returns a new instance of Pool.
19 20 21 22 23 24 |
# File 'lib/nonnative/pool.rb', line 19 def initialize(configuration) @configuration = configuration @services = nil @servers = nil @processes = nil end |
Instance Method Details
#process_by_name(name) ⇒ Nonnative::Process
Finds a running process runner by configured name.
82 83 84 |
# File 'lib/nonnative/pool.rb', line 82 def process_by_name(name) processes[runner_index(configuration.processes, name)].first end |
#reset ⇒ void
This method returns an undefined value.
Resets service proxies in this pool.
This is used by the Cucumber @reset hook and is safe to call any time after the pool is created.
109 110 111 |
# File 'lib/nonnative/pool.rb', line 109 def reset services.each { |s| s.proxy.reset } end |
#rollback ⇒ Array<String>
Stops only runners that have already been instantiated in this pool.
This is used to rollback partial startup after a failed #start without constructing new runner wrappers as a side effect.
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/nonnative/pool.rb', line 66 def rollback errors = [] [existing_processes, existing_servers].each do |runners| errors.concat(run_lifecycle_checks(runners, :stop, :closed?, :rollback)) end errors.concat(service_lifecycle(existing_services, :stop, :stop)) errors end |
#server_by_name(name) ⇒ Nonnative::Server
Finds a running server runner by configured name.
91 92 93 |
# File 'lib/nonnative/pool.rb', line 91 def server_by_name(name) servers[runner_index(configuration.servers, name)].first end |
#service_by_name(name) ⇒ Nonnative::Service
Finds a running service runner by configured name.
100 101 102 |
# File 'lib/nonnative/pool.rb', line 100 def service_by_name(name) services[runner_index(configuration.services, name)] end |
#start ⇒ Array<String>
Starts all configured runners and collects lifecycle and readiness errors.
Services are started first (proxy-only) and checked for opt-in readiness, then servers and processes are started and checked for readiness. Each readiness failure is described with the runner and, for a process that exited early, its termination detail.
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/nonnative/pool.rb', line 33 def start errors = [] errors.concat(service_lifecycle(services, :start, :start)) service_readiness_errors = check_service_readiness(services) errors.concat(service_readiness_errors) return errors if service_readiness_errors.any? [servers, processes].each { |runners| errors.concat(run_lifecycle_checks(runners, :start, :open?, :start)) } errors end |
#stop ⇒ Array<String>
Stops all configured runners and collects lifecycle and shutdown errors.
Processes and servers are stopped first and checked for shutdown, then services are stopped (proxy-only).
51 52 53 54 55 56 57 58 |
# File 'lib/nonnative/pool.rb', line 51 def stop errors = [] [processes, servers].each { |runners| errors.concat(run_lifecycle_checks(runners, :stop, :closed?, :stop)) } errors.concat(service_lifecycle(services, :stop, :stop)) errors end |