Module: Julewire::Ractor::Bridge
- Defined in:
- lib/julewire/ractor/bridge.rb,
lib/julewire/ractor/bridge/stats.rb,
lib/julewire/ractor/bridge/bridge_thread.rb,
lib/julewire/ractor/bridge/runtime_validation.rb
Overview
Experimental bridge that forwards ractor records back to a parent runtime.
Defined Under Namespace
Modules: BridgeThread, RuntimeValidation, Stats
Class Method Summary
collapse
Class Method Details
.after_fork! ⇒ Object
49
|
# File 'lib/julewire/ractor/bridge.rb', line 49
def after_fork! = Stats.after_fork!
|
.before_fork! ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/julewire/ractor/bridge.rb', line 51
def before_fork!
active_bridges = health.fetch(:active_threads)
if active_bridges.positive?
raise UnsafeForkError,
"cannot fork while #{active_bridges} Julewire ractor bridge thread(s) are active"
end
return if ::Ractor.count.eql?(1)
raise UnsafeForkError, "cannot fork while non-main Ractors are active"
end
|
.enabled? ⇒ Boolean
18
|
# File 'lib/julewire/ractor/bridge.rb', line 18
def enabled? = ENABLED.get
|
.health ⇒ Object
42
|
# File 'lib/julewire/ractor/bridge.rb', line 42
def health = Stats.health
|
.opt_in! ⇒ Object
14
15
16
|
# File 'lib/julewire/ractor/bridge.rb', line 14
def opt_in!
ENABLED.set(true)
end
|
.reset! ⇒ Object
44
45
46
47
|
# File 'lib/julewire/ractor/bridge.rb', line 44
def reset!
ENABLED.set(false)
Stats.reset!
end
|
.start(args:, name:, runtime:) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/julewire/ractor/bridge.rb', line 20
def start(args:, name:, runtime:, &)
unless enabled?
raise Core::Error, "Julewire.ractor is experimental; call Julewire.enable_experimental_ractor! first"
end
RuntimeValidation.validate!(runtime)
envelope = Core::Propagation.capture_local
body = ::Ractor.shareable_proc(&)
port = ::Ractor::Port.new
ractor = spawn_ractor(
args: args,
name: name,
port: port,
envelope: envelope,
body: body,
emit_non_standard_exception_summaries: runtime.config.emit_non_standard_exception_summaries
)
start_bridge(port: port, runtime: runtime, ractor: ractor)
ractor
end
|