Module: Temporalio::Workflow::Unsafe

Defined in:
lib/temporalio/workflow.rb

Overview

Unsafe module contains only-in-workflow methods that are considered unsafe. These should not be used unless the consequences are understood.

Class Method Summary collapse

Class Method Details

.durable_scheduler_disabled ⇒ Object

Run a block of code with the durable/deterministic workflow Fiber scheduler off. This means fallback to default fiber scheduler and no workflow helpers will be available in the block. This is usually only needed in advanced situations where a third party library does something like use "Timeout" in a way that shouldn't be made durable.

If this is invoked outside of a workflow, it just runs the block.

This implies illegal_call_tracing_disabled.



623
624
625
626
627
628
629
# File 'lib/temporalio/workflow.rb', line 623

def self.durable_scheduler_disabled(&)
  if Workflow.in_workflow?
    Workflow._current.durable_scheduler_disabled(&)
  else
    yield
  end
end

.illegal_call_tracing_disabled { ... } ⇒ Object

Run a block of code with illegal call tracing disabled. Users should be cautious about using this as it can often signify unsafe code.

If this is invoked outside of a workflow, it just runs the block.

Yields:

  • Block to run with call tracing disabled

Returns:

  • (Object) —

    Result of the block.



594
595
596
597
598
599
600
# File 'lib/temporalio/workflow.rb', line 594

def self.illegal_call_tracing_disabled(&)
  if Workflow.in_workflow?
    Workflow._current.illegal_call_tracing_disabled(&)
  else
    yield
  end
end

.io_enabled ⇒ Object

Run a block of code with IO enabled. Specifically this allows the io_wait call of the fiber scheduler to work. Users should be cautious about using this as it can often signify unsafe code. Note, this is often only applicable to network code as file IO and most process-based IO does not go through scheduler io_wait.

If this is invoked outside of a workflow, it just runs the block.



607
608
609
610
611
612
613
# File 'lib/temporalio/workflow.rb', line 607

def self.io_enabled(&)
  if Workflow.in_workflow?
    Workflow._current.io_enabled(&)
  else
    yield
  end
end

.replaying? ⇒ Boolean

Returns True if the workflow is replaying (including during queries and update validators), false otherwise. Most code should not check this value.

Returns:

  • (Boolean) —

    True if the workflow is replaying (including during queries and update validators), false otherwise. Most code should not check this value.



576
577
578
# File 'lib/temporalio/workflow.rb', line 576

def self.replaying?
  Workflow._current.replaying?
end

.replaying_history_events? ⇒ Boolean

Returns True if the workflow is replaying history events (excluding queries and update validators), false otherwise. Most code should not check this value.

Returns:

  • (Boolean) —

    True if the workflow is replaying history events (excluding queries and update validators), false otherwise. Most code should not check this value.



582
583
584
# File 'lib/temporalio/workflow.rb', line 582

def self.replaying_history_events?
  Workflow._current.replaying_history_events?
end