Class: Restate::DurableCallFuture

Inherits:
DurableFuture show all
Defined in:
lib/restate/durable_future.rb

Overview

A durable future for service/object/workflow calls. Adds invocation_id and cancel on top of DurableFuture. Returned by ctx.service_call, ctx.object_call, ctx.workflow_call.

Instance Attribute Summary

Attributes inherited from DurableFuture

#handle

Instance Method Summary collapse

Methods inherited from DurableFuture

#completed?, #or_timeout

Constructor Details

#initialize(ctx, result_handle, invocation_id_handle, output_serde:) ⇒ DurableCallFuture

Returns a new instance of DurableCallFuture.



67
68
69
70
71
72
73
# File 'lib/restate/durable_future.rb', line 67

def initialize(ctx, result_handle, invocation_id_handle, output_serde:)
  super(ctx, result_handle)
  @invocation_id_handle = invocation_id_handle
  @output_serde = output_serde
  @invocation_id_resolved = false
  @invocation_id_value = nil
end

Instance Method Details

#awaitObject

Block until the result is available and return it. Deserializes via output_serde. Caches both successes and TerminalError failures across calls.

Raises:

  • (@error)


77
78
79
80
81
82
# File 'lib/restate/durable_future.rb', line 77

def await
  resolve_call! unless @resolved
  raise @error if @error

  @value
end

#cancelObject

Cancel the remote invocation.



113
114
115
# File 'lib/restate/durable_future.rb', line 113

def cancel
  @ctx.cancel_invocation(invocation_id)
end

#invocation_idString

Returns the invocation ID of the remote call. Lazily resolved.

Returns:

  • (String)

    the invocation ID



104
105
106
107
108
109
110
# File 'lib/restate/durable_future.rb', line 104

def invocation_id
  unless @invocation_id_resolved
    @invocation_id_value = @ctx.resolve_handle(@invocation_id_handle)
    @invocation_id_resolved = true
  end
  @invocation_id_value
end