raptor 0.22.3 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +46 -0
- data/Dockerfile +10 -2
- data/README.md +183 -61
- data/docs/assets/profile_picture.png +0 -0
- data/docs/assets/startup_output.svg +37 -0
- data/docs/raptor-vs-puma.md +104 -424
- data/docs/talk.md +1388 -0
- data/ext/raptor_bpf/reuseport_select.bpf.c +18 -9
- data/ext/raptor_http/extconf.rb +2 -0
- data/ext/raptor_http/raptor_http.c +165 -234
- data/ext/raptor_http2/raptor_http2.c +272 -223
- data/ext/raptor_native/raptor_native.c +38 -20
- data/lib/rackup/handler/raptor.rb +14 -12
- data/lib/raptor/binder.rb +12 -12
- data/lib/raptor/cli.rb +19 -18
- data/lib/raptor/cluster.rb +120 -74
- data/lib/raptor/control_server.rb +5 -2
- data/lib/raptor/detached_body.rb +6 -2
- data/lib/raptor/http.rb +7 -6
- data/lib/raptor/http1.rb +281 -234
- data/lib/raptor/http2.rb +356 -276
- data/lib/raptor/plugin.rb +98 -0
- data/lib/raptor/reactor.rb +138 -148
- data/lib/raptor/reuseport_bpf.rb +62 -38
- data/lib/raptor/server.rb +45 -34
- data/lib/raptor/stats.rb +15 -3
- data/lib/raptor/thread_locals.rb +4 -3
- data/lib/raptor/version.rb +1 -1
- data/sig/generated/rackup/handler/raptor.rbs +2 -1
- data/sig/generated/raptor/binder.rbs +9 -9
- data/sig/generated/raptor/cli.rbs +6 -6
- data/sig/generated/raptor/cluster.rbs +18 -5
- data/sig/generated/raptor/control_server.rbs +2 -1
- data/sig/generated/raptor/detached_body.rbs +5 -1
- data/sig/generated/raptor/http.rbs +3 -5
- data/sig/generated/raptor/http1.rbs +119 -102
- data/sig/generated/raptor/http2.rbs +204 -190
- data/sig/generated/raptor/plugin.rbs +52 -0
- data/sig/generated/raptor/reactor.rbs +107 -118
- data/sig/generated/raptor/reuseport_bpf.rbs +54 -17
- data/sig/generated/raptor/server.rbs +26 -26
- data/sig/generated/raptor/stats.rbs +3 -2
- data/sig/generated/raptor/thread_locals.rbs +4 -3
- metadata +6 -2
- data/docs/brisrails-talk.md +0 -2398
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# rbs_inline: enabled
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Raptor
|
|
5
|
+
# An extension, loaded from `raptor/plugin/<name>` or
|
|
6
|
+
# registered explicitly by application code.
|
|
7
|
+
#
|
|
8
|
+
class Plugin
|
|
9
|
+
class UnknownPlugin < LoadError; end
|
|
10
|
+
|
|
11
|
+
# @rbs self.@registry: Hash[String, singleton(Plugin)]
|
|
12
|
+
@registry = {}
|
|
13
|
+
|
|
14
|
+
# Registers a plugin class under a name.
|
|
15
|
+
#
|
|
16
|
+
# @rbs (String | Symbol name, singleton(Plugin) plugin) -> void
|
|
17
|
+
def self.register(name, plugin)
|
|
18
|
+
@registry[name.to_s] = plugin
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Defines and registers a plugin without a named subclass.
|
|
22
|
+
#
|
|
23
|
+
# @rbs (String | Symbol name) { () -> void } -> singleton(Plugin)
|
|
24
|
+
def self.create(name, &block)
|
|
25
|
+
plugin = Class.new(self, &block)
|
|
26
|
+
register(name, plugin)
|
|
27
|
+
plugin
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Loads a registered plugin, requiring its conventional path if needed.
|
|
31
|
+
#
|
|
32
|
+
# @rbs (String | Symbol name) -> Plugin
|
|
33
|
+
def self.load(name)
|
|
34
|
+
name = name.to_s
|
|
35
|
+
path = "raptor/plugin/#{name}"
|
|
36
|
+
unless @registry.key?(name)
|
|
37
|
+
begin
|
|
38
|
+
require path
|
|
39
|
+
rescue LoadError => error
|
|
40
|
+
raise UnknownPlugin, "Unable to find plugin #{name.inspect}" if error.path == path
|
|
41
|
+
|
|
42
|
+
raise
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
plugin = @registry[name]
|
|
47
|
+
raise UnknownPlugin, "#{path} did not register plugin #{name.inspect}" unless plugin
|
|
48
|
+
|
|
49
|
+
plugin.new
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# @rbs @threads: Array[Thread]?
|
|
53
|
+
|
|
54
|
+
# Starts in the master before workers fork. Override to open resources
|
|
55
|
+
# and append callbacks to the cluster's lifecycle hook arrays.
|
|
56
|
+
#
|
|
57
|
+
# @rbs (Cluster cluster) -> void
|
|
58
|
+
def start(cluster)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Stops in the master after workers exit, including before hot restart.
|
|
62
|
+
# Also called if startup fails, so resources may be only partly opened.
|
|
63
|
+
#
|
|
64
|
+
# @rbs () -> void
|
|
65
|
+
def stop
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Runs a block on a master-owned thread. Raptor stops and joins these
|
|
69
|
+
# threads after calling `stop`; use `ensure` in the block for cleanup.
|
|
70
|
+
#
|
|
71
|
+
# @rbs () { () -> void } -> Thread
|
|
72
|
+
def in_background(&block)
|
|
73
|
+
@threads ||= []
|
|
74
|
+
@threads << Thread.new do
|
|
75
|
+
Thread.current.name = "Plugin #{self.class}"
|
|
76
|
+
block.call
|
|
77
|
+
end
|
|
78
|
+
@threads.last
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Calls the plugin's stop callback and joins its background threads.
|
|
82
|
+
#
|
|
83
|
+
# @rbs () -> void
|
|
84
|
+
def shutdown
|
|
85
|
+
stop
|
|
86
|
+
ensure
|
|
87
|
+
threads = @threads || []
|
|
88
|
+
threads.each(&:kill)
|
|
89
|
+
error = nil
|
|
90
|
+
threads.each do |thread|
|
|
91
|
+
thread.join
|
|
92
|
+
rescue StandardError => thread_error
|
|
93
|
+
error ||= thread_error
|
|
94
|
+
end
|
|
95
|
+
raise error if error
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|