Class: Julewire::Ractor::RemoteRuntime

Inherits:
Object
  • Object
show all
Defined in:
lib/julewire/ractor/remote_runtime.rb

Constant Summary collapse

DEFAULT_REQUEST_TIMEOUT =
1
REQUEST_TIMEOUT =
::Ractor.make_shareable(Object.new)

Instance Method Summary collapse

Constructor Details

#initialize(port:, emit_non_standard_exception_summaries: false) ⇒ RemoteRuntime

Returns a new instance of RemoteRuntime.



9
10
11
12
13
14
15
16
# File 'lib/julewire/ractor/remote_runtime.rb', line 9

def initialize(port:, emit_non_standard_exception_summaries: false)
  @port = port
  @child_stats = ChildStats.new
  @emit_non_standard_exception_summaries = emit_non_standard_exception_summaries
  @request_mutex = Mutex.new
  @timeout_scheduler = ReplyTimeoutScheduler.new(timeout_value: REQUEST_TIMEOUT)
  @execution_boundary = build_execution_boundary
end

Instance Method Details

#after_fork!Object

Raises:

  • (Core::Error)


75
76
77
# File 'lib/julewire/ractor/remote_runtime.rb', line 75

def after_fork!(**)
  raise Core::Error, "Julewire.after_fork! is not available inside Julewire.ractor"
end

#attributesObject



24
# File 'lib/julewire/ractor/remote_runtime.rb', line 24

def attributes = Core::ContextStore.current.attributes_proxy

#carryObject



26
# File 'lib/julewire/ractor/remote_runtime.rb', line 26

def carry = Core::ContextStore.current.carry_proxy

#child_statsObject



38
# File 'lib/julewire/ractor/remote_runtime.rb', line 38

def child_stats = @child_stats.to_h

#closeObject

Raises:

  • (Core::Error)


83
84
85
# File 'lib/julewire/ractor/remote_runtime.rb', line 83

def close(**)
  raise Core::Error, "Julewire.close is not available inside Julewire.ractor; use Julewire.flush instead"
end

#configObject

Raises:

  • (Core::Error)


18
# File 'lib/julewire/ractor/remote_runtime.rb', line 18

def config = raise Core::Error, "Julewire.config is not available inside Julewire.ractor"

#configureObject

Raises:

  • (Core::Error)


20
# File 'lib/julewire/ractor/remote_runtime.rb', line 20

def configure = raise Core::Error, "Julewire.configure is not available inside Julewire.ractor"

#contextObject



22
# File 'lib/julewire/ractor/remote_runtime.rb', line 22

def context = Core::ContextStore.current.context_proxy

#current_executionObject



30
# File 'lib/julewire/ractor/remote_runtime.rb', line 30

def current_execution = current_scope && Core::Execution::View.new(current_scope)

#current_execution?Boolean

Returns:

  • (Boolean)


32
# File 'lib/julewire/ractor/remote_runtime.rb', line 32

def current_execution? = !!current_scope

#emit(record = Core::UNSET, **fields) ⇒ Object



42
43
44
# File 'lib/julewire/ractor/remote_runtime.rb', line 42

def emit(record = Core::UNSET, **fields, &)
  remote_emit(:emit, record, fields, &)
end

#emit_integration(record, enforce_level:) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/julewire/ractor/remote_runtime.rb', line 50

def emit_integration(record, enforce_level:)
  command = enforce_level ? :emit : :emit_without_level
  input = Core::Records::BuildInput.validate_owned(record)
  notify(command, payload: remote_emit_payload(input))
rescue StandardError => e
  @child_stats.message_dropped(e)
end

#emit_summary_record(scope) ⇒ Object



97
98
99
100
101
# File 'lib/julewire/ractor/remote_runtime.rb', line 97

def emit_summary_record(scope)
  notify(:emit_record, payload: serialize_remote(summary_record_input(scope)))
rescue StandardError => e
  @child_stats.message_dropped(e)
end

#emit_without_level(record = Core::UNSET, **fields) ⇒ Object



46
47
48
# File 'lib/julewire/ractor/remote_runtime.rb', line 46

def emit_without_level(record = Core::UNSET, **fields, &)
  remote_emit(:emit_without_level, record, fields, &)
end

#flush(timeout: Core::UNSET) ⇒ Object



69
70
71
72
73
# File 'lib/julewire/ractor/remote_runtime.rb', line 69

def flush(timeout: Core::UNSET)
  timeout = effective_timeout(timeout)
  Core::Validation.validate_timeout!(timeout, name: :timeout)
  request(:flush, timeout: timeout)
end

#healthObject

Raises:

  • (Core::Error)


79
80
81
# File 'lib/julewire/ractor/remote_runtime.rb', line 79

def health
  raise Core::Error, "Julewire.health is not available inside Julewire.ractor"
end

#labelsObject

Raises:

  • (Core::Error)


87
88
89
# File 'lib/julewire/ractor/remote_runtime.rb', line 87

def labels
  raise Core::Error, "Julewire.labels is not available inside Julewire.ractor"
end

#reset!Object



91
92
93
# File 'lib/julewire/ractor/remote_runtime.rb', line 91

def reset!
  Core::ContextStore.reset_current!
end

#reset_child_stats!Object



40
# File 'lib/julewire/ractor/remote_runtime.rb', line 40

def reset_child_stats! = @child_stats.reset!

#reset_facade!Object



95
# File 'lib/julewire/ractor/remote_runtime.rb', line 95

def reset_facade! = reset!

#start_executionObject



36
# File 'lib/julewire/ractor/remote_runtime.rb', line 36

def start_execution(...) = @execution_boundary.start_execution(...)

#summaryObject



28
# File 'lib/julewire/ractor/remote_runtime.rb', line 28

def summary = Core::ContextStore.current.summary_proxy

#with_executionObject



34
# File 'lib/julewire/ractor/remote_runtime.rb', line 34

def with_execution(...) = @execution_boundary.with_execution(...)