Current section

Files

Jump to
temporal_sdk src api temporal_sdk_api_poll.erl
Raw

src/api/temporal_sdk_api_poll.erl

-module(temporal_sdk_api_poll).
% elp:ignore W0012 W0040
-moduledoc false.
-export([
poll_activity_task_queue/1,
poll_nexus_task_queue/1,
poll_workflow_task_queue/1,
poll_workflow_sticky_queue/1,
shutdown_worker/1
]).
-spec poll_activity_task_queue(ApiContext :: temporal_sdk_api:context()) ->
temporal_sdk_client:msg_result().
poll_activity_task_queue(ApiContext) ->
#{
worker_opts := #{
namespace := Namespace,
task_queue := TaskQueue,
worker_version := WorkerVersion
}
} = ApiContext,
Msg =
temporal_sdk_api:put_identity(
ApiContext,
'temporal.api.workflowservice.v1.PollActivityTaskQueueRequest',
#{
namespace => Namespace,
task_queue => #{name => TaskQueue, kind => 'TASK_QUEUE_KIND_NORMAL'},
% TODO: consider adding task_queue_metadata => #{max_tasks_per_second => ...},
worker_version_capabilities => WorkerVersion
}
),
temporal_sdk_api:request('PollActivityTaskQueue', ApiContext, Msg, msg).
-spec poll_nexus_task_queue(ApiContext :: temporal_sdk_api:context()) ->
temporal_sdk_client:msg_result().
poll_nexus_task_queue(ApiContext) ->
#{
worker_opts := #{
namespace := Namespace,
task_queue := TaskQueue,
worker_version := WorkerVersion
}
} = ApiContext,
Msg =
temporal_sdk_api:put_identity(
ApiContext,
'temporal.api.workflowservice.v1.PollNexusTaskQueueRequest',
#{
namespace => Namespace,
task_queue => #{name => TaskQueue, kind => 'TASK_QUEUE_KIND_NORMAL'},
worker_version_capabilities => WorkerVersion
}
),
temporal_sdk_api:request('PollNexusTaskQueue', ApiContext, Msg, msg).
-spec poll_workflow_task_queue(ApiContext :: temporal_sdk_api:context()) ->
temporal_sdk_client:msg_result().
poll_workflow_task_queue(ApiContext) ->
#{
worker_opts := #{
task_queue := Name, namespace := Namespace, worker_version := WorkerVersion
}
} = ApiContext,
Msg =
temporal_sdk_api:put_identity(
ApiContext,
'temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest',
#{
namespace => Namespace,
task_queue => #{name => Name, kind => 'TASK_QUEUE_KIND_NORMAL'},
worker_version_capabilities => WorkerVersion
}
),
temporal_sdk_api:request('PollWorkflowTaskQueue', ApiContext, Msg, msg).
-spec poll_workflow_sticky_queue(ApiContext :: temporal_sdk_api:context()) ->
temporal_sdk_client:msg_result().
poll_workflow_sticky_queue(#{task_opts := #{sticky_attributes := {_, SA}}} = ApiContext) ->
#{worker_opts := #{namespace := Namespace, worker_version := WorkerVersion}} = ApiContext,
#{worker_task_queue := StickyTaskQueue} = SA,
Msg =
temporal_sdk_api:put_identity(
ApiContext,
'temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest',
#{
namespace => Namespace,
task_queue => StickyTaskQueue,
worker_version_capabilities => WorkerVersion
}
),
temporal_sdk_api:request('PollWorkflowTaskQueue', ApiContext, Msg, msg).
-spec shutdown_worker(ApiContext :: temporal_sdk_api:context()) ->
temporal_sdk_client:cast_result().
shutdown_worker(ApiContext) ->
#{
worker_opts := #{namespace := Namespace},
task_opts := #{sticky_attributes := {Type, #{worker_task_queue := #{name := Name}}}}
} = ApiContext,
Reason =
case Type of
local -> "executor shutdown";
pool -> "worker shutdown"
end,
Msg =
temporal_sdk_api:put_identity(
ApiContext,
'temporal.api.workflowservice.v1.ShutdownWorkerRequest',
#{
namespace => Namespace,
sticky_task_queue => Name,
reason => Reason
}
),
temporal_sdk_api:request('ShutdownWorker', ApiContext, Msg, cast).