puma 4.3.5 → 6.0.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puma might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/History.md +1639 -519
- data/LICENSE +23 -20
- data/README.md +130 -42
- data/bin/puma-wild +3 -9
- data/docs/architecture.md +63 -26
- data/docs/compile_options.md +55 -0
- data/docs/deployment.md +60 -69
- data/docs/fork_worker.md +31 -0
- data/docs/images/puma-connection-flow-no-reactor.png +0 -0
- data/docs/images/puma-connection-flow.png +0 -0
- data/docs/images/puma-general-arch.png +0 -0
- data/docs/jungle/README.md +9 -0
- data/{tools → docs}/jungle/rc.d/README.md +1 -1
- data/{tools → docs}/jungle/rc.d/puma +2 -2
- data/{tools → docs}/jungle/rc.d/puma.conf +0 -0
- data/docs/kubernetes.md +66 -0
- data/docs/nginx.md +2 -2
- data/docs/plugins.md +15 -15
- data/docs/rails_dev_mode.md +28 -0
- data/docs/restart.md +46 -23
- data/docs/signals.md +13 -11
- data/docs/stats.md +142 -0
- data/docs/systemd.md +85 -128
- data/docs/testing_benchmarks_local_files.md +150 -0
- data/docs/testing_test_rackup_ci_files.md +36 -0
- data/ext/puma_http11/PumaHttp11Service.java +2 -4
- data/ext/puma_http11/ext_help.h +1 -1
- data/ext/puma_http11/extconf.rb +56 -11
- data/ext/puma_http11/http11_parser.c +69 -58
- data/ext/puma_http11/http11_parser.h +2 -2
- data/ext/puma_http11/http11_parser.java.rl +3 -3
- data/ext/puma_http11/http11_parser.rl +3 -3
- data/ext/puma_http11/http11_parser_common.rl +3 -3
- data/ext/puma_http11/mini_ssl.c +322 -130
- data/ext/puma_http11/no_ssl/PumaHttp11Service.java +15 -0
- data/ext/puma_http11/org/jruby/puma/Http11.java +6 -6
- data/ext/puma_http11/org/jruby/puma/Http11Parser.java +52 -52
- data/ext/puma_http11/org/jruby/puma/MiniSSL.java +241 -96
- data/ext/puma_http11/puma_http11.c +47 -57
- data/lib/puma/app/status.rb +53 -37
- data/lib/puma/binder.rb +232 -119
- data/lib/puma/cli.rb +33 -33
- data/lib/puma/client.rb +197 -101
- data/lib/puma/cluster/worker.rb +175 -0
- data/lib/puma/cluster/worker_handle.rb +97 -0
- data/lib/puma/cluster.rb +224 -229
- data/lib/puma/commonlogger.rb +2 -2
- data/lib/puma/configuration.rb +112 -87
- data/lib/puma/const.rb +30 -25
- data/lib/puma/control_cli.rb +99 -79
- data/lib/puma/detect.rb +31 -2
- data/lib/puma/dsl.rb +426 -110
- data/lib/puma/error_logger.rb +112 -0
- data/lib/puma/events.rb +16 -115
- data/lib/puma/io_buffer.rb +44 -2
- data/lib/puma/jruby_restart.rb +2 -59
- data/lib/puma/json_serialization.rb +96 -0
- data/lib/puma/launcher/bundle_pruner.rb +104 -0
- data/lib/puma/launcher.rb +170 -148
- data/lib/puma/log_writer.rb +137 -0
- data/lib/puma/minissl/context_builder.rb +35 -19
- data/lib/puma/minissl.rb +213 -55
- data/lib/puma/null_io.rb +18 -1
- data/lib/puma/plugin/tmp_restart.rb +1 -1
- data/lib/puma/plugin.rb +3 -12
- data/lib/puma/rack/builder.rb +5 -9
- data/lib/puma/rack/urlmap.rb +0 -0
- data/lib/puma/rack_default.rb +1 -1
- data/lib/puma/reactor.rb +85 -369
- data/lib/puma/request.rb +644 -0
- data/lib/puma/runner.rb +83 -77
- data/lib/puma/server.rb +303 -773
- data/lib/puma/single.rb +18 -74
- data/lib/puma/state_file.rb +45 -8
- data/lib/puma/systemd.rb +47 -0
- data/lib/puma/thread_pool.rb +136 -68
- data/lib/puma/util.rb +21 -4
- data/lib/puma.rb +54 -5
- data/lib/rack/handler/puma.rb +11 -12
- data/tools/{docker/Dockerfile → Dockerfile} +1 -1
- data/tools/trickletest.rb +0 -0
- metadata +36 -28
- data/docs/tcp_mode.md +0 -96
- data/ext/puma_http11/io_buffer.c +0 -155
- data/ext/puma_http11/org/jruby/puma/IOBuffer.java +0 -72
- data/lib/puma/accept_nonblock.rb +0 -29
- data/lib/puma/tcp_logger.rb +0 -41
- data/tools/jungle/README.md +0 -19
- data/tools/jungle/init.d/README.md +0 -61
- data/tools/jungle/init.d/puma +0 -421
- data/tools/jungle/init.d/run-puma +0 -18
- data/tools/jungle/upstart/README.md +0 -61
- data/tools/jungle/upstart/puma-manager.conf +0 -31
- data/tools/jungle/upstart/puma.conf +0 -69
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Puma
|
4
|
+
class Cluster < Runner
|
5
|
+
#—————————————————————— DO NOT USE — this class is for internal use only ———
|
6
|
+
|
7
|
+
|
8
|
+
# This class represents a worker process from the perspective of the puma
|
9
|
+
# master process. It contains information about the process and its health
|
10
|
+
# and it exposes methods to control the process via IPC. It does not
|
11
|
+
# include the actual logic executed by the worker process itself. For that,
|
12
|
+
# see Puma::Cluster::Worker.
|
13
|
+
class WorkerHandle # :nodoc:
|
14
|
+
def initialize(idx, pid, phase, options)
|
15
|
+
@index = idx
|
16
|
+
@pid = pid
|
17
|
+
@phase = phase
|
18
|
+
@stage = :started
|
19
|
+
@signal = "TERM"
|
20
|
+
@options = options
|
21
|
+
@first_term_sent = nil
|
22
|
+
@started_at = Time.now
|
23
|
+
@last_checkin = Time.now
|
24
|
+
@last_status = {}
|
25
|
+
@term = false
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_reader :index, :pid, :phase, :signal, :last_checkin, :last_status, :started_at
|
29
|
+
|
30
|
+
# @version 5.0.0
|
31
|
+
attr_writer :pid, :phase
|
32
|
+
|
33
|
+
def booted?
|
34
|
+
@stage == :booted
|
35
|
+
end
|
36
|
+
|
37
|
+
def uptime
|
38
|
+
Time.now - started_at
|
39
|
+
end
|
40
|
+
|
41
|
+
def boot!
|
42
|
+
@last_checkin = Time.now
|
43
|
+
@stage = :booted
|
44
|
+
end
|
45
|
+
|
46
|
+
def term!
|
47
|
+
@term = true
|
48
|
+
end
|
49
|
+
|
50
|
+
def term?
|
51
|
+
@term
|
52
|
+
end
|
53
|
+
|
54
|
+
def ping!(status)
|
55
|
+
@last_checkin = Time.now
|
56
|
+
captures = status.match(/{ "backlog":(?<backlog>\d*), "running":(?<running>\d*), "pool_capacity":(?<pool_capacity>\d*), "max_threads": (?<max_threads>\d*), "requests_count": (?<requests_count>\d*) }/)
|
57
|
+
@last_status = captures.names.inject({}) do |hash, key|
|
58
|
+
hash[key.to_sym] = captures[key].to_i
|
59
|
+
hash
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# @see Puma::Cluster#check_workers
|
64
|
+
# @version 5.0.0
|
65
|
+
def ping_timeout
|
66
|
+
@last_checkin +
|
67
|
+
(booted? ?
|
68
|
+
@options[:worker_timeout] :
|
69
|
+
@options[:worker_boot_timeout]
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
def term
|
74
|
+
begin
|
75
|
+
if @first_term_sent && (Time.now - @first_term_sent) > @options[:worker_shutdown_timeout]
|
76
|
+
@signal = "KILL"
|
77
|
+
else
|
78
|
+
@term ||= true
|
79
|
+
@first_term_sent ||= Time.now
|
80
|
+
end
|
81
|
+
Process.kill @signal, @pid if @pid
|
82
|
+
rescue Errno::ESRCH
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def kill
|
87
|
+
@signal = 'KILL'
|
88
|
+
term
|
89
|
+
end
|
90
|
+
|
91
|
+
def hup
|
92
|
+
Process.kill "HUP", @pid
|
93
|
+
rescue Errno::ESRCH
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|