feat: refresh timeout (#495)

* feat: show timeout on step run

* feat: refresh timeout

* fix: increment timeout from last time

* feat: add step run event for timeout refresh

* chore: generate

* feat: add refreshing timeouts docs section

* chore: linting

* feat: go client

* chore: generate

* chore: generate

* fix: test context

* chore: generate

* fix: rm txn

* fix: validator

* chore: lint

---------

Co-authored-by: Alexander Belanger <alexander@hatchet.run>
This commit is contained in:
Gabe Ruttner
2024-05-16 09:23:36 -07:00
committed by GitHub
parent d1a4d35830
commit e6617e1381
25 changed files with 706 additions and 248 deletions

View File

@@ -28,6 +28,8 @@ service Dispatcher {
rpc Unsubscribe(WorkerUnsubscribeRequest) returns (WorkerUnsubscribeResponse) {}
rpc RefreshTimeout(RefreshTimeoutRequest) returns (RefreshTimeoutResponse) {}
rpc ReleaseSlot(ReleaseSlotRequest) returns (ReleaseSlotResponse) {}
}
@@ -294,6 +296,17 @@ message HeartbeatRequest {
message HeartbeatResponse {}
message RefreshTimeoutRequest {
// the id of the step run to release
string stepRunId = 1;
string incrementTimeoutBy = 2;
}
message RefreshTimeoutResponse {
google.protobuf.Timestamp timeoutAt = 1;
}
message ReleaseSlotRequest {
// the id of the step run to release
string stepRunId = 1;

View File

@@ -283,6 +283,7 @@ StepRunEventReason:
- FAILED
- RETRYING
- CANCELLED
- TIMEOUT_REFRESHED
- REASSIGNED
- TIMED_OUT
- SLOT_RELEASED

View File

@@ -274,7 +274,7 @@ triggerWorkflow:
tags:
- Workflow Run
cancelWorkflowRuns:
cancelWorkflowRuns:
post:
x-resources: ["tenant"]
description: Cancel a batch of workflow runs

View File

@@ -8,6 +8,7 @@ import (
"github.com/google/uuid"
"github.com/hashicorp/go-multierror"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/internal/msgqueue"
"github.com/hatchet-dev/hatchet/internal/repository/prisma/db"

View File

@@ -85,6 +85,7 @@ const (
StepRunEventReasonSLOTRELEASED StepRunEventReason = "SLOT_RELEASED"
StepRunEventReasonSTARTED StepRunEventReason = "STARTED"
StepRunEventReasonTIMEDOUT StepRunEventReason = "TIMED_OUT"
StepRunEventReasonTIMEOUTREFRESHED StepRunEventReason = "TIMEOUT_REFRESHED"
)
// Defines values for StepRunEventSeverity.
@@ -7997,107 +7998,107 @@ var swaggerSpec = []string{
"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",
}
// GetSwagger returns the content of the embedded swagger specification file

View File

@@ -1,4 +1,4 @@
import React from 'react';
import React, { useEffect, useMemo, useState } from 'react';
import TimeAgo from 'timeago-react';
import {
Tooltip,
@@ -9,16 +9,71 @@ import {
interface RelativeDateProps {
date: Date | string;
future?: boolean;
}
const RelativeDate: React.FC<RelativeDateProps> = ({ date }) => {
const formattedDate = typeof date === 'string' ? new Date(date) : date;
const RelativeDate: React.FC<RelativeDateProps> = ({
date,
future = false,
}) => {
const formattedDate = useMemo(
() => (typeof date === 'string' ? new Date(date) : date),
[date],
);
const [countdown, setCountdown] = useState('');
useEffect(() => {
if (future) {
const updateCountdown = () => {
const currentDate = new Date();
const timeDiff = formattedDate.getTime() - currentDate.getTime();
if (timeDiff <= 0) {
setCountdown('');
return;
}
const days = Math.floor(timeDiff / (1000 * 3600 * 24));
const hours = Math.floor(
(timeDiff % (1000 * 3600 * 24)) / (1000 * 3600),
);
const minutes = Math.floor((timeDiff % (1000 * 3600)) / (1000 * 60));
const seconds = Math.floor((timeDiff % (1000 * 60)) / 1000);
const countdownParts = [];
if (days > 0) {
countdownParts.push(`${days}d`);
}
if (hours > 0 || days > 0) {
countdownParts.push(`${hours}h`);
}
if (minutes > 0 || hours > 0 || days > 0) {
countdownParts.push(`${minutes}m`);
}
countdownParts.push(`${seconds}s`);
setCountdown(countdownParts.join(' '));
};
updateCountdown();
const countdownInterval = setInterval(updateCountdown, 1000);
return () => {
clearInterval(countdownInterval);
};
}
}, [formattedDate, future]);
return (
<TooltipProvider>
<Tooltip>
<TooltipTrigger>
<TimeAgo datetime={formattedDate} />
{future && countdown ? (
<>{countdown}</>
) : (
<TimeAgo datetime={formattedDate} />
)}
</TooltipTrigger>
<TooltipContent>{formattedDate.toLocaleString()}</TooltipContent>
</Tooltip>

View File

@@ -687,6 +687,7 @@ export enum StepRunEventReason {
FAILED = "FAILED",
RETRYING = "RETRYING",
CANCELLED = "CANCELLED",
TIMEOUT_REFRESHED = "TIMEOUT_REFRESHED",
REASSIGNED = "REASSIGNED",
TIMED_OUT = "TIMED_OUT",
SLOT_RELEASED = "SLOT_RELEASED",

View File

@@ -89,6 +89,7 @@ const REASON_TO_TITLE: Record<StepRunEventReason, string> = {
[StepRunEventReason.REQUEUED_NO_WORKER]: 'Requeueing (no worker available)',
[StepRunEventReason.REQUEUED_RATE_LIMIT]: 'Requeueing (rate limit)',
[StepRunEventReason.SCHEDULING_TIMED_OUT]: 'Scheduling timed out',
[StepRunEventReason.TIMEOUT_REFRESHED]: 'Timeout refreshed',
[StepRunEventReason.REASSIGNED]: 'Reassigned',
[StepRunEventReason.TIMED_OUT]: 'Execution timed out',
[StepRunEventReason.SLOT_RELEASED]: 'Slot released',

View File

@@ -32,6 +32,7 @@ import { RunStatus } from '../../components/run-statuses';
import { QuestionMarkCircleIcon, XMarkIcon } from '@heroicons/react/24/outline';
import { WorkflowRunsTable } from '../../components/workflow-runs-table';
import { StepRunEvents } from './step-run-events';
import RelativeDate from '@/components/molecules/relative-date';
export function StepRunPlayground({
stepRun,
@@ -453,6 +454,12 @@ export function StepRunPlayground({
{isLoading && disabled && (
<>
{stepRun.timeoutAt && (
<div>
Timeout in{' '}
<RelativeDate date={stepRun.timeoutAt} future />
</div>
)}
<Button className="w-fit" onClick={handleOnCancel}>
<>
<XMarkIcon className={cn('h-4 w-4 mr-2')} />

View File

@@ -122,6 +122,29 @@ This would set a timeout of 30 seconds for this specific step. If the step takes
[cancellation](/features/cancellation) for more information.
</Callout>
## Refreshing Timeouts
In some cases, you may need to extend the timeout for a step while it is running. This can be done using the `refreshTimeout` function provided by the step context (`ctx`).
For example:
```typescript
const myStep: CreateStep<any, any> = {
name: "my-step",
timeout: "30s",
run: async (ctx) => {
await sleep(20 * 1000);
ctx.refreshTimeout("15s");
await sleep(10 * 1000);
return { step1: "step1 results!" };
},
};
```
In this example, the step initially has a timeout of 30 seconds. After 19 seconds, the `refreshTimeout` function is called with an argument of `'15s'`, which extends the timeout by an additional 15 seconds. This allows the step to continue running for a total of 45 seconds (30 seconds initial timeout + 15 seconds refreshed timeout).
The `refreshTimeout` function can be called multiple times within a step to further extend the timeout as needed.
## Use Cases
Timeouts are useful in a variety of scenarios:

View File

@@ -244,6 +244,7 @@ const (
StepRunEventReasonTIMEDOUT StepRunEventReason = "TIMED_OUT"
StepRunEventReasonREASSIGNED StepRunEventReason = "REASSIGNED"
StepRunEventReasonSLOTRELEASED StepRunEventReason = "SLOT_RELEASED"
StepRunEventReasonTIMEOUTREFRESHED StepRunEventReason = "TIMEOUT_REFRESHED"
)
func (e *StepRunEventReason) Scan(src interface{}) error {

View File

@@ -14,7 +14,7 @@ CREATE TYPE "JobRunStatus" AS ENUM ('PENDING', 'RUNNING', 'SUCCEEDED', 'FAILED',
CREATE TYPE "LogLineLevel" AS ENUM ('DEBUG', 'INFO', 'WARN', 'ERROR');
-- CreateEnum
CREATE TYPE "StepRunEventReason" AS ENUM ('REQUEUED_NO_WORKER', 'REQUEUED_RATE_LIMIT', 'SCHEDULING_TIMED_OUT', 'ASSIGNED', 'STARTED', 'FINISHED', 'FAILED', 'RETRYING', 'CANCELLED', 'TIMED_OUT', 'REASSIGNED', 'SLOT_RELEASED');
CREATE TYPE "StepRunEventReason" AS ENUM ('REQUEUED_NO_WORKER', 'REQUEUED_RATE_LIMIT', 'SCHEDULING_TIMED_OUT', 'ASSIGNED', 'STARTED', 'FINISHED', 'FAILED', 'RETRYING', 'CANCELLED', 'TIMED_OUT', 'REASSIGNED', 'SLOT_RELEASED', 'TIMEOUT_REFRESHED');
-- CreateEnum
CREATE TYPE "StepRunEventSeverity" AS ENUM ('INFO', 'WARNING', 'CRITICAL');

View File

@@ -565,6 +565,22 @@ SELECT ts."totalSlots"::int, usr."id", usr."workerId", usr."dispatcherId"
FROM total_slots ts
LEFT JOIN update_step_run usr ON true;
-- name: RefreshTimeoutBy :one
UPDATE
"StepRun" sr
SET
"timeoutAt" = CASE
-- Only update timeoutAt if the step run is currently in RUNNING status
WHEN sr."status" = 'RUNNING' THEN
COALESCE(sr."timeoutAt", CURRENT_TIMESTAMP) + convert_duration_to_interval(sqlc.narg('incrementTimeoutBy')::text)
ELSE sr."timeoutAt"
END,
"updatedAt" = CURRENT_TIMESTAMP
WHERE
"id" = @stepRunId::uuid AND
"tenantId" = @tenantId::uuid
RETURNING *;
-- name: UpdateWorkerSemaphore :one
WITH step_run AS (
SELECT

View File

@@ -925,6 +925,64 @@ func (q *Queries) ListStepRunsToRequeue(ctx context.Context, db DBTX, tenantid p
return items, nil
}
const refreshTimeoutBy = `-- name: RefreshTimeoutBy :one
UPDATE
"StepRun" sr
SET
"timeoutAt" = CASE
-- Only update timeoutAt if the step run is currently in RUNNING status
WHEN sr."status" = 'RUNNING' THEN
COALESCE(sr."timeoutAt", CURRENT_TIMESTAMP) + convert_duration_to_interval($1::text)
ELSE sr."timeoutAt"
END,
"updatedAt" = CURRENT_TIMESTAMP
WHERE
"id" = $2::uuid AND
"tenantId" = $3::uuid
RETURNING id, "createdAt", "updatedAt", "deletedAt", "tenantId", "jobRunId", "stepId", "order", "workerId", "tickerId", status, input, output, "requeueAfter", "scheduleTimeoutAt", error, "startedAt", "finishedAt", "timeoutAt", "cancelledAt", "cancelledReason", "cancelledError", "inputSchema", "callerFiles", "gitRepoBranch", "retryCount", "semaphoreReleased"
`
type RefreshTimeoutByParams struct {
IncrementTimeoutBy pgtype.Text `json:"incrementTimeoutBy"`
Steprunid pgtype.UUID `json:"steprunid"`
Tenantid pgtype.UUID `json:"tenantid"`
}
func (q *Queries) RefreshTimeoutBy(ctx context.Context, db DBTX, arg RefreshTimeoutByParams) (*StepRun, error) {
row := db.QueryRow(ctx, refreshTimeoutBy, arg.IncrementTimeoutBy, arg.Steprunid, arg.Tenantid)
var i StepRun
err := row.Scan(
&i.ID,
&i.CreatedAt,
&i.UpdatedAt,
&i.DeletedAt,
&i.TenantId,
&i.JobRunId,
&i.StepId,
&i.Order,
&i.WorkerId,
&i.TickerId,
&i.Status,
&i.Input,
&i.Output,
&i.RequeueAfter,
&i.ScheduleTimeoutAt,
&i.Error,
&i.StartedAt,
&i.FinishedAt,
&i.TimeoutAt,
&i.CancelledAt,
&i.CancelledReason,
&i.CancelledError,
&i.InputSchema,
&i.CallerFiles,
&i.GitRepoBranch,
&i.RetryCount,
&i.SemaphoreReleased,
)
return &i, err
}
const resolveLaterStepRuns = `-- name: ResolveLaterStepRuns :many
WITH RECURSIVE currStepRun AS (
SELECT id, "createdAt", "updatedAt", "deletedAt", "tenantId", "jobRunId", "stepId", "order", "workerId", "tickerId", status, input, output, "requeueAfter", "scheduleTimeoutAt", error, "startedAt", "finishedAt", "timeoutAt", "cancelledAt", "cancelledReason", "cancelledError", "inputSchema", "callerFiles", "gitRepoBranch", "retryCount", "semaphoreReleased"

View File

@@ -1336,3 +1336,35 @@ func sleepWithJitter(min, max time.Duration) {
time.Sleep(min) // Sleep for min duration if jitter is not positive
}
}
func (s *stepRunEngineRepository) RefreshTimeoutBy(ctx context.Context, tenantId, stepRunId string, opts repository.RefreshTimeoutBy) (*dbsqlc.StepRun, error) {
stepRunUUID := sqlchelpers.UUIDFromStr(stepRunId)
tenantUUID := sqlchelpers.UUIDFromStr(tenantId)
incrementTimeoutBy := opts.IncrementTimeoutBy
err := s.v.Validate(opts)
if err != nil {
return nil, err
}
res, err := s.queries.RefreshTimeoutBy(ctx, s.pool, dbsqlc.RefreshTimeoutByParams{
Steprunid: stepRunUUID,
Tenantid: tenantUUID,
IncrementTimeoutBy: sqlchelpers.TextFromStr(incrementTimeoutBy),
})
if err != nil {
return nil, err
}
defer s.deferredStepRunEvent(
stepRunUUID,
dbsqlc.StepRunEventReasonTIMEOUTREFRESHED,
dbsqlc.StepRunEventSeverityINFO,
fmt.Sprintf("Timeout refreshed by %s", incrementTimeoutBy),
nil)
return res, nil
}

View File

@@ -114,6 +114,10 @@ type ListStepRunEventResult struct {
Count int
}
type RefreshTimeoutBy struct {
IncrementTimeoutBy string `validate:"required,duration"`
}
type StepRunAPIRepository interface {
GetStepRunById(tenantId, stepRunId string) (*db.StepRunModel, error)
@@ -157,4 +161,6 @@ type StepRunEngineRepository interface {
ListStartableStepRuns(ctx context.Context, tenantId, jobRunId string, parentStepRunId *string) ([]*dbsqlc.GetStepRunForEngineRow, error)
ArchiveStepRunResult(ctx context.Context, tenantId, stepRunId string) error
RefreshTimeoutBy(ctx context.Context, tenantId, stepRunId string, opts RefreshTimeoutBy) (*dbsqlc.StepRun, error)
}

View File

@@ -1616,6 +1616,109 @@ func (*HeartbeatResponse) Descriptor() ([]byte, []int) {
return file_dispatcher_proto_rawDescGZIP(), []int{17}
}
type RefreshTimeoutRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// the id of the step run to release
StepRunId string `protobuf:"bytes,1,opt,name=stepRunId,proto3" json:"stepRunId,omitempty"`
IncrementTimeoutBy string `protobuf:"bytes,2,opt,name=incrementTimeoutBy,proto3" json:"incrementTimeoutBy,omitempty"`
}
func (x *RefreshTimeoutRequest) Reset() {
*x = RefreshTimeoutRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_dispatcher_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RefreshTimeoutRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RefreshTimeoutRequest) ProtoMessage() {}
func (x *RefreshTimeoutRequest) ProtoReflect() protoreflect.Message {
mi := &file_dispatcher_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RefreshTimeoutRequest.ProtoReflect.Descriptor instead.
func (*RefreshTimeoutRequest) Descriptor() ([]byte, []int) {
return file_dispatcher_proto_rawDescGZIP(), []int{18}
}
func (x *RefreshTimeoutRequest) GetStepRunId() string {
if x != nil {
return x.StepRunId
}
return ""
}
func (x *RefreshTimeoutRequest) GetIncrementTimeoutBy() string {
if x != nil {
return x.IncrementTimeoutBy
}
return ""
}
type RefreshTimeoutResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
TimeoutAt *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timeoutAt,proto3" json:"timeoutAt,omitempty"`
}
func (x *RefreshTimeoutResponse) Reset() {
*x = RefreshTimeoutResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_dispatcher_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RefreshTimeoutResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RefreshTimeoutResponse) ProtoMessage() {}
func (x *RefreshTimeoutResponse) ProtoReflect() protoreflect.Message {
mi := &file_dispatcher_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RefreshTimeoutResponse.ProtoReflect.Descriptor instead.
func (*RefreshTimeoutResponse) Descriptor() ([]byte, []int) {
return file_dispatcher_proto_rawDescGZIP(), []int{19}
}
func (x *RefreshTimeoutResponse) GetTimeoutAt() *timestamppb.Timestamp {
if x != nil {
return x.TimeoutAt
}
return nil
}
type ReleaseSlotRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1628,7 +1731,7 @@ type ReleaseSlotRequest struct {
func (x *ReleaseSlotRequest) Reset() {
*x = ReleaseSlotRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_dispatcher_proto_msgTypes[18]
mi := &file_dispatcher_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1641,7 +1744,7 @@ func (x *ReleaseSlotRequest) String() string {
func (*ReleaseSlotRequest) ProtoMessage() {}
func (x *ReleaseSlotRequest) ProtoReflect() protoreflect.Message {
mi := &file_dispatcher_proto_msgTypes[18]
mi := &file_dispatcher_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1654,7 +1757,7 @@ func (x *ReleaseSlotRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReleaseSlotRequest.ProtoReflect.Descriptor instead.
func (*ReleaseSlotRequest) Descriptor() ([]byte, []int) {
return file_dispatcher_proto_rawDescGZIP(), []int{18}
return file_dispatcher_proto_rawDescGZIP(), []int{20}
}
func (x *ReleaseSlotRequest) GetStepRunId() string {
@@ -1673,7 +1776,7 @@ type ReleaseSlotResponse struct {
func (x *ReleaseSlotResponse) Reset() {
*x = ReleaseSlotResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_dispatcher_proto_msgTypes[19]
mi := &file_dispatcher_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1686,7 +1789,7 @@ func (x *ReleaseSlotResponse) String() string {
func (*ReleaseSlotResponse) ProtoMessage() {}
func (x *ReleaseSlotResponse) ProtoReflect() protoreflect.Message {
mi := &file_dispatcher_proto_msgTypes[19]
mi := &file_dispatcher_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1699,7 +1802,7 @@ func (x *ReleaseSlotResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ReleaseSlotResponse.ProtoReflect.Descriptor instead.
func (*ReleaseSlotResponse) Descriptor() ([]byte, []int) {
return file_dispatcher_proto_rawDescGZIP(), []int{19}
return file_dispatcher_proto_rawDescGZIP(), []int{21}
}
var File_dispatcher_proto protoreflect.FileDescriptor
@@ -1887,104 +1990,120 @@ var file_dispatcher_proto_rawDesc = []byte{
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x41, 0x74,
0x22, 0x13, 0x0a, 0x11, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65,
0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73,
0x74, 0x65, 0x70, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x73, 0x74, 0x65, 0x70, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x6c,
0x65, 0x61, 0x73, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x2a, 0x4e, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12,
0x0a, 0x0e, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x52, 0x55, 0x4e,
0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x5f, 0x53, 0x54, 0x45,
0x50, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x41, 0x52, 0x54,
0x5f, 0x47, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02,
0x2a, 0xa2, 0x01, 0x0a, 0x17, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c,
0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f,
0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x20,
0x0a, 0x1c, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x56, 0x45, 0x4e,
0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01,
0x12, 0x22, 0x0a, 0x1e, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x56,
0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54,
0x45, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4b, 0x45,
0x59, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x41, 0x49,
0x4c, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x65, 0x70, 0x41, 0x63,
0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a,
0x17, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45,
0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54,
0x45, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54,
0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x54, 0x45, 0x50, 0x5f,
0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c,
0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x45,
0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44,
0x10, 0x03, 0x2a, 0x65, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79,
0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54,
0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1a, 0x0a,
0x16, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53,
0x54, 0x45, 0x50, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53,
0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x46,
0x4c, 0x4f, 0x57, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x02, 0x2a, 0xfe, 0x01, 0x0a, 0x11, 0x52, 0x65,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12,
0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e,
0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00,
0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45,
0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10,
0x01, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56,
0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54,
0x45, 0x44, 0x10, 0x02, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45,
0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c,
0x45, 0x44, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45,
0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43,
0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55,
0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54,
0x49, 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45,
0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x06, 0x2a, 0x3c, 0x0a, 0x14, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79,
0x70, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x57, 0x4f, 0x52, 0x4b, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x52,
0x55, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49,
0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x00, 0x32, 0xe2, 0x05, 0x0a, 0x0a, 0x44, 0x69, 0x73,
0x70, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73,
0x74, 0x65, 0x72, 0x12, 0x16, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69,
0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x57, 0x6f,
0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e,
0x12, 0x14, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65,
0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x08, 0x4c,
0x69, 0x73, 0x74, 0x65, 0x6e, 0x56, 0x32, 0x12, 0x14, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72,
0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e,
0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x00,
0x30, 0x01, 0x12, 0x34, 0x0a, 0x09, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12,
0x11, 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x12, 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x73,
0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45,
0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
0x65, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x17,
0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72,
0x69, 0x62, 0x65, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x00, 0x28, 0x01, 0x30,
0x01, 0x12, 0x3f, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x65, 0x70, 0x41, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x2e, 0x53, 0x74, 0x65, 0x70, 0x41,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x14, 0x2e, 0x41, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x00, 0x12, 0x47, 0x0a, 0x17, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b,
0x65, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x2e,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x65, 0x0a, 0x15, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68,
0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
0x0a, 0x09, 0x73, 0x74, 0x65, 0x70, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x73, 0x74, 0x65, 0x70, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x12,
0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
0x42, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d,
0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x79, 0x22, 0x52, 0x0a, 0x16,
0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75,
0x74, 0x41, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x41, 0x74,
0x22, 0x32, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x65, 0x70, 0x52, 0x75,
0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x65, 0x70, 0x52,
0x75, 0x6e, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53,
0x6c, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x4e, 0x0a, 0x0a, 0x41,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41,
0x52, 0x54, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a,
0x0f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x52, 0x55, 0x4e,
0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x47, 0x45, 0x54, 0x5f,
0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x2a, 0xa2, 0x01, 0x0a, 0x17,
0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x1a, 0x14, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e,
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x10, 0x50,
0x75, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12,
0x0e, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x44, 0x61, 0x74, 0x61, 0x1a,
0x16, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x55, 0x6e, 0x73,
0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x19, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65,
0x72, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x55, 0x6e, 0x73, 0x75,
0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x52, 0x4f, 0x55, 0x50,
0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f,
0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x52, 0x4f,
0x55, 0x50, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x47,
0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54,
0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12,
0x1f, 0x0a, 0x1b, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x56, 0x45,
0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03,
0x2a, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x65, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45,
0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x45, 0x50,
0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e,
0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x45, 0x56,
0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44,
0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10,
0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f,
0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x65, 0x0a,
0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a,
0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55,
0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x45, 0x53, 0x4f,
0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x45, 0x50, 0x5f, 0x52,
0x55, 0x4e, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x52,
0x55, 0x4e, 0x10, 0x02, 0x2a, 0xfe, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45,
0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50,
0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x52,
0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59,
0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d,
0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54,
0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12,
0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e,
0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12,
0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e,
0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44,
0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45,
0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f,
0x4f, 0x55, 0x54, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43,
0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52,
0x45, 0x41, 0x4d, 0x10, 0x06, 0x2a, 0x3c, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a,
0x20, 0x57, 0x4f, 0x52, 0x4b, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x56,
0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45,
0x44, 0x10, 0x00, 0x32, 0xa7, 0x06, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x70, 0x61, 0x74, 0x63, 0x68,
0x65, 0x72, 0x12, 0x3d, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x16,
0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52,
0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x00, 0x12, 0x33, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x12, 0x14, 0x2e, 0x57, 0x6f,
0x72, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x0f, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69,
0x6f, 0x6e, 0x22, 0x00, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e,
0x56, 0x32, 0x12, 0x14, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x65,
0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67,
0x6e, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x30, 0x01, 0x12, 0x34, 0x0a,
0x09, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x11, 0x2e, 0x48, 0x65, 0x61,
0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e,
0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73,
0x12, 0x21, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x17, 0x53, 0x75, 0x62, 0x73, 0x63,
0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75,
0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f,
0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75,
0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x13,
0x53, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x65, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x12, 0x10, 0x2e, 0x53, 0x74, 0x65, 0x70, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x14, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a,
0x17, 0x53, 0x65, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70,
0x4b, 0x65, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x14,
0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x10, 0x50, 0x75, 0x74, 0x4f, 0x76, 0x65,
0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x2e, 0x4f, 0x76, 0x65,
0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x16, 0x2e, 0x4f, 0x76, 0x65,
0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
0x69, 0x62, 0x65, 0x12, 0x19, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x55, 0x6e, 0x73, 0x75,
0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a,
0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0e,
0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16,
0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68,
0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x00, 0x12, 0x3a, 0x0a, 0x0b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6c, 0x6f, 0x74,
0x12, 0x13, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53,
@@ -2009,7 +2128,7 @@ func file_dispatcher_proto_rawDescGZIP() []byte {
}
var file_dispatcher_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
var file_dispatcher_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_dispatcher_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
var file_dispatcher_proto_goTypes = []interface{}{
(ActionType)(0), // 0: ActionType
(GroupKeyActionEventType)(0), // 1: GroupKeyActionEventType
@@ -2035,50 +2154,55 @@ var file_dispatcher_proto_goTypes = []interface{}{
(*OverridesDataResponse)(nil), // 21: OverridesDataResponse
(*HeartbeatRequest)(nil), // 22: HeartbeatRequest
(*HeartbeatResponse)(nil), // 23: HeartbeatResponse
(*ReleaseSlotRequest)(nil), // 24: ReleaseSlotRequest
(*ReleaseSlotResponse)(nil), // 25: ReleaseSlotResponse
(*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp
(*RefreshTimeoutRequest)(nil), // 24: RefreshTimeoutRequest
(*RefreshTimeoutResponse)(nil), // 25: RefreshTimeoutResponse
(*ReleaseSlotRequest)(nil), // 26: ReleaseSlotRequest
(*ReleaseSlotResponse)(nil), // 27: ReleaseSlotResponse
(*timestamppb.Timestamp)(nil), // 28: google.protobuf.Timestamp
}
var file_dispatcher_proto_depIdxs = []int32{
0, // 0: AssignedAction.actionType:type_name -> ActionType
26, // 1: GroupKeyActionEvent.eventTimestamp:type_name -> google.protobuf.Timestamp
28, // 1: GroupKeyActionEvent.eventTimestamp:type_name -> google.protobuf.Timestamp
1, // 2: GroupKeyActionEvent.eventType:type_name -> GroupKeyActionEventType
26, // 3: StepActionEvent.eventTimestamp:type_name -> google.protobuf.Timestamp
28, // 3: StepActionEvent.eventTimestamp:type_name -> google.protobuf.Timestamp
2, // 4: StepActionEvent.eventType:type_name -> StepActionEventType
3, // 5: WorkflowEvent.resourceType:type_name -> ResourceType
4, // 6: WorkflowEvent.eventType:type_name -> ResourceEventType
26, // 7: WorkflowEvent.eventTimestamp:type_name -> google.protobuf.Timestamp
28, // 7: WorkflowEvent.eventTimestamp:type_name -> google.protobuf.Timestamp
5, // 8: WorkflowRunEvent.eventType:type_name -> WorkflowRunEventType
26, // 9: WorkflowRunEvent.eventTimestamp:type_name -> google.protobuf.Timestamp
28, // 9: WorkflowRunEvent.eventTimestamp:type_name -> google.protobuf.Timestamp
19, // 10: WorkflowRunEvent.results:type_name -> StepRunResult
26, // 11: HeartbeatRequest.heartbeatAt:type_name -> google.protobuf.Timestamp
6, // 12: Dispatcher.Register:input_type -> WorkerRegisterRequest
9, // 13: Dispatcher.Listen:input_type -> WorkerListenRequest
9, // 14: Dispatcher.ListenV2:input_type -> WorkerListenRequest
22, // 15: Dispatcher.Heartbeat:input_type -> HeartbeatRequest
15, // 16: Dispatcher.SubscribeToWorkflowEvents:input_type -> SubscribeToWorkflowEventsRequest
16, // 17: Dispatcher.SubscribeToWorkflowRuns:input_type -> SubscribeToWorkflowRunsRequest
13, // 18: Dispatcher.SendStepActionEvent:input_type -> StepActionEvent
12, // 19: Dispatcher.SendGroupKeyActionEvent:input_type -> GroupKeyActionEvent
20, // 20: Dispatcher.PutOverridesData:input_type -> OverridesData
10, // 21: Dispatcher.Unsubscribe:input_type -> WorkerUnsubscribeRequest
24, // 22: Dispatcher.ReleaseSlot:input_type -> ReleaseSlotRequest
7, // 23: Dispatcher.Register:output_type -> WorkerRegisterResponse
8, // 24: Dispatcher.Listen:output_type -> AssignedAction
8, // 25: Dispatcher.ListenV2:output_type -> AssignedAction
23, // 26: Dispatcher.Heartbeat:output_type -> HeartbeatResponse
17, // 27: Dispatcher.SubscribeToWorkflowEvents:output_type -> WorkflowEvent
18, // 28: Dispatcher.SubscribeToWorkflowRuns:output_type -> WorkflowRunEvent
14, // 29: Dispatcher.SendStepActionEvent:output_type -> ActionEventResponse
14, // 30: Dispatcher.SendGroupKeyActionEvent:output_type -> ActionEventResponse
21, // 31: Dispatcher.PutOverridesData:output_type -> OverridesDataResponse
11, // 32: Dispatcher.Unsubscribe:output_type -> WorkerUnsubscribeResponse
25, // 33: Dispatcher.ReleaseSlot:output_type -> ReleaseSlotResponse
23, // [23:34] is the sub-list for method output_type
12, // [12:23] is the sub-list for method input_type
12, // [12:12] is the sub-list for extension type_name
12, // [12:12] is the sub-list for extension extendee
0, // [0:12] is the sub-list for field type_name
28, // 11: HeartbeatRequest.heartbeatAt:type_name -> google.protobuf.Timestamp
28, // 12: RefreshTimeoutResponse.timeoutAt:type_name -> google.protobuf.Timestamp
6, // 13: Dispatcher.Register:input_type -> WorkerRegisterRequest
9, // 14: Dispatcher.Listen:input_type -> WorkerListenRequest
9, // 15: Dispatcher.ListenV2:input_type -> WorkerListenRequest
22, // 16: Dispatcher.Heartbeat:input_type -> HeartbeatRequest
15, // 17: Dispatcher.SubscribeToWorkflowEvents:input_type -> SubscribeToWorkflowEventsRequest
16, // 18: Dispatcher.SubscribeToWorkflowRuns:input_type -> SubscribeToWorkflowRunsRequest
13, // 19: Dispatcher.SendStepActionEvent:input_type -> StepActionEvent
12, // 20: Dispatcher.SendGroupKeyActionEvent:input_type -> GroupKeyActionEvent
20, // 21: Dispatcher.PutOverridesData:input_type -> OverridesData
10, // 22: Dispatcher.Unsubscribe:input_type -> WorkerUnsubscribeRequest
24, // 23: Dispatcher.RefreshTimeout:input_type -> RefreshTimeoutRequest
26, // 24: Dispatcher.ReleaseSlot:input_type -> ReleaseSlotRequest
7, // 25: Dispatcher.Register:output_type -> WorkerRegisterResponse
8, // 26: Dispatcher.Listen:output_type -> AssignedAction
8, // 27: Dispatcher.ListenV2:output_type -> AssignedAction
23, // 28: Dispatcher.Heartbeat:output_type -> HeartbeatResponse
17, // 29: Dispatcher.SubscribeToWorkflowEvents:output_type -> WorkflowEvent
18, // 30: Dispatcher.SubscribeToWorkflowRuns:output_type -> WorkflowRunEvent
14, // 31: Dispatcher.SendStepActionEvent:output_type -> ActionEventResponse
14, // 32: Dispatcher.SendGroupKeyActionEvent:output_type -> ActionEventResponse
21, // 33: Dispatcher.PutOverridesData:output_type -> OverridesDataResponse
11, // 34: Dispatcher.Unsubscribe:output_type -> WorkerUnsubscribeResponse
25, // 35: Dispatcher.RefreshTimeout:output_type -> RefreshTimeoutResponse
27, // 36: Dispatcher.ReleaseSlot:output_type -> ReleaseSlotResponse
25, // [25:37] is the sub-list for method output_type
13, // [13:25] is the sub-list for method input_type
13, // [13:13] is the sub-list for extension type_name
13, // [13:13] is the sub-list for extension extendee
0, // [0:13] is the sub-list for field type_name
}
func init() { file_dispatcher_proto_init() }
@@ -2304,7 +2428,7 @@ func file_dispatcher_proto_init() {
}
}
file_dispatcher_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ReleaseSlotRequest); i {
switch v := v.(*RefreshTimeoutRequest); i {
case 0:
return &v.state
case 1:
@@ -2316,6 +2440,30 @@ func file_dispatcher_proto_init() {
}
}
file_dispatcher_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RefreshTimeoutResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_dispatcher_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ReleaseSlotRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_dispatcher_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ReleaseSlotResponse); i {
case 0:
return &v.state
@@ -2337,7 +2485,7 @@ func file_dispatcher_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_dispatcher_proto_rawDesc,
NumEnums: 6,
NumMessages: 20,
NumMessages: 22,
NumExtensions: 0,
NumServices: 1,
},

View File

@@ -35,6 +35,7 @@ type DispatcherClient interface {
SendGroupKeyActionEvent(ctx context.Context, in *GroupKeyActionEvent, opts ...grpc.CallOption) (*ActionEventResponse, error)
PutOverridesData(ctx context.Context, in *OverridesData, opts ...grpc.CallOption) (*OverridesDataResponse, error)
Unsubscribe(ctx context.Context, in *WorkerUnsubscribeRequest, opts ...grpc.CallOption) (*WorkerUnsubscribeResponse, error)
RefreshTimeout(ctx context.Context, in *RefreshTimeoutRequest, opts ...grpc.CallOption) (*RefreshTimeoutResponse, error)
ReleaseSlot(ctx context.Context, in *ReleaseSlotRequest, opts ...grpc.CallOption) (*ReleaseSlotResponse, error)
}
@@ -227,6 +228,15 @@ func (c *dispatcherClient) Unsubscribe(ctx context.Context, in *WorkerUnsubscrib
return out, nil
}
func (c *dispatcherClient) RefreshTimeout(ctx context.Context, in *RefreshTimeoutRequest, opts ...grpc.CallOption) (*RefreshTimeoutResponse, error) {
out := new(RefreshTimeoutResponse)
err := c.cc.Invoke(ctx, "/Dispatcher/RefreshTimeout", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *dispatcherClient) ReleaseSlot(ctx context.Context, in *ReleaseSlotRequest, opts ...grpc.CallOption) (*ReleaseSlotResponse, error) {
out := new(ReleaseSlotResponse)
err := c.cc.Invoke(ctx, "/Dispatcher/ReleaseSlot", in, out, opts...)
@@ -253,6 +263,7 @@ type DispatcherServer interface {
SendGroupKeyActionEvent(context.Context, *GroupKeyActionEvent) (*ActionEventResponse, error)
PutOverridesData(context.Context, *OverridesData) (*OverridesDataResponse, error)
Unsubscribe(context.Context, *WorkerUnsubscribeRequest) (*WorkerUnsubscribeResponse, error)
RefreshTimeout(context.Context, *RefreshTimeoutRequest) (*RefreshTimeoutResponse, error)
ReleaseSlot(context.Context, *ReleaseSlotRequest) (*ReleaseSlotResponse, error)
mustEmbedUnimplementedDispatcherServer()
}
@@ -291,6 +302,9 @@ func (UnimplementedDispatcherServer) PutOverridesData(context.Context, *Override
func (UnimplementedDispatcherServer) Unsubscribe(context.Context, *WorkerUnsubscribeRequest) (*WorkerUnsubscribeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Unsubscribe not implemented")
}
func (UnimplementedDispatcherServer) RefreshTimeout(context.Context, *RefreshTimeoutRequest) (*RefreshTimeoutResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method RefreshTimeout not implemented")
}
func (UnimplementedDispatcherServer) ReleaseSlot(context.Context, *ReleaseSlotRequest) (*ReleaseSlotResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ReleaseSlot not implemented")
}
@@ -504,6 +518,24 @@ func _Dispatcher_Unsubscribe_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler)
}
func _Dispatcher_RefreshTimeout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(RefreshTimeoutRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DispatcherServer).RefreshTimeout(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/Dispatcher/RefreshTimeout",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DispatcherServer).RefreshTimeout(ctx, req.(*RefreshTimeoutRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Dispatcher_ReleaseSlot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ReleaseSlotRequest)
if err := dec(in); err != nil {
@@ -553,6 +585,10 @@ var Dispatcher_ServiceDesc = grpc.ServiceDesc{
MethodName: "Unsubscribe",
Handler: _Dispatcher_Unsubscribe_Handler,
},
{
MethodName: "RefreshTimeout",
Handler: _Dispatcher_RefreshTimeout_Handler,
},
{
MethodName: "ReleaseSlot",
Handler: _Dispatcher_ReleaseSlot_Handler,

View File

@@ -706,6 +706,29 @@ func (s *DispatcherImpl) Unsubscribe(ctx context.Context, request *contracts.Wor
}, nil
}
func (d *DispatcherImpl) RefreshTimeout(ctx context.Context, request *contracts.RefreshTimeoutRequest) (*contracts.RefreshTimeoutResponse, error) {
tenant := ctx.Value("tenant").(*dbsqlc.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
stepRun, err := d.repo.StepRun().RefreshTimeoutBy(ctx, tenantId, request.StepRunId, repository.RefreshTimeoutBy{
IncrementTimeoutBy: request.IncrementTimeoutBy,
})
if err != nil {
return nil, err
}
timeoutAt := &timestamppb.Timestamp{
Seconds: stepRun.TimeoutAt.Time.Unix(),
Nanos: int32(stepRun.TimeoutAt.Time.Nanosecond()),
}
return &contracts.RefreshTimeoutResponse{
TimeoutAt: timeoutAt,
}, nil
}
func (s *DispatcherImpl) handleStepRunStarted(ctx context.Context, request *contracts.StepActionEvent) (*contracts.ActionEventResponse, error) {
tenant := ctx.Value("tenant").(*dbsqlc.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)

View File

@@ -24,6 +24,8 @@ type DispatcherClient interface {
SendGroupKeyActionEvent(ctx context.Context, in *ActionEvent) (*ActionEventResponse, error)
ReleaseSlot(ctx context.Context, stepRunId string) error
RefreshTimeout(ctx context.Context, stepRunId string, incrementTimeoutBy string) error
}
const (
@@ -492,3 +494,16 @@ func (a *dispatcherClientImpl) ReleaseSlot(ctx context.Context, stepRunId string
return nil
}
func (a *dispatcherClientImpl) RefreshTimeout(ctx context.Context, stepRunId string, incrementTimeoutBy string) error {
_, err := a.client.RefreshTimeout(a.ctx.newContext(ctx), &dispatchercontracts.RefreshTimeoutRequest{
StepRunId: stepRunId,
IncrementTimeoutBy: incrementTimeoutBy,
})
if err != nil {
return err
}
return nil
}

View File

@@ -82,6 +82,7 @@ const (
StepRunEventReasonSLOTRELEASED StepRunEventReason = "SLOT_RELEASED"
StepRunEventReasonSTARTED StepRunEventReason = "STARTED"
StepRunEventReasonTIMEDOUT StepRunEventReason = "TIMED_OUT"
StepRunEventReasonTIMEOUTREFRESHED StepRunEventReason = "TIMEOUT_REFRESHED"
)
// Defines values for StepRunEventSeverity.

View File

@@ -38,6 +38,8 @@ type HatchetContext interface {
ReleaseSlot() error
RefreshTimeout(incrementTimeoutBy string) error
client() client.Client
action() *client.Action
@@ -174,6 +176,16 @@ func (h *hatchetContext) ReleaseSlot() error {
return nil
}
func (h *hatchetContext) RefreshTimeout(incrementTimeoutBy string) error {
err := h.c.Dispatcher().RefreshTimeout(h, h.a.StepRunId, incrementTimeoutBy)
if err != nil {
return fmt.Errorf("failed to refresh timeout: %w", err)
}
return nil
}
func (h *hatchetContext) StreamEvent(message []byte) {
err := h.c.Event().PutStreamEvent(h, h.a.StepRunId, message)

View File

@@ -56,6 +56,10 @@ func (c *testHatchetContext) ReleaseSlot() error {
panic("not implemented")
}
func (c *testHatchetContext) RefreshTimeout(incrementIntervalBy string) error {
panic("not implemented")
}
func (c *testHatchetContext) StreamEvent(message []byte) {
panic("not implemented")
}

View File

@@ -0,0 +1,2 @@
-- AlterEnum
ALTER TYPE "StepRunEventReason" ADD VALUE 'TIMEOUT_REFRESHED';

View File

@@ -1043,6 +1043,7 @@ enum StepRunEventReason {
FAILED
RETRYING
CANCELLED
TIMEOUT_REFRESHED
SLOT_RELEASED
}