From e91760f888de28b87409342830a7cb6109dd6475 Mon Sep 17 00:00:00 2001 From: Alex Shtin Date: Fri, 6 Jan 2023 12:34:04 -0800 Subject: [PATCH] Add speculative workflow task (#3768) --- api/enums/v1/workflow_task_type.pb.go | 112 +++ api/persistence/v1/executions.pb.go | 809 +++++++++--------- common/log/tag/tags.go | 4 + .../api/enums/v1/workflow_task_type.proto | 33 + .../api/persistence/v1/executions.proto | 7 +- .../signal_with_start_workflow.go | 3 +- .../signal_with_start_workflow_test.go | 3 +- service/history/api/update_workflow_util.go | 2 + service/history/historyEngine_test.go | 2 +- service/history/ndc/events_reapplier.go | 2 + service/history/workflow/mutable_state.go | 9 +- .../history/workflow/mutable_state_impl.go | 10 +- .../workflow/mutable_state_impl_test.go | 6 +- .../history/workflow/mutable_state_mock.go | 24 +- .../workflow/mutable_state_rebuilder.go | 2 + .../workflow/mutable_state_rebuilder_test.go | 4 +- service/history/workflow/util.go | 3 +- .../workflow/workflow_task_state_machine.go | 81 +- .../history/workflowTaskHandlerCallbacks.go | 3 +- 19 files changed, 704 insertions(+), 415 deletions(-) create mode 100644 api/enums/v1/workflow_task_type.pb.go create mode 100644 proto/internal/temporal/server/api/enums/v1/workflow_task_type.proto diff --git a/api/enums/v1/workflow_task_type.pb.go b/api/enums/v1/workflow_task_type.pb.go new file mode 100644 index 00000000000..6da002339ef --- /dev/null +++ b/api/enums/v1/workflow_task_type.pb.go @@ -0,0 +1,112 @@ +// The MIT License +// +// Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. +// +// Copyright (c) 2020 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: temporal/server/api/enums/v1/workflow_task_type.proto + +package enums + +import ( + fmt "fmt" + math "math" + strconv "strconv" + + proto "github.com/gogo/protobuf/proto" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type WorkflowTaskType int32 + +const ( + WORKFLOW_TASK_TYPE_UNSPECIFIED WorkflowTaskType = 0 + WORKFLOW_TASK_TYPE_NORMAL WorkflowTaskType = 1 + // TODO (alex): TRANSIENT is not current used. Needs to be set when Attempt>1. + WORKFLOW_TASK_TYPE_TRANSIENT WorkflowTaskType = 2 + WORKFLOW_TASK_TYPE_SPECULATIVE WorkflowTaskType = 3 +) + +var WorkflowTaskType_name = map[int32]string{ + 0: "Unspecified", + 1: "Normal", + 2: "Transient", + 3: "Speculative", +} + +var WorkflowTaskType_value = map[string]int32{ + "Unspecified": 0, + "Normal": 1, + "Transient": 2, + "Speculative": 3, +} + +func (WorkflowTaskType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_c9364840fefcb74c, []int{0} +} + +func init() { + proto.RegisterEnum("temporal.server.api.enums.v1.WorkflowTaskType", WorkflowTaskType_name, WorkflowTaskType_value) +} + +func init() { + proto.RegisterFile("temporal/server/api/enums/v1/workflow_task_type.proto", fileDescriptor_c9364840fefcb74c) +} + +var fileDescriptor_c9364840fefcb74c = []byte{ + // 270 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x2d, 0x49, 0xcd, 0x2d, + 0xc8, 0x2f, 0x4a, 0xcc, 0xd1, 0x2f, 0x4e, 0x2d, 0x2a, 0x4b, 0x2d, 0xd2, 0x4f, 0x2c, 0xc8, 0xd4, + 0x4f, 0xcd, 0x2b, 0xcd, 0x2d, 0xd6, 0x2f, 0x33, 0xd4, 0x2f, 0xcf, 0x2f, 0xca, 0x4e, 0xcb, 0xc9, + 0x2f, 0x8f, 0x2f, 0x49, 0x2c, 0xce, 0x8e, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x2b, 0x28, 0xca, 0x2f, + 0xc9, 0x17, 0x92, 0x81, 0x69, 0xd3, 0x83, 0x68, 0xd3, 0x4b, 0x2c, 0xc8, 0xd4, 0x03, 0x6b, 0xd3, + 0x2b, 0x33, 0xd4, 0x9a, 0xcd, 0xc8, 0x25, 0x10, 0x0e, 0xd5, 0x1a, 0x92, 0x58, 0x9c, 0x1d, 0x52, + 0x59, 0x90, 0x2a, 0xa4, 0xc4, 0x25, 0x17, 0xee, 0x1f, 0xe4, 0xed, 0xe6, 0xe3, 0x1f, 0x1e, 0x1f, + 0xe2, 0x18, 0xec, 0x1d, 0x1f, 0x12, 0x19, 0xe0, 0x1a, 0x1f, 0xea, 0x17, 0x1c, 0xe0, 0xea, 0xec, + 0xe9, 0xe6, 0xe9, 0xea, 0x22, 0xc0, 0x20, 0x24, 0xcb, 0x25, 0x89, 0x45, 0x8d, 0x9f, 0x7f, 0x90, + 0xaf, 0xa3, 0x8f, 0x00, 0xa3, 0x90, 0x02, 0x97, 0x0c, 0x16, 0xe9, 0x90, 0x20, 0x47, 0xbf, 0x60, + 0x4f, 0x57, 0xbf, 0x10, 0x01, 0x26, 0x1c, 0x96, 0x80, 0xac, 0x08, 0xf5, 0x71, 0x0c, 0xf1, 0x0c, + 0x73, 0x15, 0x60, 0x76, 0x8a, 0xbb, 0xf0, 0x50, 0x8e, 0xe1, 0xc6, 0x43, 0x39, 0x86, 0x0f, 0x0f, + 0xe5, 0x18, 0x1b, 0x1e, 0xc9, 0x31, 0xae, 0x78, 0x24, 0xc7, 0x78, 0xe2, 0x91, 0x1c, 0xe3, 0x85, + 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0xbe, 0x78, 0x24, 0xc7, 0xf0, 0xe1, 0x91, 0x1c, 0xe3, + 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0xa5, 0x91, 0x9e, + 0xaf, 0x07, 0xf7, 0x74, 0x66, 0x3e, 0xb6, 0xe0, 0xb2, 0x06, 0x33, 0x92, 0xd8, 0xc0, 0x41, 0x64, + 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x11, 0xba, 0xfa, 0x5b, 0x01, 0x00, 0x00, +} + +func (x WorkflowTaskType) String() string { + s, ok := WorkflowTaskType_name[int32(x)] + if ok { + return s + } + return strconv.Itoa(int(x)) +} diff --git a/api/persistence/v1/executions.pb.go b/api/persistence/v1/executions.pb.go index fb7f5e4f81d..344fec9ceac 100644 --- a/api/persistence/v1/executions.pb.go +++ b/api/persistence/v1/executions.pb.go @@ -43,13 +43,13 @@ import ( github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" _ "github.com/gogo/protobuf/types" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - v11 "go.temporal.io/api/common/v1" + v12 "go.temporal.io/api/common/v1" v15 "go.temporal.io/api/enums/v1" v16 "go.temporal.io/api/failure/v1" - v1 "go.temporal.io/api/workflow/v1" - v13 "go.temporal.io/server/api/clock/v1" - v14 "go.temporal.io/server/api/enums/v1" - v12 "go.temporal.io/server/api/history/v1" + v11 "go.temporal.io/api/workflow/v1" + v14 "go.temporal.io/server/api/clock/v1" + v1 "go.temporal.io/server/api/enums/v1" + v13 "go.temporal.io/server/api/history/v1" ) // Reference imports to suppress errors if they are not otherwise used. @@ -177,35 +177,37 @@ func (m *ShardInfo) GetQueueStates() map[int32]*QueueState { // execution column type WorkflowExecutionInfo struct { - NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` - WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` - ParentNamespaceId string `protobuf:"bytes,3,opt,name=parent_namespace_id,json=parentNamespaceId,proto3" json:"parent_namespace_id,omitempty"` - ParentWorkflowId string `protobuf:"bytes,4,opt,name=parent_workflow_id,json=parentWorkflowId,proto3" json:"parent_workflow_id,omitempty"` - ParentRunId string `protobuf:"bytes,5,opt,name=parent_run_id,json=parentRunId,proto3" json:"parent_run_id,omitempty"` - ParentInitiatedId int64 `protobuf:"varint,6,opt,name=parent_initiated_id,json=parentInitiatedId,proto3" json:"parent_initiated_id,omitempty"` - CompletionEventBatchId int64 `protobuf:"varint,7,opt,name=completion_event_batch_id,json=completionEventBatchId,proto3" json:"completion_event_batch_id,omitempty"` - TaskQueue string `protobuf:"bytes,9,opt,name=task_queue,json=taskQueue,proto3" json:"task_queue,omitempty"` - WorkflowTypeName string `protobuf:"bytes,10,opt,name=workflow_type_name,json=workflowTypeName,proto3" json:"workflow_type_name,omitempty"` - WorkflowExecutionTimeout *time.Duration `protobuf:"bytes,11,opt,name=workflow_execution_timeout,json=workflowExecutionTimeout,proto3,stdduration" json:"workflow_execution_timeout,omitempty"` - WorkflowRunTimeout *time.Duration `protobuf:"bytes,12,opt,name=workflow_run_timeout,json=workflowRunTimeout,proto3,stdduration" json:"workflow_run_timeout,omitempty"` - DefaultWorkflowTaskTimeout *time.Duration `protobuf:"bytes,13,opt,name=default_workflow_task_timeout,json=defaultWorkflowTaskTimeout,proto3,stdduration" json:"default_workflow_task_timeout,omitempty"` - LastEventTaskId int64 `protobuf:"varint,17,opt,name=last_event_task_id,json=lastEventTaskId,proto3" json:"last_event_task_id,omitempty"` - LastFirstEventId int64 `protobuf:"varint,18,opt,name=last_first_event_id,json=lastFirstEventId,proto3" json:"last_first_event_id,omitempty"` - LastWorkflowTaskStartedEventId int64 `protobuf:"varint,19,opt,name=last_workflow_task_started_event_id,json=lastWorkflowTaskStartedEventId,proto3" json:"last_workflow_task_started_event_id,omitempty"` - StartTime *time.Time `protobuf:"bytes,20,opt,name=start_time,json=startTime,proto3,stdtime" json:"start_time,omitempty"` - LastUpdateTime *time.Time `protobuf:"bytes,21,opt,name=last_update_time,json=lastUpdateTime,proto3,stdtime" json:"last_update_time,omitempty"` - WorkflowTaskVersion int64 `protobuf:"varint,22,opt,name=workflow_task_version,json=workflowTaskVersion,proto3" json:"workflow_task_version,omitempty"` - WorkflowTaskScheduledEventId int64 `protobuf:"varint,23,opt,name=workflow_task_scheduled_event_id,json=workflowTaskScheduledEventId,proto3" json:"workflow_task_scheduled_event_id,omitempty"` - WorkflowTaskStartedEventId int64 `protobuf:"varint,24,opt,name=workflow_task_started_event_id,json=workflowTaskStartedEventId,proto3" json:"workflow_task_started_event_id,omitempty"` - WorkflowTaskTimeout *time.Duration `protobuf:"bytes,25,opt,name=workflow_task_timeout,json=workflowTaskTimeout,proto3,stdduration" json:"workflow_task_timeout,omitempty"` - WorkflowTaskAttempt int32 `protobuf:"varint,26,opt,name=workflow_task_attempt,json=workflowTaskAttempt,proto3" json:"workflow_task_attempt,omitempty"` - WorkflowTaskStartedTime *time.Time `protobuf:"bytes,27,opt,name=workflow_task_started_time,json=workflowTaskStartedTime,proto3,stdtime" json:"workflow_task_started_time,omitempty"` - WorkflowTaskScheduledTime *time.Time `protobuf:"bytes,28,opt,name=workflow_task_scheduled_time,json=workflowTaskScheduledTime,proto3,stdtime" json:"workflow_task_scheduled_time,omitempty"` - CancelRequested bool `protobuf:"varint,29,opt,name=cancel_requested,json=cancelRequested,proto3" json:"cancel_requested,omitempty"` - WorkflowTaskOriginalScheduledTime *time.Time `protobuf:"bytes,30,opt,name=workflow_task_original_scheduled_time,json=workflowTaskOriginalScheduledTime,proto3,stdtime" json:"workflow_task_original_scheduled_time,omitempty"` - WorkflowTaskRequestId string `protobuf:"bytes,31,opt,name=workflow_task_request_id,json=workflowTaskRequestId,proto3" json:"workflow_task_request_id,omitempty"` - CancelRequestId string `protobuf:"bytes,32,opt,name=cancel_request_id,json=cancelRequestId,proto3" json:"cancel_request_id,omitempty"` - StickyTaskQueue string `protobuf:"bytes,33,opt,name=sticky_task_queue,json=stickyTaskQueue,proto3" json:"sticky_task_queue,omitempty"` + NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` + ParentNamespaceId string `protobuf:"bytes,3,opt,name=parent_namespace_id,json=parentNamespaceId,proto3" json:"parent_namespace_id,omitempty"` + ParentWorkflowId string `protobuf:"bytes,4,opt,name=parent_workflow_id,json=parentWorkflowId,proto3" json:"parent_workflow_id,omitempty"` + ParentRunId string `protobuf:"bytes,5,opt,name=parent_run_id,json=parentRunId,proto3" json:"parent_run_id,omitempty"` + ParentInitiatedId int64 `protobuf:"varint,6,opt,name=parent_initiated_id,json=parentInitiatedId,proto3" json:"parent_initiated_id,omitempty"` + CompletionEventBatchId int64 `protobuf:"varint,7,opt,name=completion_event_batch_id,json=completionEventBatchId,proto3" json:"completion_event_batch_id,omitempty"` + TaskQueue string `protobuf:"bytes,9,opt,name=task_queue,json=taskQueue,proto3" json:"task_queue,omitempty"` + WorkflowTypeName string `protobuf:"bytes,10,opt,name=workflow_type_name,json=workflowTypeName,proto3" json:"workflow_type_name,omitempty"` + WorkflowExecutionTimeout *time.Duration `protobuf:"bytes,11,opt,name=workflow_execution_timeout,json=workflowExecutionTimeout,proto3,stdduration" json:"workflow_execution_timeout,omitempty"` + WorkflowRunTimeout *time.Duration `protobuf:"bytes,12,opt,name=workflow_run_timeout,json=workflowRunTimeout,proto3,stdduration" json:"workflow_run_timeout,omitempty"` + DefaultWorkflowTaskTimeout *time.Duration `protobuf:"bytes,13,opt,name=default_workflow_task_timeout,json=defaultWorkflowTaskTimeout,proto3,stdduration" json:"default_workflow_task_timeout,omitempty"` + LastEventTaskId int64 `protobuf:"varint,17,opt,name=last_event_task_id,json=lastEventTaskId,proto3" json:"last_event_task_id,omitempty"` + LastFirstEventId int64 `protobuf:"varint,18,opt,name=last_first_event_id,json=lastFirstEventId,proto3" json:"last_first_event_id,omitempty"` + LastWorkflowTaskStartedEventId int64 `protobuf:"varint,19,opt,name=last_workflow_task_started_event_id,json=lastWorkflowTaskStartedEventId,proto3" json:"last_workflow_task_started_event_id,omitempty"` + StartTime *time.Time `protobuf:"bytes,20,opt,name=start_time,json=startTime,proto3,stdtime" json:"start_time,omitempty"` + LastUpdateTime *time.Time `protobuf:"bytes,21,opt,name=last_update_time,json=lastUpdateTime,proto3,stdtime" json:"last_update_time,omitempty"` + // Workflow task fields. + WorkflowTaskVersion int64 `protobuf:"varint,22,opt,name=workflow_task_version,json=workflowTaskVersion,proto3" json:"workflow_task_version,omitempty"` + WorkflowTaskScheduledEventId int64 `protobuf:"varint,23,opt,name=workflow_task_scheduled_event_id,json=workflowTaskScheduledEventId,proto3" json:"workflow_task_scheduled_event_id,omitempty"` + WorkflowTaskStartedEventId int64 `protobuf:"varint,24,opt,name=workflow_task_started_event_id,json=workflowTaskStartedEventId,proto3" json:"workflow_task_started_event_id,omitempty"` + WorkflowTaskTimeout *time.Duration `protobuf:"bytes,25,opt,name=workflow_task_timeout,json=workflowTaskTimeout,proto3,stdduration" json:"workflow_task_timeout,omitempty"` + WorkflowTaskAttempt int32 `protobuf:"varint,26,opt,name=workflow_task_attempt,json=workflowTaskAttempt,proto3" json:"workflow_task_attempt,omitempty"` + WorkflowTaskStartedTime *time.Time `protobuf:"bytes,27,opt,name=workflow_task_started_time,json=workflowTaskStartedTime,proto3,stdtime" json:"workflow_task_started_time,omitempty"` + WorkflowTaskScheduledTime *time.Time `protobuf:"bytes,28,opt,name=workflow_task_scheduled_time,json=workflowTaskScheduledTime,proto3,stdtime" json:"workflow_task_scheduled_time,omitempty"` + WorkflowTaskOriginalScheduledTime *time.Time `protobuf:"bytes,30,opt,name=workflow_task_original_scheduled_time,json=workflowTaskOriginalScheduledTime,proto3,stdtime" json:"workflow_task_original_scheduled_time,omitempty"` + WorkflowTaskRequestId string `protobuf:"bytes,31,opt,name=workflow_task_request_id,json=workflowTaskRequestId,proto3" json:"workflow_task_request_id,omitempty"` + WorkflowTaskType v1.WorkflowTaskType `protobuf:"varint,68,opt,name=workflow_task_type,json=workflowTaskType,proto3,enum=temporal.server.api.enums.v1.WorkflowTaskType" json:"workflow_task_type,omitempty"` + CancelRequested bool `protobuf:"varint,29,opt,name=cancel_requested,json=cancelRequested,proto3" json:"cancel_requested,omitempty"` + CancelRequestId string `protobuf:"bytes,32,opt,name=cancel_request_id,json=cancelRequestId,proto3" json:"cancel_request_id,omitempty"` + StickyTaskQueue string `protobuf:"bytes,33,opt,name=sticky_task_queue,json=stickyTaskQueue,proto3" json:"sticky_task_queue,omitempty"` // (-- api-linter: core::0140::prepositions=disabled // aip.dev/not-precedent: "to" is used to indicate interval. --) StickyScheduleToStartTimeout *time.Duration `protobuf:"bytes,34,opt,name=sticky_schedule_to_start_timeout,json=stickyScheduleToStartTimeout,proto3,stdduration" json:"sticky_schedule_to_start_timeout,omitempty"` @@ -219,10 +221,10 @@ type WorkflowExecutionInfo struct { HasRetryPolicy bool `protobuf:"varint,42,opt,name=has_retry_policy,json=hasRetryPolicy,proto3" json:"has_retry_policy,omitempty"` CronSchedule string `protobuf:"bytes,43,opt,name=cron_schedule,json=cronSchedule,proto3" json:"cron_schedule,omitempty"` SignalCount int64 `protobuf:"varint,46,opt,name=signal_count,json=signalCount,proto3" json:"signal_count,omitempty"` - AutoResetPoints *v1.ResetPoints `protobuf:"bytes,51,opt,name=auto_reset_points,json=autoResetPoints,proto3" json:"auto_reset_points,omitempty"` - SearchAttributes map[string]*v11.Payload `protobuf:"bytes,52,rep,name=search_attributes,json=searchAttributes,proto3" json:"search_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Memo map[string]*v11.Payload `protobuf:"bytes,53,rep,name=memo,proto3" json:"memo,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - VersionHistories *v12.VersionHistories `protobuf:"bytes,54,opt,name=version_histories,json=versionHistories,proto3" json:"version_histories,omitempty"` + AutoResetPoints *v11.ResetPoints `protobuf:"bytes,51,opt,name=auto_reset_points,json=autoResetPoints,proto3" json:"auto_reset_points,omitempty"` + SearchAttributes map[string]*v12.Payload `protobuf:"bytes,52,rep,name=search_attributes,json=searchAttributes,proto3" json:"search_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Memo map[string]*v12.Payload `protobuf:"bytes,53,rep,name=memo,proto3" json:"memo,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + VersionHistories *v13.VersionHistories `protobuf:"bytes,54,opt,name=version_histories,json=versionHistories,proto3" json:"version_histories,omitempty"` FirstExecutionRunId string `protobuf:"bytes,55,opt,name=first_execution_run_id,json=firstExecutionRunId,proto3" json:"first_execution_run_id,omitempty"` ExecutionStats *ExecutionStats `protobuf:"bytes,56,opt,name=execution_stats,json=executionStats,proto3" json:"execution_stats,omitempty"` WorkflowRunExpirationTime *time.Time `protobuf:"bytes,57,opt,name=workflow_run_expiration_time,json=workflowRunExpirationTime,proto3,stdtime" json:"workflow_run_expiration_time,omitempty"` @@ -232,7 +234,7 @@ type WorkflowExecutionInfo struct { ExecutionTime *time.Time `protobuf:"bytes,60,opt,name=execution_time,json=executionTime,proto3,stdtime" json:"execution_time,omitempty"` // If continued-as-new, or retried, or cron, holds the new run id. NewExecutionRunId string `protobuf:"bytes,61,opt,name=new_execution_run_id,json=newExecutionRunId,proto3" json:"new_execution_run_id,omitempty"` - ParentClock *v13.VectorClock `protobuf:"bytes,62,opt,name=parent_clock,json=parentClock,proto3" json:"parent_clock,omitempty"` + ParentClock *v14.VectorClock `protobuf:"bytes,62,opt,name=parent_clock,json=parentClock,proto3" json:"parent_clock,omitempty"` // version of child execution initiated event in parent workflow ParentInitiatedVersion int64 `protobuf:"varint,63,opt,name=parent_initiated_version,json=parentInitiatedVersion,proto3" json:"parent_initiated_version,omitempty"` // Used to check if transfer close task is processed before deleting the workflow execution. @@ -443,13 +445,6 @@ func (m *WorkflowExecutionInfo) GetWorkflowTaskScheduledTime() *time.Time { return nil } -func (m *WorkflowExecutionInfo) GetCancelRequested() bool { - if m != nil { - return m.CancelRequested - } - return false -} - func (m *WorkflowExecutionInfo) GetWorkflowTaskOriginalScheduledTime() *time.Time { if m != nil { return m.WorkflowTaskOriginalScheduledTime @@ -464,6 +459,20 @@ func (m *WorkflowExecutionInfo) GetWorkflowTaskRequestId() string { return "" } +func (m *WorkflowExecutionInfo) GetWorkflowTaskType() v1.WorkflowTaskType { + if m != nil { + return m.WorkflowTaskType + } + return v1.WORKFLOW_TASK_TYPE_UNSPECIFIED +} + +func (m *WorkflowExecutionInfo) GetCancelRequested() bool { + if m != nil { + return m.CancelRequested + } + return false +} + func (m *WorkflowExecutionInfo) GetCancelRequestId() string { if m != nil { return m.CancelRequestId @@ -555,28 +564,28 @@ func (m *WorkflowExecutionInfo) GetSignalCount() int64 { return 0 } -func (m *WorkflowExecutionInfo) GetAutoResetPoints() *v1.ResetPoints { +func (m *WorkflowExecutionInfo) GetAutoResetPoints() *v11.ResetPoints { if m != nil { return m.AutoResetPoints } return nil } -func (m *WorkflowExecutionInfo) GetSearchAttributes() map[string]*v11.Payload { +func (m *WorkflowExecutionInfo) GetSearchAttributes() map[string]*v12.Payload { if m != nil { return m.SearchAttributes } return nil } -func (m *WorkflowExecutionInfo) GetMemo() map[string]*v11.Payload { +func (m *WorkflowExecutionInfo) GetMemo() map[string]*v12.Payload { if m != nil { return m.Memo } return nil } -func (m *WorkflowExecutionInfo) GetVersionHistories() *v12.VersionHistories { +func (m *WorkflowExecutionInfo) GetVersionHistories() *v13.VersionHistories { if m != nil { return m.VersionHistories } @@ -632,7 +641,7 @@ func (m *WorkflowExecutionInfo) GetNewExecutionRunId() string { return "" } -func (m *WorkflowExecutionInfo) GetParentClock() *v13.VectorClock { +func (m *WorkflowExecutionInfo) GetParentClock() *v14.VectorClock { if m != nil { return m.ParentClock } @@ -721,7 +730,7 @@ func (m *ExecutionStats) GetHistorySize() int64 { type WorkflowExecutionState struct { CreateRequestId string `protobuf:"bytes,1,opt,name=create_request_id,json=createRequestId,proto3" json:"create_request_id,omitempty"` RunId string `protobuf:"bytes,2,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - State v14.WorkflowExecutionState `protobuf:"varint,3,opt,name=state,proto3,enum=temporal.server.api.enums.v1.WorkflowExecutionState" json:"state,omitempty"` + State v1.WorkflowExecutionState `protobuf:"varint,3,opt,name=state,proto3,enum=temporal.server.api.enums.v1.WorkflowExecutionState" json:"state,omitempty"` Status v15.WorkflowExecutionStatus `protobuf:"varint,4,opt,name=status,proto3,enum=temporal.api.enums.v1.WorkflowExecutionStatus" json:"status,omitempty"` } @@ -771,11 +780,11 @@ func (m *WorkflowExecutionState) GetRunId() string { return "" } -func (m *WorkflowExecutionState) GetState() v14.WorkflowExecutionState { +func (m *WorkflowExecutionState) GetState() v1.WorkflowExecutionState { if m != nil { return m.State } - return v14.WORKFLOW_EXECUTION_STATE_UNSPECIFIED + return v1.WORKFLOW_EXECUTION_STATE_UNSPECIFIED } func (m *WorkflowExecutionState) GetStatus() v15.WorkflowExecutionStatus { @@ -787,19 +796,19 @@ func (m *WorkflowExecutionState) GetStatus() v15.WorkflowExecutionStatus { // transfer column type TransferTaskInfo struct { - NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` - WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` - RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - TaskType v14.TaskType `protobuf:"varint,4,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` - TargetNamespaceId string `protobuf:"bytes,5,opt,name=target_namespace_id,json=targetNamespaceId,proto3" json:"target_namespace_id,omitempty"` - TargetWorkflowId string `protobuf:"bytes,6,opt,name=target_workflow_id,json=targetWorkflowId,proto3" json:"target_workflow_id,omitempty"` - TargetRunId string `protobuf:"bytes,7,opt,name=target_run_id,json=targetRunId,proto3" json:"target_run_id,omitempty"` - TaskQueue string `protobuf:"bytes,8,opt,name=task_queue,json=taskQueue,proto3" json:"task_queue,omitempty"` - TargetChildWorkflowOnly bool `protobuf:"varint,9,opt,name=target_child_workflow_only,json=targetChildWorkflowOnly,proto3" json:"target_child_workflow_only,omitempty"` - ScheduledEventId int64 `protobuf:"varint,10,opt,name=scheduled_event_id,json=scheduledEventId,proto3" json:"scheduled_event_id,omitempty"` - Version int64 `protobuf:"varint,11,opt,name=version,proto3" json:"version,omitempty"` - TaskId int64 `protobuf:"varint,12,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - VisibilityTime *time.Time `protobuf:"bytes,13,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` + NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` + RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + TaskType v1.TaskType `protobuf:"varint,4,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` + TargetNamespaceId string `protobuf:"bytes,5,opt,name=target_namespace_id,json=targetNamespaceId,proto3" json:"target_namespace_id,omitempty"` + TargetWorkflowId string `protobuf:"bytes,6,opt,name=target_workflow_id,json=targetWorkflowId,proto3" json:"target_workflow_id,omitempty"` + TargetRunId string `protobuf:"bytes,7,opt,name=target_run_id,json=targetRunId,proto3" json:"target_run_id,omitempty"` + TaskQueue string `protobuf:"bytes,8,opt,name=task_queue,json=taskQueue,proto3" json:"task_queue,omitempty"` + TargetChildWorkflowOnly bool `protobuf:"varint,9,opt,name=target_child_workflow_only,json=targetChildWorkflowOnly,proto3" json:"target_child_workflow_only,omitempty"` + ScheduledEventId int64 `protobuf:"varint,10,opt,name=scheduled_event_id,json=scheduledEventId,proto3" json:"scheduled_event_id,omitempty"` + Version int64 `protobuf:"varint,11,opt,name=version,proto3" json:"version,omitempty"` + TaskId int64 `protobuf:"varint,12,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + VisibilityTime *time.Time `protobuf:"bytes,13,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` // (-- api-linter: core::0140::prepositions=disabled // aip.dev/not-precedent: "after" is used to indicate sequence of actions. --) DeleteAfterClose bool `protobuf:"varint,15,opt,name=delete_after_close,json=deleteAfterClose,proto3" json:"delete_after_close,omitempty"` @@ -881,11 +890,11 @@ func (m *TransferTaskInfo) GetRunId() string { return "" } -func (m *TransferTaskInfo) GetTaskType() v14.TaskType { +func (m *TransferTaskInfo) GetTaskType() v1.TaskType { if m != nil { return m.TaskType } - return v14.TASK_TYPE_UNSPECIFIED + return v1.TASK_TYPE_UNSPECIFIED } func (m *TransferTaskInfo) GetTargetNamespaceId() string { @@ -1021,19 +1030,19 @@ func (m *TransferTaskInfo_CloseExecutionTaskDetails) GetCanSkipVisibilityArchiva // replication column type ReplicationTaskInfo struct { - NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` - WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` - RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - TaskType v14.TaskType `protobuf:"varint,4,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` - Version int64 `protobuf:"varint,5,opt,name=version,proto3" json:"version,omitempty"` - FirstEventId int64 `protobuf:"varint,6,opt,name=first_event_id,json=firstEventId,proto3" json:"first_event_id,omitempty"` - NextEventId int64 `protobuf:"varint,7,opt,name=next_event_id,json=nextEventId,proto3" json:"next_event_id,omitempty"` - ScheduledEventId int64 `protobuf:"varint,8,opt,name=scheduled_event_id,json=scheduledEventId,proto3" json:"scheduled_event_id,omitempty"` - BranchToken []byte `protobuf:"bytes,11,opt,name=branch_token,json=branchToken,proto3" json:"branch_token,omitempty"` - NewRunBranchToken []byte `protobuf:"bytes,13,opt,name=new_run_branch_token,json=newRunBranchToken,proto3" json:"new_run_branch_token,omitempty"` - TaskId int64 `protobuf:"varint,15,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - VisibilityTime *time.Time `protobuf:"bytes,16,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` - NewRunId string `protobuf:"bytes,17,opt,name=new_run_id,json=newRunId,proto3" json:"new_run_id,omitempty"` + NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` + RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + TaskType v1.TaskType `protobuf:"varint,4,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` + Version int64 `protobuf:"varint,5,opt,name=version,proto3" json:"version,omitempty"` + FirstEventId int64 `protobuf:"varint,6,opt,name=first_event_id,json=firstEventId,proto3" json:"first_event_id,omitempty"` + NextEventId int64 `protobuf:"varint,7,opt,name=next_event_id,json=nextEventId,proto3" json:"next_event_id,omitempty"` + ScheduledEventId int64 `protobuf:"varint,8,opt,name=scheduled_event_id,json=scheduledEventId,proto3" json:"scheduled_event_id,omitempty"` + BranchToken []byte `protobuf:"bytes,11,opt,name=branch_token,json=branchToken,proto3" json:"branch_token,omitempty"` + NewRunBranchToken []byte `protobuf:"bytes,13,opt,name=new_run_branch_token,json=newRunBranchToken,proto3" json:"new_run_branch_token,omitempty"` + TaskId int64 `protobuf:"varint,15,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + VisibilityTime *time.Time `protobuf:"bytes,16,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` + NewRunId string `protobuf:"bytes,17,opt,name=new_run_id,json=newRunId,proto3" json:"new_run_id,omitempty"` } func (m *ReplicationTaskInfo) Reset() { *m = ReplicationTaskInfo{} } @@ -1089,11 +1098,11 @@ func (m *ReplicationTaskInfo) GetRunId() string { return "" } -func (m *ReplicationTaskInfo) GetTaskType() v14.TaskType { +func (m *ReplicationTaskInfo) GetTaskType() v1.TaskType { if m != nil { return m.TaskType } - return v14.TASK_TYPE_UNSPECIFIED + return v1.TASK_TYPE_UNSPECIFIED } func (m *ReplicationTaskInfo) GetVersion() int64 { @@ -1161,16 +1170,16 @@ func (m *ReplicationTaskInfo) GetNewRunId() string { // visibility_task_data column type VisibilityTaskInfo struct { - NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` - WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` - RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - TaskType v14.TaskType `protobuf:"varint,4,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` - Version int64 `protobuf:"varint,5,opt,name=version,proto3" json:"version,omitempty"` - TaskId int64 `protobuf:"varint,6,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - VisibilityTime *time.Time `protobuf:"bytes,7,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` - CloseTime *time.Time `protobuf:"bytes,8,opt,name=close_time,json=closeTime,proto3,stdtime" json:"close_time,omitempty"` - StartTime *time.Time `protobuf:"bytes,9,opt,name=start_time,json=startTime,proto3,stdtime" json:"start_time,omitempty"` - CloseVisibilityTaskId int64 `protobuf:"varint,10,opt,name=close_visibility_task_id,json=closeVisibilityTaskId,proto3" json:"close_visibility_task_id,omitempty"` + NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` + RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + TaskType v1.TaskType `protobuf:"varint,4,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` + Version int64 `protobuf:"varint,5,opt,name=version,proto3" json:"version,omitempty"` + TaskId int64 `protobuf:"varint,6,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + VisibilityTime *time.Time `protobuf:"bytes,7,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` + CloseTime *time.Time `protobuf:"bytes,8,opt,name=close_time,json=closeTime,proto3,stdtime" json:"close_time,omitempty"` + StartTime *time.Time `protobuf:"bytes,9,opt,name=start_time,json=startTime,proto3,stdtime" json:"start_time,omitempty"` + CloseVisibilityTaskId int64 `protobuf:"varint,10,opt,name=close_visibility_task_id,json=closeVisibilityTaskId,proto3" json:"close_visibility_task_id,omitempty"` } func (m *VisibilityTaskInfo) Reset() { *m = VisibilityTaskInfo{} } @@ -1226,11 +1235,11 @@ func (m *VisibilityTaskInfo) GetRunId() string { return "" } -func (m *VisibilityTaskInfo) GetTaskType() v14.TaskType { +func (m *VisibilityTaskInfo) GetTaskType() v1.TaskType { if m != nil { return m.TaskType } - return v14.TASK_TYPE_UNSPECIFIED + return v1.TASK_TYPE_UNSPECIFIED } func (m *VisibilityTaskInfo) GetVersion() int64 { @@ -1277,18 +1286,18 @@ func (m *VisibilityTaskInfo) GetCloseVisibilityTaskId() int64 { // timer column type TimerTaskInfo struct { - NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` - WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` - RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - TaskType v14.TaskType `protobuf:"varint,4,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` - TimeoutType v15.TimeoutType `protobuf:"varint,5,opt,name=timeout_type,json=timeoutType,proto3,enum=temporal.api.enums.v1.TimeoutType" json:"timeout_type,omitempty"` - WorkflowBackoffType v14.WorkflowBackoffType `protobuf:"varint,6,opt,name=workflow_backoff_type,json=workflowBackoffType,proto3,enum=temporal.server.api.enums.v1.WorkflowBackoffType" json:"workflow_backoff_type,omitempty"` - Version int64 `protobuf:"varint,7,opt,name=version,proto3" json:"version,omitempty"` - ScheduleAttempt int32 `protobuf:"varint,8,opt,name=schedule_attempt,json=scheduleAttempt,proto3" json:"schedule_attempt,omitempty"` - EventId int64 `protobuf:"varint,9,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` - TaskId int64 `protobuf:"varint,10,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - VisibilityTime *time.Time `protobuf:"bytes,11,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` - BranchToken []byte `protobuf:"bytes,12,opt,name=branch_token,json=branchToken,proto3" json:"branch_token,omitempty"` + NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` + RunId string `protobuf:"bytes,3,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + TaskType v1.TaskType `protobuf:"varint,4,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` + TimeoutType v15.TimeoutType `protobuf:"varint,5,opt,name=timeout_type,json=timeoutType,proto3,enum=temporal.api.enums.v1.TimeoutType" json:"timeout_type,omitempty"` + WorkflowBackoffType v1.WorkflowBackoffType `protobuf:"varint,6,opt,name=workflow_backoff_type,json=workflowBackoffType,proto3,enum=temporal.server.api.enums.v1.WorkflowBackoffType" json:"workflow_backoff_type,omitempty"` + Version int64 `protobuf:"varint,7,opt,name=version,proto3" json:"version,omitempty"` + ScheduleAttempt int32 `protobuf:"varint,8,opt,name=schedule_attempt,json=scheduleAttempt,proto3" json:"schedule_attempt,omitempty"` + EventId int64 `protobuf:"varint,9,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"` + TaskId int64 `protobuf:"varint,10,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + VisibilityTime *time.Time `protobuf:"bytes,11,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` + BranchToken []byte `protobuf:"bytes,12,opt,name=branch_token,json=branchToken,proto3" json:"branch_token,omitempty"` // If this is true, we can bypass archival before deleting. Only defined for DeleteHistoryEventTasks. AlreadyArchived bool `protobuf:"varint,13,opt,name=already_archived,json=alreadyArchived,proto3" json:"already_archived,omitempty"` } @@ -1346,11 +1355,11 @@ func (m *TimerTaskInfo) GetRunId() string { return "" } -func (m *TimerTaskInfo) GetTaskType() v14.TaskType { +func (m *TimerTaskInfo) GetTaskType() v1.TaskType { if m != nil { return m.TaskType } - return v14.TASK_TYPE_UNSPECIFIED + return v1.TASK_TYPE_UNSPECIFIED } func (m *TimerTaskInfo) GetTimeoutType() v15.TimeoutType { @@ -1360,11 +1369,11 @@ func (m *TimerTaskInfo) GetTimeoutType() v15.TimeoutType { return v15.TIMEOUT_TYPE_UNSPECIFIED } -func (m *TimerTaskInfo) GetWorkflowBackoffType() v14.WorkflowBackoffType { +func (m *TimerTaskInfo) GetWorkflowBackoffType() v1.WorkflowBackoffType { if m != nil { return m.WorkflowBackoffType } - return v14.WORKFLOW_BACKOFF_TYPE_UNSPECIFIED + return v1.WORKFLOW_BACKOFF_TYPE_UNSPECIFIED } func (m *TimerTaskInfo) GetVersion() int64 { @@ -1417,13 +1426,13 @@ func (m *TimerTaskInfo) GetAlreadyArchived() bool { } type ArchivalTaskInfo struct { - TaskId int64 `protobuf:"varint,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` - NamespaceId string `protobuf:"bytes,2,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` - WorkflowId string `protobuf:"bytes,3,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` - RunId string `protobuf:"bytes,4,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` - TaskType v14.TaskType `protobuf:"varint,5,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` - Version int64 `protobuf:"varint,6,opt,name=version,proto3" json:"version,omitempty"` - VisibilityTime *time.Time `protobuf:"bytes,7,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` + TaskId int64 `protobuf:"varint,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + NamespaceId string `protobuf:"bytes,2,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + WorkflowId string `protobuf:"bytes,3,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` + RunId string `protobuf:"bytes,4,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"` + TaskType v1.TaskType `protobuf:"varint,5,opt,name=task_type,json=taskType,proto3,enum=temporal.server.api.enums.v1.TaskType" json:"task_type,omitempty"` + Version int64 `protobuf:"varint,6,opt,name=version,proto3" json:"version,omitempty"` + VisibilityTime *time.Time `protobuf:"bytes,7,opt,name=visibility_time,json=visibilityTime,proto3,stdtime" json:"visibility_time,omitempty"` } func (m *ArchivalTaskInfo) Reset() { *m = ArchivalTaskInfo{} } @@ -1486,11 +1495,11 @@ func (m *ArchivalTaskInfo) GetRunId() string { return "" } -func (m *ArchivalTaskInfo) GetTaskType() v14.TaskType { +func (m *ArchivalTaskInfo) GetTaskType() v1.TaskType { if m != nil { return m.TaskType } - return v14.TASK_TYPE_UNSPECIFIED + return v1.TASK_TYPE_UNSPECIFIED } func (m *ArchivalTaskInfo) GetVersion() int64 { @@ -1542,7 +1551,7 @@ type ActivityInfo struct { RetryLastFailure *v16.Failure `protobuf:"bytes,27,opt,name=retry_last_failure,json=retryLastFailure,proto3" json:"retry_last_failure,omitempty"` RetryLastWorkerIdentity string `protobuf:"bytes,28,opt,name=retry_last_worker_identity,json=retryLastWorkerIdentity,proto3" json:"retry_last_worker_identity,omitempty"` ScheduledEventId int64 `protobuf:"varint,30,opt,name=scheduled_event_id,json=scheduledEventId,proto3" json:"scheduled_event_id,omitempty"` - LastHeartbeatDetails *v11.Payloads `protobuf:"bytes,31,opt,name=last_heartbeat_details,json=lastHeartbeatDetails,proto3" json:"last_heartbeat_details,omitempty"` + LastHeartbeatDetails *v12.Payloads `protobuf:"bytes,31,opt,name=last_heartbeat_details,json=lastHeartbeatDetails,proto3" json:"last_heartbeat_details,omitempty"` LastHeartbeatUpdateTime *time.Time `protobuf:"bytes,32,opt,name=last_heartbeat_update_time,json=lastHeartbeatUpdateTime,proto3,stdtime" json:"last_heartbeat_update_time,omitempty"` } @@ -1767,7 +1776,7 @@ func (m *ActivityInfo) GetScheduledEventId() int64 { return 0 } -func (m *ActivityInfo) GetLastHeartbeatDetails() *v11.Payloads { +func (m *ActivityInfo) GetLastHeartbeatDetails() *v12.Payloads { if m != nil { return m.LastHeartbeatDetails } @@ -1870,7 +1879,7 @@ type ChildExecutionInfo struct { WorkflowTypeName string `protobuf:"bytes,10,opt,name=workflow_type_name,json=workflowTypeName,proto3" json:"workflow_type_name,omitempty"` ParentClosePolicy v15.ParentClosePolicy `protobuf:"varint,11,opt,name=parent_close_policy,json=parentClosePolicy,proto3,enum=temporal.api.enums.v1.ParentClosePolicy" json:"parent_close_policy,omitempty"` InitiatedEventId int64 `protobuf:"varint,12,opt,name=initiated_event_id,json=initiatedEventId,proto3" json:"initiated_event_id,omitempty"` - Clock *v13.VectorClock `protobuf:"bytes,13,opt,name=clock,proto3" json:"clock,omitempty"` + Clock *v14.VectorClock `protobuf:"bytes,13,opt,name=clock,proto3" json:"clock,omitempty"` NamespaceId string `protobuf:"bytes,14,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` } @@ -1976,7 +1985,7 @@ func (m *ChildExecutionInfo) GetInitiatedEventId() int64 { return 0 } -func (m *ChildExecutionInfo) GetClock() *v13.VectorClock { +func (m *ChildExecutionInfo) GetClock() *v14.VectorClock { if m != nil { return m.Clock } @@ -2128,9 +2137,9 @@ func (m *SignalInfo) GetInitiatedEventId() int64 { // checksum column type Checksum struct { - Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` - Flavor v14.ChecksumFlavor `protobuf:"varint,2,opt,name=flavor,proto3,enum=temporal.server.api.enums.v1.ChecksumFlavor" json:"flavor,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + Flavor v1.ChecksumFlavor `protobuf:"varint,2,opt,name=flavor,proto3,enum=temporal.server.api.enums.v1.ChecksumFlavor" json:"flavor,omitempty"` + Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` } func (m *Checksum) Reset() { *m = Checksum{} } @@ -2172,11 +2181,11 @@ func (m *Checksum) GetVersion() int32 { return 0 } -func (m *Checksum) GetFlavor() v14.ChecksumFlavor { +func (m *Checksum) GetFlavor() v1.ChecksumFlavor { if m != nil { return m.Flavor } - return v14.CHECKSUM_FLAVOR_UNSPECIFIED + return v1.CHECKSUM_FLAVOR_UNSPECIFIED } func (m *Checksum) GetValue() []byte { @@ -2192,8 +2201,8 @@ func init() { proto.RegisterMapType((map[int32]*QueueState)(nil), "temporal.server.api.persistence.v1.ShardInfo.QueueStatesEntry") proto.RegisterMapType((map[string]int64)(nil), "temporal.server.api.persistence.v1.ShardInfo.ReplicationDlqAckLevelEntry") proto.RegisterType((*WorkflowExecutionInfo)(nil), "temporal.server.api.persistence.v1.WorkflowExecutionInfo") - proto.RegisterMapType((map[string]*v11.Payload)(nil), "temporal.server.api.persistence.v1.WorkflowExecutionInfo.MemoEntry") - proto.RegisterMapType((map[string]*v11.Payload)(nil), "temporal.server.api.persistence.v1.WorkflowExecutionInfo.SearchAttributesEntry") + proto.RegisterMapType((map[string]*v12.Payload)(nil), "temporal.server.api.persistence.v1.WorkflowExecutionInfo.MemoEntry") + proto.RegisterMapType((map[string]*v12.Payload)(nil), "temporal.server.api.persistence.v1.WorkflowExecutionInfo.SearchAttributesEntry") proto.RegisterType((*ExecutionStats)(nil), "temporal.server.api.persistence.v1.ExecutionStats") proto.RegisterType((*WorkflowExecutionState)(nil), "temporal.server.api.persistence.v1.WorkflowExecutionState") proto.RegisterType((*TransferTaskInfo)(nil), "temporal.server.api.persistence.v1.TransferTaskInfo") @@ -2215,223 +2224,225 @@ func init() { } var fileDescriptor_67a714d0e7ba9f37 = []byte{ - // 3454 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0x4d, 0x73, 0xdb, 0xd6, - 0xb5, 0xa6, 0x05, 0x89, 0xe0, 0x21, 0x45, 0x41, 0xd0, 0x17, 0xa4, 0xc8, 0x94, 0xcc, 0xd8, 0x89, - 0x9c, 0x38, 0x54, 0x24, 0x3b, 0xcf, 0xf9, 0x78, 0x2f, 0x7e, 0x92, 0x6c, 0x27, 0xe4, 0x73, 0x1c, - 0x07, 0x52, 0xe2, 0x4c, 0xde, 0xcb, 0x70, 0x20, 0xe0, 0x52, 0xc2, 0x23, 0x08, 0xd0, 0x00, 0x28, - 0x99, 0x99, 0x2e, 0xb2, 0xe8, 0x74, 0x9d, 0xee, 0xfa, 0x13, 0xba, 0xec, 0xa6, 0xfb, 0x2e, 0x32, - 0x9d, 0xae, 0x3a, 0xd9, 0x35, 0xbb, 0x36, 0xce, 0xa6, 0x9b, 0x4e, 0x32, 0xfd, 0x05, 0x9d, 0x7b, - 0xee, 0xbd, 0x20, 0x00, 0x42, 0x12, 0xe5, 0xc6, 0x8b, 0xec, 0x88, 0x7b, 0x3e, 0xee, 0x39, 0xe7, - 0x9e, 0x7b, 0xbe, 0x2e, 0xe1, 0x46, 0x48, 0x3a, 0x5d, 0xcf, 0x37, 0x9c, 0xf5, 0x80, 0xf8, 0x47, - 0xc4, 0x5f, 0x37, 0xba, 0xf6, 0x7a, 0x97, 0xf8, 0x81, 0x1d, 0x84, 0xc4, 0x35, 0xc9, 0xfa, 0xd1, - 0xc6, 0x3a, 0x79, 0x42, 0xcc, 0x5e, 0x68, 0x7b, 0x6e, 0x50, 0xeb, 0xfa, 0x5e, 0xe8, 0xa9, 0x55, - 0x41, 0x54, 0x63, 0x44, 0x35, 0xa3, 0x6b, 0xd7, 0x62, 0x44, 0xb5, 0xa3, 0x8d, 0xa5, 0xca, 0x81, - 0xe7, 0x1d, 0x38, 0x64, 0x1d, 0x29, 0xf6, 0x7b, 0xad, 0x75, 0xab, 0xe7, 0x1b, 0x94, 0x09, 0xe3, - 0xb1, 0xb4, 0x92, 0x86, 0x87, 0x76, 0x87, 0x04, 0xa1, 0xd1, 0xe9, 0x72, 0x84, 0xcb, 0x16, 0xe9, - 0x12, 0xd7, 0x22, 0xae, 0x69, 0x93, 0x60, 0xfd, 0xc0, 0x3b, 0xf0, 0x70, 0x1d, 0x7f, 0x71, 0x94, - 0x2b, 0x91, 0xf0, 0x54, 0x6a, 0xd3, 0xeb, 0x74, 0x3c, 0x97, 0x0a, 0xdc, 0x21, 0x41, 0x60, 0x1c, - 0x90, 0x4c, 0x2c, 0xe2, 0xf6, 0x3a, 0x01, 0x45, 0x3a, 0xf6, 0xfc, 0x76, 0xcb, 0xf1, 0x8e, 0x39, - 0xd6, 0xd5, 0x04, 0x56, 0xcb, 0xb0, 0x9d, 0x9e, 0x4f, 0x86, 0x99, 0xbd, 0x94, 0x40, 0x13, 0x3c, - 0x86, 0xf1, 0x5e, 0xc9, 0xb2, 0xab, 0xe9, 0x78, 0x66, 0x7b, 0x18, 0xf7, 0x5a, 0x16, 0x6e, 0x24, - 0x27, 0x53, 0x8b, 0xa3, 0xbe, 0x7a, 0x2a, 0x6a, 0x4a, 0xa5, 0x97, 0x4f, 0x45, 0x0e, 0x8d, 0xa0, - 0xcd, 0x11, 0xaf, 0x67, 0x21, 0x1e, 0xda, 0x41, 0xe8, 0xf9, 0xfd, 0x61, 0x71, 0xd7, 0x47, 0x70, - 0x99, 0xc7, 0x3d, 0xd2, 0x23, 0xdc, 0x5d, 0xaa, 0x7f, 0xcc, 0x43, 0x61, 0xf7, 0xd0, 0xf0, 0xad, - 0xba, 0xdb, 0xf2, 0xd4, 0x45, 0x90, 0x03, 0xfa, 0xd1, 0xb4, 0x2d, 0x2d, 0xb7, 0x9a, 0x5b, 0x1b, - 0xd7, 0xf3, 0xf8, 0x5d, 0xb7, 0x28, 0xc8, 0x37, 0xdc, 0x03, 0x42, 0x41, 0x17, 0x57, 0x73, 0x6b, - 0x63, 0x7a, 0x1e, 0xbf, 0xeb, 0x96, 0x3a, 0x0b, 0xe3, 0xde, 0xb1, 0x4b, 0x7c, 0x6d, 0x6c, 0x35, - 0xb7, 0x56, 0xd0, 0xd9, 0x87, 0x7a, 0x1d, 0xd4, 0x20, 0xf4, 0x1c, 0xe2, 0x36, 0x03, 0xdb, 0x35, - 0x49, 0xd3, 0x27, 0x2e, 0x39, 0xd6, 0x26, 0x90, 0xab, 0xc2, 0x20, 0xbb, 0x14, 0xa0, 0xd3, 0x75, - 0x75, 0x0b, 0x8a, 0xbd, 0xae, 0x65, 0x84, 0xa4, 0x49, 0x7d, 0x4d, 0xcb, 0xaf, 0xe6, 0xd6, 0x8a, - 0x9b, 0x4b, 0x35, 0xe6, 0x88, 0x35, 0xe1, 0x88, 0xb5, 0x3d, 0xe1, 0x88, 0xdb, 0xd2, 0x57, 0x7f, - 0x5d, 0xc9, 0xe9, 0xc0, 0x88, 0xe8, 0xb2, 0x7a, 0x07, 0x2a, 0xae, 0xd1, 0x21, 0x41, 0xd7, 0x30, - 0x49, 0xd3, 0xf5, 0x42, 0xbb, 0x65, 0x9b, 0xe8, 0xd5, 0xcd, 0x23, 0x6a, 0x00, 0xcf, 0xd5, 0x0a, - 0x28, 0xf7, 0x72, 0x84, 0xf5, 0x20, 0x86, 0xf4, 0x09, 0xc3, 0x51, 0x7f, 0x99, 0x83, 0x45, 0x9f, - 0x74, 0x1d, 0x41, 0x6b, 0x39, 0x8f, 0x9b, 0x86, 0xd9, 0x6e, 0x3a, 0xe4, 0x88, 0x38, 0xda, 0xe4, - 0xea, 0xd8, 0x5a, 0x71, 0xb3, 0x5e, 0x3b, 0xfb, 0x92, 0xd5, 0x22, 0xab, 0xd6, 0xf4, 0x01, 0xbb, - 0x3b, 0xce, 0xe3, 0x2d, 0xb3, 0x7d, 0x9f, 0xf2, 0xba, 0xeb, 0x86, 0x7e, 0x5f, 0x9f, 0xf7, 0x33, - 0x81, 0x6a, 0x1b, 0x14, 0x3c, 0xa7, 0xc1, 0xde, 0x81, 0xa6, 0xe0, 0xe6, 0x5b, 0xe7, 0xdb, 0xfc, - 0x23, 0xca, 0x45, 0xb0, 0x0d, 0xd8, 0xa6, 0xe5, 0xc7, 0x89, 0x45, 0xd5, 0x80, 0x12, 0xdb, 0x2c, - 0x08, 0x8d, 0x90, 0x04, 0xda, 0x34, 0x6e, 0xf4, 0xee, 0x33, 0x6c, 0xb4, 0x8b, 0x0c, 0xd8, 0x2e, - 0xc5, 0xc7, 0x83, 0x95, 0xa5, 0x3a, 0xbc, 0x70, 0x8a, 0x19, 0x54, 0x05, 0xc6, 0xda, 0xa4, 0x8f, - 0x3e, 0x57, 0xd0, 0xe9, 0x4f, 0xea, 0x54, 0x47, 0x86, 0xd3, 0x23, 0xdc, 0xd9, 0xd8, 0xc7, 0xdb, - 0x17, 0xdf, 0xcc, 0x2d, 0x85, 0x30, 0x93, 0xa1, 0x54, 0x9c, 0xc5, 0x38, 0x63, 0xf1, 0x5e, 0x9c, - 0x45, 0x71, 0x73, 0x63, 0x14, 0x7d, 0x12, 0x9c, 0xe3, 0xbb, 0xba, 0xa0, 0xa4, 0x35, 0xcc, 0xd8, - 0xf2, 0x4e, 0x72, 0xcb, 0xda, 0xc8, 0x5b, 0x22, 0xdb, 0xd8, 0x7e, 0x0d, 0x49, 0x96, 0x94, 0xf1, - 0x86, 0x24, 0x8f, 0x2b, 0x13, 0x0d, 0x49, 0x96, 0x95, 0x42, 0x43, 0x92, 0x41, 0x29, 0x36, 0x24, - 0xb9, 0xa8, 0x94, 0x1a, 0x92, 0x5c, 0x52, 0x26, 0x1b, 0x92, 0x5c, 0x56, 0xa6, 0x1a, 0x92, 0x3c, - 0xa5, 0x28, 0xd5, 0xaf, 0x57, 0x60, 0xee, 0x11, 0x8f, 0x31, 0x77, 0x45, 0x52, 0xc0, 0x4b, 0x7d, - 0x19, 0x4a, 0x83, 0x7b, 0xc1, 0x2f, 0x76, 0x41, 0x2f, 0x46, 0x6b, 0x75, 0x4b, 0x5d, 0x81, 0xa2, - 0x88, 0x4f, 0xe2, 0x7e, 0x17, 0x74, 0x10, 0x4b, 0x75, 0x4b, 0xad, 0xc1, 0x4c, 0xd7, 0xf0, 0x89, - 0x1b, 0x36, 0x13, 0xac, 0xd8, 0x85, 0x9f, 0x66, 0xa0, 0x07, 0x31, 0x86, 0xd7, 0x41, 0xe5, 0xf8, - 0x71, 0xbe, 0x12, 0xa2, 0x2b, 0x0c, 0xf2, 0x68, 0xc0, 0xbd, 0x0a, 0x93, 0x1c, 0xdb, 0xef, 0xb9, - 0x14, 0x71, 0x9c, 0x89, 0xc8, 0x16, 0xf5, 0x9e, 0x9b, 0x90, 0xc0, 0x76, 0xed, 0xd0, 0x36, 0x42, - 0x82, 0x51, 0x6a, 0x02, 0xbd, 0x83, 0x4b, 0x50, 0x17, 0x90, 0xba, 0xa5, 0xbe, 0x05, 0x8b, 0xa6, - 0xd7, 0xe9, 0x3a, 0x04, 0x6f, 0x31, 0x39, 0xa2, 0x94, 0xfb, 0x46, 0x68, 0x1e, 0x52, 0xaa, 0x3c, - 0x52, 0xcd, 0x0f, 0x10, 0xee, 0x52, 0xf8, 0x36, 0x05, 0xd7, 0x2d, 0xf5, 0x12, 0x00, 0x0d, 0xc0, - 0x4d, 0xf4, 0x5f, 0x0c, 0x1a, 0x05, 0xbd, 0x40, 0x57, 0xf0, 0xa4, 0xa8, 0x6e, 0x91, 0x52, 0x61, - 0xbf, 0x4b, 0xd0, 0x24, 0x1a, 0x30, 0xdd, 0x04, 0x64, 0xaf, 0xdf, 0x25, 0xd4, 0x20, 0xea, 0xe7, - 0xb0, 0x14, 0x61, 0x47, 0xc9, 0x1a, 0x83, 0x9c, 0xd7, 0x0b, 0xb5, 0x22, 0xba, 0xc9, 0xe2, 0x50, - 0x9c, 0xbb, 0xc3, 0x13, 0xf2, 0xb6, 0xf4, 0x1b, 0x1a, 0xe6, 0xb4, 0xe3, 0xf4, 0xc9, 0xee, 0x31, - 0x06, 0xea, 0x47, 0x30, 0x1b, 0xb1, 0xa7, 0xc6, 0x13, 0x8c, 0x4b, 0xa3, 0x31, 0x8e, 0x34, 0xd1, - 0x7b, 0x11, 0xcb, 0x7d, 0xb8, 0x64, 0x91, 0x96, 0xd1, 0x73, 0x62, 0x87, 0x87, 0xf6, 0x10, 0xbc, - 0x27, 0x47, 0xe3, 0xbd, 0xc4, 0xb9, 0x88, 0x83, 0xde, 0x33, 0x82, 0xb6, 0xd8, 0xe3, 0x55, 0x50, - 0x1d, 0x23, 0x08, 0xf9, 0xb9, 0x20, 0x77, 0xdb, 0xd2, 0xa6, 0xf1, 0x58, 0xa6, 0x28, 0x04, 0x0f, - 0x84, 0x52, 0xd4, 0x2d, 0xf5, 0x35, 0x98, 0x41, 0xe4, 0x96, 0xed, 0x47, 0x24, 0xb6, 0xa5, 0xa9, - 0x88, 0xad, 0x50, 0xd0, 0x3d, 0x0a, 0x41, 0x92, 0xba, 0xa5, 0xfe, 0x0f, 0xbc, 0x88, 0xe8, 0x49, - 0xe1, 0x83, 0xd0, 0xf0, 0xa9, 0xcf, 0x44, 0xe4, 0x33, 0x48, 0x5e, 0xa1, 0xa8, 0x71, 0x09, 0x77, - 0x19, 0x9e, 0x60, 0x76, 0x1b, 0x00, 0x29, 0x59, 0x5a, 0x9a, 0x1d, 0x31, 0x2d, 0x15, 0x90, 0x06, - 0xb3, 0x52, 0x03, 0x50, 0xc2, 0x66, 0x3c, 0xbb, 0xcd, 0x8d, 0xc8, 0xa6, 0x4c, 0x29, 0x3f, 0x1e, - 0x64, 0xb8, 0x4d, 0x98, 0x4b, 0x2a, 0x25, 0x12, 0xdb, 0x3c, 0xea, 0x32, 0x73, 0x1c, 0xd3, 0x43, - 0xe4, 0xb3, 0x7b, 0xb0, 0x9a, 0x32, 0x84, 0x79, 0x48, 0xac, 0x9e, 0x13, 0x37, 0xc5, 0x02, 0xcb, - 0x8b, 0x71, 0xf2, 0x5d, 0x81, 0x25, 0x0c, 0xb1, 0x0d, 0x95, 0x33, 0x0c, 0xaa, 0x21, 0x97, 0xa5, - 0xe3, 0x93, 0x8d, 0xb9, 0x9b, 0x96, 0x5f, 0x78, 0xd4, 0xe2, 0x68, 0x1e, 0x95, 0x50, 0x50, 0xb8, - 0xd2, 0x90, 0x51, 0x8c, 0x90, 0x06, 0xdd, 0x50, 0x5b, 0xc2, 0xb0, 0x9c, 0xa0, 0xd9, 0x62, 0xa0, - 0xc4, 0xa5, 0x4c, 0x28, 0x83, 0xc7, 0xf3, 0xc2, 0x88, 0xc7, 0xb3, 0x90, 0xa1, 0x2a, 0x9e, 0x93, - 0x01, 0xcb, 0x27, 0xd9, 0x1c, 0x37, 0x58, 0x1e, 0x71, 0x83, 0xc5, 0xcc, 0x13, 0xc1, 0x2d, 0xae, - 0x81, 0x62, 0x1a, 0xae, 0x49, 0x9c, 0xa6, 0x4f, 0x1e, 0xf7, 0x48, 0x10, 0x12, 0x4b, 0xbb, 0xb4, - 0x9a, 0x5b, 0x93, 0xf5, 0x29, 0xb6, 0xae, 0x8b, 0x65, 0xd5, 0x87, 0xab, 0x49, 0x69, 0x3c, 0xdf, - 0x3e, 0xb0, 0x5d, 0xc3, 0x49, 0x8b, 0x55, 0x19, 0x51, 0xac, 0xcb, 0x71, 0xb1, 0x3e, 0xe4, 0xcc, - 0x92, 0xe2, 0xdd, 0x02, 0x2d, 0xb9, 0x27, 0x97, 0x92, 0xfa, 0xc9, 0x0a, 0x46, 0xca, 0xb9, 0x38, - 0x13, 0x2e, 0x6c, 0xdd, 0x52, 0x5f, 0x81, 0xe9, 0xa4, 0x5e, 0x94, 0x62, 0x15, 0x29, 0x92, 0x8a, - 0x31, 0xdc, 0x20, 0xb4, 0xcd, 0x76, 0xbf, 0x19, 0x0b, 0xd7, 0x97, 0x19, 0x2e, 0x03, 0xec, 0x45, - 0x41, 0xfb, 0x00, 0x56, 0x39, 0xae, 0x50, 0xba, 0x19, 0x7a, 0xcd, 0xc1, 0xd5, 0xa6, 0x5e, 0x58, - 0x1d, 0xcd, 0x0b, 0x97, 0x19, 0x23, 0xa1, 0xf0, 0x9e, 0xb7, 0x2b, 0x2e, 0x3b, 0x75, 0x47, 0x0d, - 0xf2, 0xc2, 0x01, 0x5f, 0x64, 0x15, 0x34, 0xff, 0x54, 0x3f, 0x86, 0x79, 0x9f, 0x84, 0x7e, 0x9f, - 0x27, 0x30, 0xa7, 0x69, 0xbb, 0x21, 0xf1, 0x8f, 0x0c, 0x47, 0xbb, 0x32, 0xda, 0xc6, 0xb3, 0x48, - 0xce, 0x92, 0x9c, 0x53, 0xe7, 0xc4, 0x03, 0xb6, 0x1d, 0xe3, 0x89, 0xdd, 0xe9, 0x75, 0x06, 0x6c, - 0xaf, 0x9e, 0x87, 0xed, 0x07, 0x8c, 0x3a, 0x62, 0x7b, 0x33, 0xcd, 0x96, 0xab, 0x11, 0x68, 0x2f, - 0xa1, 0x5a, 0x09, 0x2a, 0x7e, 0xaf, 0x02, 0xf5, 0x6d, 0x5a, 0x3c, 0x53, 0xaa, 0x7d, 0xc3, 0x6c, - 0x7b, 0xad, 0x56, 0xd3, 0xf4, 0x48, 0xab, 0x65, 0x9b, 0x36, 0x71, 0x43, 0xed, 0xe5, 0xd5, 0xdc, - 0x5a, 0x4e, 0x5f, 0x40, 0x84, 0x6d, 0x06, 0xdf, 0x19, 0x80, 0xd5, 0x0e, 0x54, 0x33, 0x32, 0x25, - 0x79, 0xd2, 0xb5, 0x99, 0xb8, 0xcc, 0x49, 0xd7, 0x46, 0x74, 0xd2, 0x95, 0xa1, 0x94, 0x79, 0x37, - 0xe2, 0xc4, 0xdb, 0x85, 0x15, 0x26, 0xaa, 0xeb, 0xb9, 0x4d, 0xfc, 0x65, 0xec, 0x3b, 0xa4, 0x49, - 0x7c, 0xdf, 0xf3, 0x31, 0xaf, 0x07, 0xda, 0xb5, 0xd5, 0xb1, 0xb5, 0x82, 0xfe, 0x02, 0x02, 0x1f, - 0x78, 0xae, 0x2e, 0x90, 0xee, 0x52, 0x1c, 0x9a, 0xe1, 0x03, 0x75, 0x0d, 0x94, 0x43, 0x23, 0x60, - 0xf4, 0xcd, 0xae, 0xe7, 0xd8, 0x66, 0x5f, 0x7b, 0x05, 0xef, 0x61, 0xf9, 0xd0, 0x08, 0x90, 0xe2, - 0x21, 0xae, 0xaa, 0x2f, 0xc2, 0xa4, 0xe9, 0x7b, 0x6e, 0xe4, 0x7f, 0xda, 0xab, 0xe8, 0xa9, 0x25, - 0xba, 0x28, 0x7c, 0x89, 0xd6, 0x6a, 0x81, 0x7d, 0x40, 0xef, 0xa6, 0xe9, 0xf5, 0xdc, 0x50, 0xab, - 0x61, 0x4c, 0x2d, 0xb2, 0xb5, 0x1d, 0xba, 0xa4, 0x7e, 0x04, 0xd3, 0x46, 0x2f, 0xf4, 0x9a, 0x3e, - 0x09, 0x48, 0xd8, 0xec, 0x7a, 0xb6, 0x1b, 0x06, 0xda, 0x0d, 0xb4, 0xca, 0xd5, 0x41, 0xb9, 0x49, - 0xeb, 0xcc, 0xa8, 0xe5, 0x3c, 0xda, 0xa8, 0xe9, 0x14, 0xfb, 0x21, 0x22, 0xeb, 0x53, 0x94, 0x3e, - 0xb6, 0xa0, 0xfe, 0x02, 0xa6, 0x03, 0x62, 0xf8, 0xe6, 0x21, 0x3d, 0x64, 0xdf, 0xde, 0xef, 0xd1, - 0x26, 0xe0, 0x26, 0x36, 0x01, 0x1f, 0x8e, 0x52, 0xc1, 0x66, 0xd6, 0x9d, 0xb5, 0x5d, 0x64, 0xb9, - 0x15, 0x71, 0x64, 0x5d, 0x81, 0x12, 0xa4, 0x96, 0xd5, 0x47, 0x20, 0x75, 0x48, 0xc7, 0xd3, 0xde, - 0xc0, 0x0d, 0x77, 0x9e, 0x7d, 0xc3, 0x0f, 0x48, 0xc7, 0x63, 0x9b, 0x20, 0x43, 0xf5, 0x73, 0x98, - 0xe6, 0x09, 0xb2, 0xc9, 0x1a, 0x66, 0x9b, 0x04, 0xda, 0x7f, 0xa0, 0xa5, 0x5e, 0xcf, 0xdc, 0x85, - 0xb7, 0xd5, 0x74, 0x07, 0x9e, 0x3e, 0xdf, 0x17, 0x74, 0xba, 0x72, 0x94, 0x5a, 0x51, 0x6f, 0xc0, - 0x3c, 0xaf, 0x48, 0x22, 0x67, 0xe5, 0xe5, 0xeb, 0x2d, 0x3c, 0xd9, 0x19, 0x84, 0x46, 0x22, 0xb2, - 0x32, 0xf6, 0x7f, 0x61, 0x6a, 0x80, 0x4e, 0xdb, 0xad, 0x40, 0x7b, 0x13, 0x25, 0xda, 0x1c, 0x45, - 0xef, 0x88, 0x19, 0x6d, 0x17, 0x02, 0xbd, 0x4c, 0x12, 0xdf, 0x89, 0xbc, 0x43, 0x45, 0x49, 0xdf, - 0x9d, 0xb7, 0xce, 0x9b, 0x77, 0xf4, 0x5e, 0xfa, 0xd6, 0xdc, 0x84, 0x85, 0xa1, 0x5a, 0x2c, 0x7c, - 0x82, 0x5a, 0xbf, 0xcd, 0x8a, 0x90, 0x64, 0x3d, 0xb6, 0xf7, 0x84, 0x6a, 0x7d, 0x13, 0xe6, 0xb1, - 0xb5, 0x6c, 0x86, 0xbe, 0xe1, 0x06, 0x36, 0x4a, 0xc4, 0x1c, 0xfc, 0x1d, 0x24, 0x9a, 0x45, 0xe8, - 0x5e, 0x04, 0x64, 0x9e, 0xfe, 0x1e, 0x94, 0x93, 0x15, 0xb3, 0xf6, 0x9f, 0x23, 0x2a, 0x30, 0x49, - 0xe2, 0x75, 0xb2, 0xba, 0x0e, 0xb3, 0x2e, 0x39, 0x1e, 0x3e, 0xa7, 0xff, 0x62, 0xed, 0x8b, 0x4b, - 0x8e, 0x53, 0xa7, 0x74, 0x1f, 0x4a, 0xbc, 0xd9, 0xc0, 0xb1, 0x90, 0xf6, 0x2e, 0xee, 0x7b, 0x2d, - 0xf3, 0x88, 0x10, 0x83, 0xb9, 0x8c, 0x19, 0x7a, 0xfe, 0x0e, 0xfd, 0x14, 0xad, 0x0b, 0x7e, 0xa8, - 0x6f, 0x82, 0x36, 0xd4, 0xba, 0x88, 0xca, 0xed, 0x36, 0xeb, 0x44, 0x52, 0xfd, 0x8b, 0x28, 0xde, - 0x6e, 0xc0, 0xbc, 0xe9, 0x78, 0x01, 0xb7, 0x5b, 0x8b, 0xf8, 0x51, 0xa9, 0xfc, 0xdf, 0xcc, 0xd8, - 0x08, 0xdd, 0xe3, 0x40, 0x5e, 0x2e, 0xdf, 0x02, 0x8d, 0x11, 0x1d, 0xd9, 0x81, 0xbd, 0x6f, 0x3b, - 0x76, 0xd8, 0x8f, 0xc8, 0xb6, 0x90, 0x6c, 0x0e, 0xe1, 0x9f, 0x44, 0x60, 0x4e, 0x78, 0x1b, 0x80, - 0xef, 0x46, 0x6d, 0xbd, 0x3d, 0x6a, 0xad, 0xcb, 0x64, 0xa0, 0x76, 0xbe, 0x0b, 0x2b, 0xd9, 0x3b, - 0xf3, 0x46, 0x8b, 0x58, 0xda, 0x0e, 0xc6, 0xc6, 0xe5, 0x0c, 0x01, 0x76, 0x04, 0xce, 0x92, 0x05, - 0x73, 0x99, 0xb1, 0x23, 0x63, 0x4a, 0xf0, 0x46, 0xb2, 0xdf, 0x5e, 0x49, 0x06, 0x40, 0x3e, 0x9e, - 0x3b, 0xda, 0xa8, 0x3d, 0x34, 0xfa, 0x8e, 0x67, 0x58, 0xf1, 0x86, 0xfe, 0x53, 0x28, 0x44, 0x01, - 0xe3, 0x27, 0xe5, 0x1c, 0xb5, 0xeb, 0x51, 0x73, 0xde, 0x90, 0x64, 0x45, 0x99, 0x6e, 0x48, 0xf2, - 0x75, 0xe5, 0xb5, 0x86, 0x24, 0xbf, 0xa6, 0xd4, 0x1a, 0x92, 0xbc, 0xae, 0xbc, 0xde, 0x90, 0xe4, - 0xd7, 0x95, 0x8d, 0x86, 0x24, 0x6f, 0x28, 0x9b, 0x0d, 0x49, 0xde, 0x54, 0x6e, 0x54, 0x6f, 0x40, - 0x39, 0x79, 0xc9, 0x69, 0x4a, 0xe0, 0x71, 0xa9, 0x19, 0xd8, 0x5f, 0x10, 0x94, 0x71, 0x4c, 0x2f, - 0xf2, 0xb5, 0x5d, 0xfb, 0x0b, 0x52, 0xfd, 0x21, 0x07, 0xf3, 0x43, 0x21, 0x11, 0x27, 0x0a, 0x58, - 0x4f, 0xf9, 0x84, 0x5e, 0xbd, 0x58, 0x3d, 0x95, 0xe3, 0xf5, 0x14, 0x02, 0x06, 0xf5, 0xd4, 0x1c, - 0x4c, 0xf0, 0x8b, 0xc1, 0x06, 0x00, 0xe3, 0x3e, 0x5e, 0x86, 0x06, 0x8c, 0xe3, 0xf5, 0xc4, 0x6e, - 0xbf, 0xbc, 0x79, 0x33, 0xf3, 0x16, 0xe0, 0xe8, 0x32, 0x33, 0x34, 0xf3, 0xc9, 0x06, 0xb2, 0x50, - 0xef, 0xc1, 0x04, 0xfd, 0xd1, 0x0b, 0x70, 0x16, 0x50, 0x8e, 0x0f, 0x48, 0xce, 0xe6, 0xd2, 0x0b, - 0x74, 0x4e, 0x5d, 0xfd, 0xe7, 0x04, 0x28, 0x09, 0xb7, 0xff, 0xa9, 0x06, 0x1d, 0x03, 0x1b, 0x8c, - 0xc5, 0x6d, 0xb0, 0x03, 0x05, 0xd6, 0xb0, 0xf4, 0xbb, 0x84, 0x8b, 0xfe, 0xd2, 0xe9, 0x76, 0xc0, - 0x16, 0xa5, 0xdf, 0x25, 0xba, 0x1c, 0xf2, 0x5f, 0x6a, 0x0d, 0x66, 0x42, 0xc3, 0x3f, 0x20, 0xa9, - 0x21, 0x0a, 0x1b, 0x76, 0x4c, 0x33, 0x50, 0x6a, 0x88, 0xc2, 0xf1, 0xe3, 0x32, 0x4f, 0xb0, 0x41, - 0x03, 0x83, 0x24, 0x87, 0x28, 0x1c, 0x9b, 0x2b, 0x90, 0x67, 0xea, 0xb3, 0x45, 0x16, 0xd7, 0x92, - 0x93, 0x0d, 0x39, 0x3d, 0xd9, 0x78, 0x07, 0x96, 0x38, 0x0b, 0xf3, 0xd0, 0x76, 0xac, 0xc1, 0xb6, - 0x9e, 0xeb, 0xf4, 0x71, 0x10, 0x22, 0xeb, 0x0b, 0x0c, 0x63, 0x87, 0x22, 0x88, 0xdd, 0x3f, 0x74, - 0x9d, 0x3e, 0xce, 0x7b, 0x87, 0x5b, 0x4b, 0x60, 0x4d, 0x7a, 0x90, 0x6e, 0x27, 0x35, 0xc8, 0x8b, - 0x10, 0x58, 0x64, 0xd3, 0x64, 0xfe, 0xa9, 0x2e, 0x40, 0x5e, 0x44, 0xab, 0x12, 0x42, 0x26, 0x42, - 0x16, 0x9e, 0xea, 0x30, 0x15, 0x8f, 0x2b, 0x34, 0x46, 0x4d, 0x8e, 0xda, 0x48, 0x0f, 0x08, 0x31, - 0x50, 0x5d, 0x07, 0xd5, 0x22, 0x34, 0xd8, 0x34, 0x8d, 0x56, 0x48, 0xfc, 0x26, 0x86, 0x23, 0x6d, - 0x0a, 0x15, 0x54, 0x18, 0x64, 0x8b, 0x02, 0x76, 0xe8, 0xba, 0xfa, 0xeb, 0x1c, 0xb0, 0x80, 0x15, - 0x1f, 0xe0, 0x50, 0x11, 0x2d, 0x12, 0x1a, 0x36, 0x0e, 0x66, 0xa9, 0x18, 0x0f, 0x46, 0xc9, 0xe0, - 0x69, 0xa7, 0xad, 0xe1, 0x16, 0x83, 0xb1, 0x8e, 0x11, 0xb4, 0xef, 0x30, 0xae, 0xef, 0x5f, 0xd0, - 0x17, 0xcd, 0x93, 0x80, 0x4b, 0xff, 0x07, 0x8b, 0x27, 0x52, 0xaa, 0xb7, 0x61, 0xd9, 0x34, 0xdc, - 0x66, 0xd0, 0xb6, 0xbb, 0xf1, 0x50, 0x4c, 0x43, 0xaa, 0x4d, 0x1b, 0x83, 0x1c, 0x2a, 0xba, 0x68, - 0x1a, 0xee, 0x6e, 0xdb, 0xee, 0x0e, 0xc2, 0xf0, 0x16, 0x47, 0xd8, 0x2e, 0x43, 0x29, 0xae, 0x20, - 0x8b, 0x65, 0xd5, 0xdf, 0x4b, 0x30, 0x13, 0x1b, 0xe2, 0xfe, 0x6c, 0xee, 0x5d, 0xcc, 0xd7, 0xc6, - 0x93, 0xbe, 0x76, 0x05, 0xca, 0xa9, 0xa1, 0x12, 0x9b, 0x27, 0x96, 0x5a, 0xf1, 0x81, 0x52, 0x15, - 0x26, 0x5d, 0xf2, 0x24, 0x86, 0xc4, 0xc6, 0x87, 0x45, 0xba, 0x28, 0x70, 0xb2, 0xbd, 0x5f, 0x3e, - 0xc1, 0xfb, 0x2f, 0x43, 0x69, 0xdf, 0x37, 0x5c, 0xf3, 0xb0, 0x19, 0x7a, 0x6d, 0xc2, 0xae, 0x40, - 0x49, 0x2f, 0xb2, 0xb5, 0x3d, 0xba, 0x24, 0x6a, 0x16, 0x6a, 0x94, 0x04, 0xea, 0x24, 0xa2, 0xd2, - 0x9a, 0x45, 0xef, 0xb9, 0xdb, 0x31, 0x82, 0xd8, 0xbd, 0x99, 0x3a, 0xeb, 0xde, 0x28, 0xcf, 0x78, - 0x6f, 0x96, 0x01, 0x84, 0x50, 0x7c, 0x5c, 0x57, 0xd0, 0x65, 0x26, 0x4a, 0xdd, 0x6a, 0x48, 0x72, - 0x41, 0x81, 0x68, 0x4c, 0x1d, 0x0d, 0xa8, 0xab, 0xff, 0x18, 0x03, 0x35, 0x55, 0x6c, 0xfc, 0xbc, - 0xdd, 0x26, 0x66, 0xea, 0x89, 0xb3, 0x4c, 0x9d, 0x7f, 0x46, 0x53, 0x27, 0x8b, 0x31, 0xf9, 0xfc, - 0xc5, 0x58, 0x72, 0x72, 0x59, 0x38, 0xff, 0xe4, 0xf2, 0xb4, 0x3a, 0x12, 0x4e, 0xa9, 0x23, 0xab, - 0x3f, 0x48, 0x30, 0x49, 0x39, 0xfc, 0x7c, 0x32, 0xf3, 0x5d, 0x28, 0xf1, 0x21, 0x10, 0xe3, 0x33, - 0x8e, 0x7c, 0xaa, 0x27, 0x14, 0x27, 0x7c, 0xd4, 0x83, 0x3c, 0x8a, 0xe1, 0xe0, 0x43, 0x25, 0xb1, - 0x51, 0xa4, 0x18, 0x80, 0x20, 0xbf, 0x09, 0xe4, 0xb7, 0x31, 0x5a, 0xe5, 0xc4, 0x47, 0x23, 0xc8, - 0x3e, 0x9a, 0x5e, 0xc6, 0x16, 0xe3, 0x8e, 0x99, 0x4f, 0x3a, 0xe6, 0x35, 0x88, 0x62, 0x4d, 0x34, - 0x06, 0x95, 0x71, 0x5c, 0x33, 0x25, 0xd6, 0xc5, 0x08, 0x74, 0x11, 0xe4, 0x28, 0x4c, 0xb1, 0x77, - 0xd1, 0x3c, 0xe1, 0xd1, 0x29, 0xe6, 0xde, 0x70, 0x96, 0x7b, 0x17, 0x9f, 0xd1, 0xbd, 0xd3, 0x11, - 0xb0, 0x34, 0x1c, 0x01, 0xaf, 0x81, 0x62, 0x38, 0x3e, 0x31, 0x2c, 0x91, 0xb9, 0x88, 0x85, 0xd1, - 0x4f, 0xd6, 0xa7, 0xf8, 0xfa, 0x16, 0x5f, 0xae, 0xfe, 0xee, 0x22, 0x28, 0x22, 0x79, 0x45, 0x4e, - 0x17, 0x53, 0x23, 0x97, 0x50, 0x23, 0xed, 0x8d, 0x17, 0xcf, 0xf4, 0xc6, 0xb1, 0x53, 0xbc, 0x51, - 0x3a, 0xd1, 0x1b, 0xc7, 0xff, 0xfd, 0xc0, 0x33, 0x91, 0x3c, 0xdf, 0x9f, 0x2e, 0xbe, 0x54, 0x7f, - 0x55, 0x86, 0xd2, 0x96, 0x19, 0xda, 0x47, 0x76, 0xd8, 0x47, 0x73, 0xc5, 0x76, 0xcd, 0x25, 0x77, - 0xbd, 0x05, 0x5a, 0x3a, 0xb7, 0x45, 0x2f, 0x69, 0xec, 0x75, 0x76, 0x2e, 0x99, 0xe1, 0xc4, 0x43, - 0xda, 0x7b, 0x50, 0x4e, 0x8d, 0x98, 0xa5, 0x51, 0x1b, 0xf8, 0x20, 0x31, 0x4e, 0x5e, 0x03, 0x65, - 0xe8, 0xb9, 0x81, 0xc5, 0xe4, 0x72, 0x90, 0x7c, 0x62, 0xd8, 0x81, 0x52, 0x62, 0x96, 0x3f, 0xaa, - 0x79, 0x8a, 0x41, 0x6c, 0x7e, 0xbf, 0x02, 0x45, 0x83, 0x9b, 0x46, 0x64, 0xf1, 0x82, 0x0e, 0x62, - 0x89, 0xd5, 0xd1, 0xb1, 0x76, 0x8a, 0xbf, 0x10, 0xfa, 0x51, 0x23, 0xf5, 0x19, 0x2c, 0x9e, 0x3c, - 0x65, 0x86, 0xd1, 0xa6, 0xb2, 0xf3, 0x41, 0xf6, 0x7c, 0x39, 0xc5, 0x7b, 0x90, 0x23, 0xce, 0xf1, - 0x9c, 0x18, 0xe3, 0xbd, 0x23, 0xf2, 0x05, 0xe5, 0xbd, 0x87, 0x63, 0x1a, 0x2a, 0x6b, 0x9a, 0xf1, - 0x88, 0xcf, 0x89, 0x33, 0x2c, 0x7b, 0x24, 0xb9, 0xde, 0x87, 0xe9, 0x43, 0x62, 0xf8, 0xe1, 0x3e, - 0x31, 0xc2, 0xf3, 0xbe, 0x21, 0x2a, 0x11, 0xa5, 0xe0, 0x96, 0xf5, 0xf0, 0x51, 0xce, 0x7e, 0xf8, - 0xc8, 0x7c, 0x4b, 0x60, 0xb5, 0x51, 0xd6, 0x5b, 0x02, 0x15, 0xcd, 0x8f, 0x9e, 0x83, 0x68, 0x8f, - 0xaa, 0xb0, 0xd0, 0x19, 0x8a, 0x5c, 0xc6, 0x9a, 0xd0, 0xf8, 0x88, 0x7f, 0x3a, 0x39, 0xe2, 0x4f, - 0xf6, 0x57, 0x6a, 0xba, 0xbf, 0xba, 0x36, 0x70, 0x63, 0xdb, 0x22, 0x6e, 0x68, 0x87, 0x7d, 0x7c, - 0x86, 0xc4, 0xf7, 0x0a, 0x5c, 0xaf, 0xf3, 0xe5, 0xcc, 0xb9, 0xf2, 0x6c, 0xe6, 0x5c, 0xf9, 0xe4, - 0x67, 0x85, 0xb9, 0xe7, 0xf3, 0xac, 0x30, 0xff, 0x7c, 0x9e, 0x15, 0x16, 0x4e, 0x79, 0x56, 0xd8, - 0x83, 0x39, 0x46, 0x95, 0x9e, 0x68, 0x6a, 0x23, 0x5e, 0xef, 0x19, 0x24, 0x4f, 0xcd, 0x32, 0x4f, - 0x7d, 0xac, 0x58, 0x3c, 0xfd, 0xb1, 0x62, 0x84, 0xd7, 0x83, 0xa5, 0xb3, 0x5f, 0x0f, 0x1e, 0x80, - 0xca, 0xb8, 0xb0, 0x99, 0x2a, 0xfb, 0x63, 0x1b, 0x7f, 0x7f, 0x5c, 0x4d, 0x56, 0x1f, 0x1c, 0x48, - 0x53, 0xc6, 0x3d, 0xf6, 0x53, 0x57, 0x90, 0xf6, 0xbe, 0x11, 0x84, 0x7c, 0x85, 0x36, 0xf0, 0x31, - 0x7e, 0x34, 0x5d, 0x11, 0x7f, 0xe0, 0x6a, 0xcb, 0xe8, 0x6a, 0x0b, 0x11, 0xd5, 0x23, 0x84, 0x47, - 0x2e, 0x97, 0xdd, 0xc2, 0x54, 0x4e, 0x68, 0x61, 0x3e, 0x81, 0x79, 0xdc, 0x64, 0x70, 0xb5, 0x45, - 0x37, 0xbc, 0x92, 0x25, 0xfe, 0xd0, 0xc0, 0x2c, 0xd0, 0x67, 0x29, 0xfd, 0xfb, 0x82, 0x5c, 0xf4, - 0xae, 0x9f, 0xc3, 0x52, 0x8a, 0x6f, 0xfc, 0xe5, 0x7c, 0x75, 0xd4, 0xa7, 0xd9, 0x04, 0xef, 0xc1, - 0x13, 0x7a, 0x43, 0x92, 0xc7, 0x14, 0xa9, 0x21, 0xc9, 0x13, 0x4a, 0xbe, 0x21, 0xc9, 0x97, 0x94, - 0x4a, 0xf5, 0xcf, 0x39, 0x28, 0x60, 0xb5, 0x7a, 0x46, 0x16, 0xcc, 0xca, 0x41, 0x17, 0x33, 0x73, - 0xd0, 0x16, 0x14, 0xd1, 0x4f, 0x79, 0x86, 0x1e, 0x1b, 0xf5, 0xbf, 0x6c, 0x8c, 0x48, 0x64, 0xa0, - 0x78, 0x20, 0x92, 0x70, 0x1f, 0x8c, 0x2d, 0x3c, 0x06, 0x2d, 0x82, 0xcc, 0xe2, 0x55, 0x34, 0x40, - 0xca, 0xe3, 0x77, 0xdd, 0xaa, 0xfe, 0x45, 0x02, 0x15, 0xc7, 0x33, 0xc9, 0xbf, 0x01, 0x9d, 0x9a, - 0xdf, 0x07, 0x83, 0xe9, 0xec, 0xfc, 0x1e, 0xc1, 0x13, 0xf9, 0x3d, 0xcb, 0x24, 0x63, 0x99, 0x26, - 0xa9, 0xc1, 0x8c, 0xc0, 0x8c, 0xd7, 0x55, 0x7c, 0xf4, 0xc5, 0x41, 0xb1, 0x61, 0xd6, 0x15, 0x10, - 0x1c, 0x44, 0xb3, 0xc9, 0xc6, 0x5e, 0x22, 0xb9, 0xb3, 0x71, 0x56, 0xe6, 0x70, 0x53, 0xce, 0x1e, - 0x6e, 0x2e, 0x43, 0x21, 0x2a, 0xf0, 0x44, 0xc6, 0x8e, 0x16, 0xce, 0xf9, 0x9f, 0x9e, 0x4f, 0xa3, - 0xff, 0x22, 0xb1, 0x2c, 0xc9, 0xe3, 0x73, 0x11, 0xeb, 0xbd, 0xb5, 0x13, 0xba, 0x86, 0x87, 0xe2, - 0x45, 0x20, 0x20, 0x2c, 0x72, 0x8b, 0x7f, 0x2d, 0xc5, 0x96, 0xa8, 0x1c, 0xe9, 0xa3, 0x88, 0xe6, - 0x60, 0x4a, 0xf2, 0x10, 0x70, 0x60, 0x3f, 0xce, 0xde, 0x27, 0x26, 0xcf, 0xfb, 0x3e, 0xc1, 0xe8, - 0x86, 0x2a, 0xe1, 0xf2, 0x50, 0x25, 0x1c, 0xfd, 0x0f, 0x2d, 0xaf, 0xc8, 0xd5, 0x3f, 0xe4, 0x60, - 0x9a, 0x5b, 0x74, 0x07, 0xf3, 0xe7, 0xf3, 0x72, 0xac, 0xcc, 0xcc, 0x3d, 0x96, 0xfd, 0x2f, 0x80, - 0x6c, 0x93, 0x49, 0xd9, 0x26, 0xab, 0x7e, 0x9d, 0x03, 0xd8, 0xc5, 0xd7, 0xd4, 0xe7, 0x25, 0x7b, - 0xb2, 0x36, 0x1c, 0x4b, 0xd7, 0x86, 0xd9, 0xe2, 0xe6, 0xb3, 0xc5, 0x4d, 0xfd, 0x0b, 0x90, 0x05, - 0x2d, 0x59, 0x29, 0x54, 0xbf, 0xcc, 0x81, 0xbc, 0x73, 0x48, 0xcc, 0x76, 0xd0, 0xeb, 0xa4, 0x95, - 0x18, 0x1f, 0x28, 0x71, 0x07, 0x26, 0x5a, 0x8e, 0x71, 0xe4, 0xf9, 0x28, 0x72, 0x79, 0xf3, 0xfa, - 0xe9, 0xbd, 0x88, 0xe0, 0x78, 0x0f, 0x69, 0x74, 0x4e, 0x3b, 0xf8, 0x2b, 0xe6, 0x18, 0x36, 0x69, - 0xec, 0x63, 0xfb, 0xff, 0xbf, 0xf9, 0xae, 0x72, 0xe1, 0xdb, 0xef, 0x2a, 0x17, 0x7e, 0xfc, 0xae, - 0x92, 0xfb, 0xf2, 0x69, 0x25, 0xf7, 0xdb, 0xa7, 0x95, 0xdc, 0x9f, 0x9e, 0x56, 0x72, 0xdf, 0x3c, - 0xad, 0xe4, 0xfe, 0xf6, 0xb4, 0x92, 0xfb, 0xfb, 0xd3, 0xca, 0x85, 0x1f, 0x9f, 0x56, 0x72, 0x5f, - 0x7d, 0x5f, 0xb9, 0xf0, 0xcd, 0xf7, 0x95, 0x0b, 0xdf, 0x7e, 0x5f, 0xb9, 0xf0, 0xd9, 0xcd, 0x03, - 0x6f, 0x20, 0x83, 0xed, 0x9d, 0xfc, 0x37, 0xe5, 0x77, 0x62, 0x9f, 0xfb, 0x13, 0x18, 0x34, 0x6f, - 0xfc, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x68, 0x4c, 0xf8, 0x12, 0x2f, 0x00, 0x00, + // 3479 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0x4d, 0x73, 0x1b, 0xc7, + 0x95, 0x82, 0x38, 0x24, 0x06, 0x0f, 0x20, 0x38, 0x1c, 0x7e, 0x0d, 0x69, 0x0a, 0xa4, 0x60, 0xc9, + 0xa6, 0x6c, 0x19, 0x34, 0x29, 0x79, 0xe5, 0x8f, 0x5d, 0x6b, 0x49, 0x4a, 0xb2, 0x81, 0x95, 0x65, + 0x79, 0x48, 0x5b, 0x2e, 0xaf, 0x5d, 0xa8, 0xe1, 0x4c, 0x93, 0x9c, 0x25, 0x30, 0x03, 0xcd, 0x0c, + 0x48, 0xc1, 0xb5, 0x07, 0x1f, 0xb6, 0xf6, 0xec, 0xdc, 0x72, 0xce, 0x29, 0xc7, 0x5c, 0x72, 0xcf, + 0x21, 0x95, 0xca, 0x29, 0xe5, 0x5b, 0x7c, 0x4b, 0x2c, 0x5f, 0x72, 0x49, 0xd9, 0x95, 0x5f, 0x90, + 0xea, 0xd7, 0xdd, 0xf3, 0x85, 0x21, 0x39, 0x54, 0xac, 0x83, 0x6f, 0x98, 0x7e, 0x9f, 0xfd, 0xfa, + 0xf5, 0xfb, 0x6a, 0xc0, 0x8d, 0x80, 0x74, 0x7b, 0xae, 0x67, 0x74, 0x56, 0x7d, 0xe2, 0x1d, 0x11, + 0x6f, 0xd5, 0xe8, 0xd9, 0xab, 0x3d, 0xe2, 0xf9, 0xb6, 0x1f, 0x10, 0xc7, 0x24, 0xab, 0x47, 0x6b, + 0xab, 0xe4, 0x09, 0x31, 0xfb, 0x81, 0xed, 0x3a, 0x7e, 0xa3, 0xe7, 0xb9, 0x81, 0xab, 0xd6, 0x05, + 0x51, 0x83, 0x11, 0x35, 0x8c, 0x9e, 0xdd, 0x88, 0x11, 0x35, 0x8e, 0xd6, 0x16, 0x6a, 0xfb, 0xae, + 0xbb, 0xdf, 0x21, 0xab, 0x48, 0xb1, 0xdb, 0xdf, 0x5b, 0xb5, 0xfa, 0x9e, 0x41, 0x99, 0x30, 0x1e, + 0x0b, 0x4b, 0x69, 0x78, 0x60, 0x77, 0x89, 0x1f, 0x18, 0xdd, 0x1e, 0x47, 0xb8, 0x6c, 0x91, 0x1e, + 0x71, 0x2c, 0xe2, 0x98, 0x36, 0xf1, 0x57, 0xf7, 0xdd, 0x7d, 0x17, 0xd7, 0xf1, 0x17, 0x47, 0xb9, + 0x12, 0x2a, 0x4f, 0xb5, 0x36, 0xdd, 0x6e, 0xd7, 0x75, 0xa8, 0xc2, 0x5d, 0xe2, 0xfb, 0xc6, 0x3e, + 0xc9, 0xc4, 0x22, 0x4e, 0xbf, 0xeb, 0x53, 0xa4, 0x63, 0xd7, 0x3b, 0xdc, 0xeb, 0xb8, 0xc7, 0x1c, + 0xeb, 0x6a, 0x02, 0x6b, 0xcf, 0xb0, 0x3b, 0x7d, 0x8f, 0x0c, 0x33, 0x7b, 0x29, 0x81, 0x26, 0x78, + 0x0c, 0xe3, 0xbd, 0x92, 0x65, 0x57, 0xb3, 0xe3, 0x9a, 0x87, 0xc3, 0xb8, 0xd7, 0xb2, 0x70, 0x43, + 0x3d, 0xd9, 0xb6, 0x38, 0xea, 0xab, 0xa7, 0xa2, 0xa6, 0xb6, 0xf4, 0xf2, 0xa9, 0xc8, 0x81, 0xe1, + 0x1f, 0x72, 0xc4, 0x37, 0x72, 0x71, 0x6d, 0x53, 0x8a, 0x76, 0x30, 0xe8, 0x09, 0xbd, 0xaf, 0x67, + 0x91, 0x1d, 0xd8, 0x7e, 0xe0, 0x7a, 0x83, 0xe1, 0x5d, 0xae, 0xe6, 0xf0, 0xb4, 0xc7, 0x7d, 0xd2, + 0x27, 0xdc, 0xcb, 0xea, 0x7f, 0x28, 0x42, 0x69, 0xfb, 0xc0, 0xf0, 0xac, 0xa6, 0xb3, 0xe7, 0xaa, + 0xf3, 0x20, 0xfb, 0xf4, 0xa3, 0x6d, 0x5b, 0x5a, 0x61, 0xb9, 0xb0, 0x32, 0xaa, 0x17, 0xf1, 0xbb, + 0x69, 0x51, 0x90, 0x67, 0x38, 0xfb, 0x84, 0x82, 0x2e, 0x2e, 0x17, 0x56, 0x46, 0xf4, 0x22, 0x7e, + 0x37, 0x2d, 0x75, 0x1a, 0x46, 0xdd, 0x63, 0x87, 0x78, 0xda, 0xc8, 0x72, 0x61, 0xa5, 0xa4, 0xb3, + 0x0f, 0xf5, 0x3a, 0xa8, 0x7e, 0xe0, 0x76, 0x88, 0xd3, 0xf6, 0x6d, 0xc7, 0x24, 0x6d, 0x8f, 0x38, + 0xe4, 0x58, 0x1b, 0x43, 0xae, 0x0a, 0x83, 0x6c, 0x53, 0x80, 0x4e, 0xd7, 0xd5, 0x0d, 0x28, 0xf7, + 0x7b, 0x96, 0x11, 0x90, 0x36, 0x75, 0x51, 0xad, 0xb8, 0x5c, 0x58, 0x29, 0xaf, 0x2f, 0x34, 0x98, + 0xff, 0x36, 0x84, 0xff, 0x36, 0x76, 0x84, 0xff, 0x6e, 0x4a, 0x5f, 0xff, 0x65, 0xa9, 0xa0, 0x03, + 0x23, 0xa2, 0xcb, 0xea, 0x1d, 0xa8, 0x39, 0x46, 0x97, 0xf8, 0x3d, 0xc3, 0x24, 0x6d, 0xc7, 0x0d, + 0xec, 0x3d, 0xdb, 0xc4, 0xcb, 0xd0, 0x3e, 0xa2, 0x06, 0x70, 0x1d, 0xad, 0x84, 0x7a, 0x2f, 0x86, + 0x58, 0x0f, 0x62, 0x48, 0x9f, 0x30, 0x1c, 0xf5, 0xff, 0x0a, 0x30, 0xef, 0x91, 0x5e, 0x47, 0xd0, + 0x5a, 0x9d, 0xc7, 0x6d, 0xc3, 0x3c, 0x6c, 0x77, 0xc8, 0x11, 0xe9, 0x68, 0xe3, 0xcb, 0x23, 0x2b, + 0xe5, 0xf5, 0x66, 0xe3, 0xec, 0xbb, 0xd9, 0x08, 0xad, 0xda, 0xd0, 0x23, 0x76, 0x77, 0x3a, 0x8f, + 0x37, 0xcc, 0xc3, 0xfb, 0x94, 0xd7, 0x5d, 0x27, 0xf0, 0x06, 0xfa, 0xac, 0x97, 0x09, 0x54, 0x0f, + 0x41, 0xc1, 0x73, 0x8a, 0x64, 0xfb, 0x9a, 0x82, 0xc2, 0x37, 0xce, 0x27, 0xfc, 0x23, 0xca, 0x45, + 0xb0, 0xf5, 0x99, 0xd0, 0xea, 0xe3, 0xc4, 0xa2, 0x6a, 0x40, 0x85, 0x09, 0xf3, 0x03, 0x23, 0x20, + 0xbe, 0x36, 0x89, 0x82, 0xde, 0x7d, 0x06, 0x41, 0xdb, 0xc8, 0x80, 0x49, 0x29, 0x3f, 0x8e, 0x56, + 0x16, 0x9a, 0xf0, 0xc2, 0x29, 0x66, 0x50, 0x15, 0x18, 0x39, 0x24, 0x03, 0xf4, 0xb9, 0x92, 0x4e, + 0x7f, 0x52, 0xa7, 0x3a, 0x32, 0x3a, 0x7d, 0xc2, 0x9d, 0x8d, 0x7d, 0xbc, 0x7d, 0xf1, 0xcd, 0xc2, + 0x42, 0x00, 0x53, 0x19, 0x9b, 0x8a, 0xb3, 0x18, 0x65, 0x2c, 0xde, 0x8b, 0xb3, 0x28, 0xaf, 0xaf, + 0xe5, 0xd9, 0x4f, 0x82, 0x73, 0x5c, 0xaa, 0x03, 0x4a, 0x7a, 0x87, 0x19, 0x22, 0xef, 0x24, 0x45, + 0x36, 0x72, 0x8b, 0x44, 0xb6, 0x31, 0x79, 0x2d, 0x49, 0x96, 0x94, 0xd1, 0x96, 0x24, 0x8f, 0x2a, + 0x63, 0x2d, 0x49, 0x96, 0x95, 0x52, 0x4b, 0x92, 0x41, 0x29, 0xb7, 0x24, 0xb9, 0xac, 0x54, 0x5a, + 0x92, 0x5c, 0x51, 0xc6, 0x5b, 0x92, 0x5c, 0x55, 0x26, 0x5a, 0x92, 0x3c, 0xa1, 0x28, 0xf5, 0x5f, + 0x2d, 0xc3, 0xcc, 0x23, 0x1e, 0x44, 0xee, 0x8a, 0x5c, 0x82, 0x97, 0xfa, 0x32, 0x54, 0xa2, 0x7b, + 0xc1, 0x2f, 0x76, 0x49, 0x2f, 0x87, 0x6b, 0x4d, 0x4b, 0x5d, 0x82, 0x72, 0x18, 0x80, 0xf8, 0xfd, + 0x2e, 0xe9, 0x20, 0x96, 0x9a, 0x96, 0xda, 0x80, 0xa9, 0x9e, 0xe1, 0x11, 0x27, 0x68, 0x27, 0x58, + 0xb1, 0x0b, 0x3f, 0xc9, 0x40, 0x0f, 0x62, 0x0c, 0xaf, 0x83, 0xca, 0xf1, 0xe3, 0x7c, 0x25, 0x44, + 0x57, 0x18, 0xe4, 0x51, 0xc4, 0xbd, 0x0e, 0xe3, 0x1c, 0xdb, 0xeb, 0x3b, 0x14, 0x71, 0x94, 0xa9, + 0xc8, 0x16, 0xf5, 0xbe, 0x93, 0xd0, 0xc0, 0x76, 0xec, 0xc0, 0x36, 0x02, 0x82, 0x51, 0x6a, 0x0c, + 0xbd, 0x83, 0x6b, 0xd0, 0x14, 0x90, 0xa6, 0xa5, 0xbe, 0x05, 0xf3, 0xa6, 0xdb, 0xed, 0x75, 0x08, + 0xde, 0x62, 0x72, 0x44, 0x29, 0x77, 0x8d, 0xc0, 0x3c, 0xa0, 0x54, 0x45, 0xa4, 0x9a, 0x8d, 0x10, + 0xee, 0x52, 0xf8, 0x26, 0x05, 0x37, 0x2d, 0xf5, 0x12, 0x00, 0x46, 0x61, 0xf4, 0x5f, 0x0c, 0x1a, + 0x25, 0xbd, 0x44, 0x57, 0xf0, 0xa4, 0xe8, 0xde, 0xa2, 0x68, 0x3d, 0xe8, 0x11, 0x34, 0x89, 0x06, + 0x6c, 0x6f, 0x02, 0xb2, 0x33, 0xe8, 0x11, 0x6a, 0x10, 0xf5, 0x0b, 0x58, 0x08, 0xb1, 0xc3, 0x1c, + 0x8f, 0x41, 0xce, 0xed, 0x07, 0x5a, 0x19, 0xdd, 0x64, 0x7e, 0x28, 0xce, 0xdd, 0xe1, 0x79, 0x7c, + 0x53, 0xfa, 0x25, 0x0d, 0x73, 0xda, 0x71, 0xfa, 0x64, 0x77, 0x18, 0x03, 0xf5, 0x23, 0x98, 0x0e, + 0xd9, 0x53, 0xe3, 0x09, 0xc6, 0x95, 0x7c, 0x8c, 0xc3, 0x9d, 0xe8, 0xfd, 0x90, 0xe5, 0x2e, 0x5c, + 0xb2, 0xc8, 0x9e, 0xd1, 0xef, 0xc4, 0x0e, 0x8f, 0x65, 0x25, 0xce, 0x7b, 0x3c, 0x1f, 0xef, 0x05, + 0xce, 0x45, 0x1c, 0xf4, 0x8e, 0xe1, 0x1f, 0x0a, 0x19, 0xaf, 0x82, 0xda, 0x31, 0xfc, 0x80, 0x9f, + 0x0b, 0x72, 0xb7, 0x2d, 0x6d, 0x12, 0x8f, 0x65, 0x82, 0x42, 0xf0, 0x40, 0x28, 0x45, 0xd3, 0x52, + 0x5f, 0x83, 0x29, 0x44, 0xde, 0xb3, 0xbd, 0x90, 0xc4, 0xb6, 0x34, 0x15, 0xb1, 0x15, 0x0a, 0xba, + 0x47, 0x21, 0x48, 0xd2, 0xb4, 0xd4, 0xff, 0x82, 0x17, 0x11, 0x3d, 0xa9, 0xbc, 0x1f, 0x18, 0x1e, + 0xf5, 0x99, 0x90, 0x7c, 0x0a, 0xc9, 0x6b, 0x14, 0x35, 0xae, 0xe1, 0x36, 0xc3, 0x13, 0xcc, 0x6e, + 0x03, 0x20, 0x25, 0x4b, 0x4b, 0xd3, 0x39, 0xd3, 0x52, 0x09, 0x69, 0x30, 0x2b, 0xb5, 0x00, 0x35, + 0x6c, 0xc7, 0xb3, 0xdb, 0x4c, 0x4e, 0x36, 0x55, 0x4a, 0xf9, 0x71, 0x94, 0xe1, 0xd6, 0x61, 0x26, + 0xb9, 0x29, 0x91, 0xd8, 0x66, 0x71, 0x2f, 0x53, 0xc7, 0xb1, 0x7d, 0x88, 0x7c, 0x76, 0x0f, 0x96, + 0x53, 0x86, 0x30, 0x0f, 0x88, 0xd5, 0xef, 0xc4, 0x4d, 0x31, 0xc7, 0xf2, 0x62, 0x9c, 0x7c, 0x5b, + 0x60, 0x09, 0x43, 0x6c, 0x42, 0xed, 0x0c, 0x83, 0x6a, 0xc8, 0x65, 0xe1, 0xf8, 0x64, 0x63, 0x6e, + 0xa7, 0xf5, 0x17, 0x1e, 0x35, 0x9f, 0xcf, 0xa3, 0x12, 0x1b, 0x14, 0xae, 0x34, 0x64, 0x14, 0x23, + 0xa0, 0x41, 0x37, 0xd0, 0x16, 0x30, 0x2c, 0x27, 0x68, 0x36, 0x18, 0x28, 0x71, 0x29, 0x13, 0x9b, + 0xc1, 0xe3, 0x79, 0x21, 0xe7, 0xf1, 0xcc, 0x65, 0x6c, 0x15, 0xcf, 0xc9, 0x80, 0xc5, 0x93, 0x6c, + 0x8e, 0x02, 0x16, 0x73, 0x0a, 0x98, 0xcf, 0x3c, 0x11, 0x14, 0xe1, 0xc1, 0xd5, 0xa4, 0x08, 0xd7, + 0xb3, 0xf7, 0x6d, 0xc7, 0xe8, 0xa4, 0x65, 0xd5, 0x72, 0xca, 0xba, 0x1c, 0x97, 0xf5, 0x21, 0x67, + 0x96, 0x94, 0x79, 0x0b, 0xb4, 0xa4, 0x4c, 0x8f, 0x3c, 0xee, 0x13, 0x1f, 0x0f, 0x7f, 0x09, 0xc3, + 0xdf, 0x4c, 0x9c, 0x89, 0xce, 0xa0, 0x4d, 0x4b, 0xfd, 0x3c, 0x1e, 0x31, 0x45, 0x7d, 0xab, 0xdd, + 0x59, 0x2e, 0xac, 0x54, 0x4f, 0x48, 0x91, 0x58, 0x17, 0xd3, 0xe4, 0x98, 0x08, 0x1e, 0x83, 0x1e, + 0x89, 0x45, 0x58, 0xbe, 0xa2, 0x5e, 0x03, 0xc5, 0x34, 0x1c, 0x93, 0x74, 0x84, 0x3e, 0xc4, 0xd2, + 0x2e, 0x2d, 0x17, 0x56, 0x64, 0x7d, 0x82, 0xad, 0xeb, 0x62, 0x59, 0x7d, 0x05, 0x26, 0x93, 0xa8, + 0x54, 0xf5, 0x65, 0x54, 0x3d, 0x89, 0xdb, 0x44, 0x5c, 0x3f, 0xb0, 0xcd, 0xc3, 0x41, 0x3b, 0x96, + 0x0c, 0x2e, 0x33, 0x5c, 0x06, 0xd8, 0x09, 0x53, 0xc2, 0x3e, 0x2c, 0x73, 0x5c, 0x61, 0xfd, 0x76, + 0xe0, 0xb6, 0xa3, 0xc0, 0x41, 0x7d, 0xbc, 0x9e, 0xcf, 0xc7, 0x17, 0x19, 0x23, 0x61, 0xf9, 0x1d, + 0x77, 0x5b, 0x84, 0x12, 0xea, 0xec, 0x1a, 0x14, 0x85, 0x7b, 0xbf, 0xc8, 0xea, 0x73, 0xfe, 0xa9, + 0x7e, 0x0c, 0xb3, 0x1e, 0x09, 0xbc, 0x01, 0x4f, 0x8f, 0x9d, 0xb6, 0xed, 0x04, 0xc4, 0x3b, 0x32, + 0x3a, 0xda, 0x95, 0x7c, 0x82, 0xa7, 0x91, 0x9c, 0xa5, 0xd0, 0x4e, 0x93, 0x13, 0x47, 0x6c, 0xbb, + 0xc6, 0x13, 0xbb, 0xdb, 0xef, 0x46, 0x6c, 0xaf, 0x9e, 0x87, 0xed, 0x07, 0x8c, 0x3a, 0x64, 0x7b, + 0x33, 0xcd, 0x96, 0x6f, 0xc3, 0xd7, 0x5e, 0xc2, 0x6d, 0x25, 0xa8, 0xf8, 0xad, 0xf5, 0xd5, 0xb7, + 0x69, 0x69, 0x4e, 0xa9, 0x76, 0x0d, 0xf3, 0xd0, 0xdd, 0xdb, 0x6b, 0x9b, 0x2e, 0xd9, 0xdb, 0xb3, + 0x4d, 0x9b, 0x38, 0x81, 0xf6, 0xf2, 0x72, 0x61, 0xa5, 0xa0, 0xcf, 0x21, 0xc2, 0x26, 0x83, 0x6f, + 0x45, 0x60, 0xb5, 0x0b, 0xf5, 0x8c, 0x3c, 0x4c, 0x9e, 0xf4, 0x6c, 0xa6, 0x2e, 0xbb, 0x2d, 0x2b, + 0x39, 0x6f, 0xcb, 0xd2, 0x50, 0x42, 0xbe, 0x1b, 0x72, 0xe2, 0xcd, 0xc8, 0x12, 0x53, 0xd5, 0x71, + 0x9d, 0x36, 0xfe, 0x32, 0x76, 0x3b, 0xa4, 0x4d, 0x3c, 0xcf, 0xf5, 0xd0, 0xfd, 0x7d, 0xed, 0xda, + 0xf2, 0xc8, 0x4a, 0x49, 0x7f, 0x01, 0x81, 0x0f, 0x5c, 0x47, 0x17, 0x48, 0x77, 0x29, 0x0e, 0xf5, + 0x6c, 0x5f, 0x5d, 0x01, 0xe5, 0xc0, 0xf0, 0x19, 0x7d, 0xbb, 0xe7, 0x76, 0x6c, 0x73, 0xa0, 0xbd, + 0x82, 0xae, 0x5d, 0x3d, 0x30, 0x7c, 0xa4, 0x78, 0x88, 0xab, 0xea, 0x8b, 0x30, 0x6e, 0x7a, 0xae, + 0x13, 0xfa, 0x9f, 0xf6, 0x2a, 0x7a, 0x6a, 0x85, 0x2e, 0x0a, 0x5f, 0xa2, 0x95, 0xa0, 0x6f, 0xef, + 0xd3, 0x20, 0x61, 0xba, 0x7d, 0x27, 0xd0, 0x1a, 0x18, 0xb1, 0xcb, 0x6c, 0x6d, 0x8b, 0x2e, 0xa9, + 0x1f, 0xc1, 0xa4, 0xd1, 0x0f, 0xdc, 0xb6, 0x47, 0x7c, 0x12, 0xb4, 0x7b, 0xae, 0xed, 0x04, 0xbe, + 0x76, 0x03, 0xad, 0x72, 0x35, 0xba, 0xa9, 0xf4, 0x8a, 0x86, 0x7d, 0xf0, 0xd1, 0x5a, 0x43, 0xa7, + 0xd8, 0x0f, 0x11, 0x59, 0x9f, 0xa0, 0xf4, 0xb1, 0x05, 0xf5, 0x7f, 0x61, 0xd2, 0x27, 0x86, 0x67, + 0x1e, 0xd0, 0x43, 0xf6, 0xec, 0xdd, 0x3e, 0x6d, 0x31, 0x6e, 0x62, 0x8b, 0xf1, 0x61, 0x9e, 0xfa, + 0x38, 0xb3, 0xaa, 0x6d, 0x6c, 0x23, 0xcb, 0x8d, 0x90, 0x23, 0xeb, 0x39, 0x14, 0x3f, 0xb5, 0xac, + 0x3e, 0x02, 0xa9, 0x4b, 0xba, 0xae, 0xf6, 0x06, 0x0a, 0xdc, 0x7a, 0x76, 0x81, 0x1f, 0x90, 0xae, + 0xcb, 0x84, 0x20, 0x43, 0xf5, 0x0b, 0x98, 0xe4, 0xe9, 0xb7, 0xcd, 0xda, 0x71, 0x9b, 0xf8, 0xda, + 0xbf, 0xa1, 0xa5, 0x5e, 0xcf, 0x94, 0xc2, 0x9b, 0x76, 0x2a, 0x81, 0x27, 0xe7, 0xf7, 0x05, 0x9d, + 0xae, 0x1c, 0xa5, 0x56, 0xd4, 0x1b, 0x30, 0xcb, 0xeb, 0x9d, 0xd0, 0x59, 0x79, 0x71, 0x7c, 0x0b, + 0x4f, 0x76, 0x0a, 0xa1, 0xa1, 0x8a, 0xac, 0x48, 0xfe, 0x6f, 0x98, 0x88, 0xd0, 0x69, 0x33, 0xe7, + 0x6b, 0x6f, 0xa2, 0x46, 0xeb, 0x79, 0xf6, 0x1d, 0x32, 0xa3, 0xcd, 0x88, 0xaf, 0x57, 0x49, 0xe2, + 0x3b, 0x91, 0xd5, 0xa8, 0x2a, 0xe9, 0xbb, 0xf3, 0xd6, 0x79, 0xb3, 0x9a, 0xde, 0x4f, 0xdf, 0x9a, + 0x9b, 0x30, 0x37, 0x54, 0xe9, 0x05, 0x4f, 0x70, 0xd7, 0x6f, 0xb3, 0x12, 0x27, 0x59, 0xed, 0xed, + 0x3c, 0xa1, 0xbb, 0xbe, 0x09, 0xb3, 0xd8, 0xb8, 0xb6, 0x03, 0xcf, 0x70, 0x7c, 0x1b, 0x35, 0x62, + 0x0e, 0xfe, 0x0e, 0x12, 0x4d, 0x23, 0x74, 0x27, 0x04, 0x32, 0x4f, 0x7f, 0x0f, 0xaa, 0xc9, 0x7a, + 0x5c, 0xfb, 0xf7, 0x9c, 0x1b, 0x18, 0x27, 0xf1, 0x2a, 0x5c, 0x5d, 0x85, 0x69, 0x87, 0x1c, 0x0f, + 0x9f, 0xd3, 0x7f, 0xb0, 0xe6, 0xc8, 0x21, 0xc7, 0xa9, 0x53, 0xba, 0x0f, 0x15, 0xde, 0xca, 0xe0, + 0xac, 0x4a, 0x7b, 0x17, 0xe5, 0x5e, 0xcb, 0x3c, 0x22, 0xc4, 0x60, 0x2e, 0x63, 0x06, 0xae, 0xb7, + 0x45, 0x3f, 0x45, 0x63, 0x84, 0x1f, 0xea, 0x9b, 0xa0, 0x0d, 0x35, 0x46, 0xa2, 0x2e, 0xbc, 0xcd, + 0xfa, 0x9c, 0x54, 0x77, 0x24, 0x4a, 0xc3, 0x1b, 0x30, 0x6b, 0x76, 0x5c, 0x9f, 0xdb, 0x6d, 0x8f, + 0x78, 0x61, 0x21, 0xfe, 0x9f, 0xcc, 0xd8, 0x08, 0xdd, 0xe1, 0x40, 0x5e, 0x8c, 0xdf, 0x02, 0x8d, + 0x11, 0x1d, 0xd9, 0xbe, 0xbd, 0x6b, 0x77, 0xec, 0x60, 0x10, 0x92, 0x6d, 0x20, 0xd9, 0x0c, 0xc2, + 0x3f, 0x09, 0xc1, 0x9c, 0xf0, 0x36, 0x00, 0x97, 0x46, 0x6d, 0xbd, 0x99, 0xb7, 0x92, 0x66, 0x3a, + 0x50, 0x3b, 0xdf, 0x85, 0xa5, 0x6c, 0xc9, 0xbc, 0x8d, 0x23, 0x96, 0xb6, 0x85, 0xb1, 0x71, 0x31, + 0x43, 0x81, 0x2d, 0x81, 0xb3, 0x60, 0xc1, 0x4c, 0x66, 0xec, 0xc8, 0x98, 0x41, 0xbc, 0x91, 0xec, + 0xe6, 0x97, 0x92, 0x01, 0x90, 0xcf, 0x0c, 0x8f, 0xd6, 0x1a, 0x0f, 0x8d, 0x41, 0xc7, 0x35, 0xac, + 0xf8, 0xb8, 0xe0, 0x53, 0x28, 0x85, 0x01, 0xe3, 0x27, 0xe5, 0x1c, 0x0e, 0x03, 0xc2, 0xd6, 0xbf, + 0x25, 0xc9, 0x8a, 0x32, 0xd9, 0x92, 0xe4, 0xeb, 0xca, 0x6b, 0x2d, 0x49, 0x7e, 0x4d, 0x69, 0xb4, + 0x24, 0x79, 0x55, 0x79, 0xbd, 0x25, 0xc9, 0xaf, 0x2b, 0x6b, 0x2d, 0x49, 0x5e, 0x53, 0xd6, 0x5b, + 0x92, 0xbc, 0xae, 0xdc, 0xa8, 0xdf, 0x80, 0x6a, 0xf2, 0x92, 0xd3, 0x94, 0xc0, 0xe3, 0x52, 0xdb, + 0xb7, 0xbf, 0x24, 0xa8, 0xe3, 0x88, 0x5e, 0xe6, 0x6b, 0xdb, 0xf6, 0x97, 0xa4, 0xfe, 0x43, 0x01, + 0x66, 0x87, 0x42, 0x22, 0xce, 0x2b, 0xb0, 0x9e, 0xf2, 0x08, 0xbd, 0x7a, 0xb1, 0x7a, 0xaa, 0xc0, + 0xeb, 0x29, 0x04, 0x44, 0xf5, 0xd4, 0x0c, 0x8c, 0xf1, 0x8b, 0xc1, 0xc6, 0x0b, 0xa3, 0x1e, 0x5e, + 0x86, 0x16, 0x8c, 0xe2, 0xf5, 0xc4, 0x59, 0x42, 0x75, 0xfd, 0x66, 0xbe, 0x72, 0x30, 0xa9, 0x87, + 0xce, 0x58, 0xa8, 0xf7, 0x60, 0x8c, 0xfe, 0xe8, 0xfb, 0x38, 0x69, 0x48, 0xd4, 0x96, 0x67, 0x73, + 0xe9, 0xfb, 0x3a, 0xa7, 0xae, 0xff, 0x63, 0x0c, 0x94, 0x84, 0xdb, 0xff, 0x54, 0x63, 0x94, 0xc8, + 0x06, 0x23, 0x71, 0x1b, 0x6c, 0x41, 0x29, 0x2a, 0x8b, 0x99, 0xea, 0x2f, 0x9d, 0x6e, 0x87, 0xb0, + 0x1c, 0x96, 0x03, 0x51, 0x06, 0x37, 0x60, 0x2a, 0x30, 0xbc, 0x7d, 0x92, 0x1a, 0xd1, 0xb0, 0x51, + 0xca, 0x24, 0x03, 0xa5, 0x46, 0x34, 0x1c, 0x3f, 0xae, 0xf3, 0x18, 0x1b, 0x63, 0x30, 0x48, 0x72, + 0x44, 0xc3, 0xb1, 0xf9, 0x06, 0x8a, 0x6c, 0xfb, 0x6c, 0x91, 0xc5, 0xb5, 0xe4, 0xdc, 0x44, 0x4e, + 0xcf, 0x4d, 0xde, 0x81, 0x05, 0xce, 0xc2, 0x3c, 0xb0, 0x3b, 0x56, 0x24, 0xd6, 0x75, 0x3a, 0x03, + 0x1c, 0xb3, 0xc8, 0xfa, 0x1c, 0xc3, 0xd8, 0xa2, 0x08, 0x42, 0xfa, 0x87, 0x4e, 0x67, 0x80, 0xd3, + 0xe4, 0xe1, 0xc6, 0x15, 0xd8, 0x08, 0xc0, 0x4f, 0x37, 0xab, 0x1a, 0x14, 0x45, 0x08, 0x2c, 0xb3, + 0x59, 0x35, 0xff, 0x54, 0xe7, 0xa0, 0x28, 0xa2, 0x55, 0x05, 0x21, 0x63, 0x01, 0x0b, 0x4f, 0x4d, + 0x98, 0x88, 0xc7, 0x15, 0x1a, 0xa3, 0xc6, 0xf3, 0xb6, 0xe9, 0x11, 0x21, 0x06, 0xaa, 0xeb, 0xa0, + 0x5a, 0x84, 0x06, 0x9b, 0xb6, 0xb1, 0x17, 0x10, 0xaf, 0x8d, 0xe1, 0x48, 0x9b, 0xc0, 0x0d, 0x2a, + 0x0c, 0xb2, 0x41, 0x01, 0x5b, 0x74, 0x5d, 0xfd, 0x45, 0x01, 0x58, 0xc0, 0x8a, 0x8f, 0x87, 0xa8, + 0x8a, 0x16, 0x09, 0x0c, 0x1b, 0xc7, 0xbe, 0x54, 0x8d, 0x07, 0x79, 0x32, 0x78, 0xda, 0x69, 0x1b, + 0x28, 0x22, 0x1a, 0x1a, 0x19, 0xfe, 0xe1, 0x1d, 0xc6, 0xf5, 0xfd, 0x0b, 0xfa, 0xbc, 0x79, 0x12, + 0x70, 0xe1, 0x73, 0x98, 0x3f, 0x91, 0x52, 0xbd, 0x0d, 0x8b, 0xa6, 0xe1, 0xb4, 0xfd, 0x43, 0xbb, + 0x17, 0x0f, 0xc5, 0x34, 0xa4, 0xda, 0xb4, 0x31, 0x28, 0xe0, 0x46, 0xe7, 0x4d, 0xc3, 0xd9, 0x3e, + 0xb4, 0x7b, 0x51, 0x18, 0xde, 0xe0, 0x08, 0x9b, 0x55, 0xa8, 0xc4, 0x37, 0xc8, 0x62, 0x59, 0xfd, + 0xb7, 0x12, 0x4c, 0xc5, 0x46, 0xc4, 0x3f, 0x9b, 0x7b, 0x17, 0xf3, 0xb5, 0xd1, 0xa4, 0xaf, 0x5d, + 0x81, 0x6a, 0x6a, 0x64, 0xc5, 0xa6, 0x95, 0x95, 0xbd, 0xf8, 0xb8, 0xaa, 0x0e, 0xe3, 0x0e, 0x79, + 0x12, 0x43, 0x62, 0xc3, 0xc9, 0x32, 0x5d, 0x14, 0x38, 0xd9, 0xde, 0x2f, 0x9f, 0xe0, 0xfd, 0x97, + 0xa1, 0xb2, 0xeb, 0x19, 0x8e, 0x79, 0xd0, 0x0e, 0xdc, 0x43, 0xc2, 0xae, 0x40, 0x45, 0x2f, 0xb3, + 0xb5, 0x1d, 0xba, 0x24, 0x6a, 0x16, 0x6a, 0x94, 0x04, 0xea, 0x38, 0xa2, 0xd2, 0x9a, 0x45, 0xef, + 0x3b, 0x9b, 0x31, 0x82, 0xd8, 0xbd, 0x99, 0x38, 0xeb, 0xde, 0x28, 0xcf, 0x78, 0x6f, 0x16, 0x01, + 0x84, 0x52, 0x7c, 0x18, 0x58, 0xd2, 0x65, 0xa6, 0x4a, 0xd3, 0x6a, 0x49, 0x72, 0x49, 0x81, 0x70, + 0x08, 0x1e, 0x8e, 0xbf, 0xeb, 0x7f, 0x1f, 0x01, 0x35, 0x55, 0x6c, 0xfc, 0xbc, 0xdd, 0x26, 0x66, + 0xea, 0xb1, 0xb3, 0x4c, 0x5d, 0x7c, 0x46, 0x53, 0x27, 0x8b, 0x31, 0xf9, 0xfc, 0xc5, 0x58, 0x72, + 0x2e, 0x5a, 0x3a, 0xff, 0x5c, 0xf4, 0xb4, 0x3a, 0x12, 0x4e, 0xa9, 0x23, 0xeb, 0x3f, 0x48, 0x30, + 0x4e, 0x39, 0xfc, 0x7c, 0x32, 0xf3, 0x5d, 0xa8, 0xf0, 0x21, 0x10, 0xe3, 0x33, 0x8a, 0x7c, 0xea, + 0x27, 0x14, 0x27, 0x7c, 0xd4, 0x83, 0x3c, 0xca, 0x41, 0xf4, 0xa1, 0x92, 0xd8, 0xa0, 0x53, 0x0c, + 0x40, 0x90, 0xdf, 0x18, 0xf2, 0x5b, 0xcb, 0x57, 0x39, 0xf1, 0xd1, 0x08, 0xb2, 0x0f, 0x67, 0xa3, + 0xb1, 0xc5, 0xb8, 0x63, 0x16, 0x93, 0x8e, 0x79, 0x0d, 0xc2, 0x58, 0x13, 0x0e, 0x59, 0x65, 0x1c, + 0xd7, 0x4c, 0x88, 0x75, 0x31, 0x60, 0x9d, 0x07, 0x39, 0x0c, 0x53, 0xec, 0xd5, 0xb5, 0x48, 0x78, + 0x74, 0x8a, 0xb9, 0x37, 0x9c, 0xe5, 0xde, 0xe5, 0x67, 0x74, 0xef, 0x74, 0x04, 0xac, 0x0c, 0x47, + 0xc0, 0x6b, 0xa0, 0x18, 0x1d, 0x8f, 0x18, 0x96, 0xc8, 0x5c, 0xc4, 0xc2, 0xe8, 0x27, 0xeb, 0x13, + 0x7c, 0x7d, 0x83, 0x2f, 0xd7, 0x7f, 0x73, 0x11, 0x14, 0x91, 0xbc, 0x42, 0xa7, 0x8b, 0x6d, 0xa3, + 0x90, 0xd8, 0x46, 0xda, 0x1b, 0x2f, 0x9e, 0xe9, 0x8d, 0x23, 0xa7, 0x78, 0xa3, 0x74, 0xa2, 0x37, + 0x8e, 0xfe, 0xeb, 0x81, 0x67, 0x2c, 0x79, 0xbe, 0x3f, 0x5d, 0x7c, 0xa9, 0xff, 0x7f, 0x15, 0x2a, + 0x1b, 0x66, 0x60, 0x1f, 0xd9, 0xc1, 0x00, 0xcd, 0x15, 0x93, 0x5a, 0x48, 0x4a, 0xbd, 0x05, 0x5a, + 0x3a, 0xb7, 0x85, 0xef, 0x74, 0xec, 0xed, 0x77, 0x26, 0x99, 0xe1, 0xc4, 0x33, 0xdd, 0x7b, 0x50, + 0x4d, 0xcd, 0xba, 0xa5, 0xbc, 0x0d, 0xbc, 0x9f, 0x98, 0x6b, 0xaf, 0x80, 0x32, 0xf4, 0x98, 0xc1, + 0x62, 0x72, 0xd5, 0x4f, 0x3e, 0x60, 0x6c, 0x41, 0x25, 0xf1, 0x52, 0x90, 0xd7, 0x3c, 0x65, 0x3f, + 0xf6, 0x3a, 0xb0, 0x04, 0x65, 0x83, 0x9b, 0x46, 0x64, 0xf1, 0x92, 0x0e, 0x62, 0x89, 0xd5, 0xd1, + 0xb1, 0x76, 0x8a, 0xbf, 0x3f, 0x7a, 0x61, 0x23, 0xf5, 0x19, 0xcc, 0x9f, 0x3c, 0x65, 0x86, 0x7c, + 0x53, 0xd9, 0x59, 0x3f, 0x7b, 0xbe, 0x9c, 0xe2, 0x1d, 0xe5, 0x88, 0x73, 0x3c, 0x56, 0xc6, 0x78, + 0x6f, 0x89, 0x7c, 0x41, 0x79, 0xef, 0xe0, 0x98, 0x86, 0xea, 0x9a, 0x66, 0x9c, 0xf3, 0xb1, 0x72, + 0x8a, 0x65, 0x8f, 0x24, 0xd7, 0xfb, 0x30, 0x79, 0x40, 0x0c, 0x2f, 0xd8, 0x25, 0x46, 0x70, 0xde, + 0x17, 0x4a, 0x25, 0xa4, 0x14, 0xdc, 0xb2, 0xde, 0x12, 0xaa, 0xe7, 0x78, 0x4b, 0x60, 0xb5, 0x51, + 0xd6, 0x5b, 0x02, 0x55, 0xcd, 0x0b, 0x1f, 0x9b, 0x68, 0x8f, 0xaa, 0xb0, 0xd0, 0x19, 0x88, 0x5c, + 0xc6, 0x9a, 0xd0, 0xf8, 0x88, 0x7f, 0x32, 0x39, 0xe2, 0x4f, 0xf6, 0x57, 0x6a, 0xba, 0xbf, 0xba, + 0x16, 0xb9, 0xb1, 0x6d, 0x11, 0x27, 0xb0, 0x83, 0x01, 0x3e, 0x72, 0xe2, 0x7b, 0x05, 0xae, 0x37, + 0xf9, 0x72, 0xe6, 0x5c, 0x79, 0x3a, 0x73, 0xae, 0x7c, 0xf2, 0xb3, 0xc2, 0xcc, 0xf3, 0x79, 0x56, + 0x98, 0x7d, 0x3e, 0xcf, 0x0a, 0x73, 0xa7, 0x3c, 0x2b, 0xec, 0xc0, 0x0c, 0xa3, 0x4a, 0x4f, 0x34, + 0xb5, 0x9c, 0xd7, 0x7b, 0x0a, 0xc9, 0x53, 0xb3, 0xcc, 0x53, 0x1f, 0x2b, 0xe6, 0x4f, 0x7f, 0xac, + 0xc8, 0xf1, 0x7a, 0xb0, 0x70, 0xf6, 0xeb, 0xc1, 0x03, 0x50, 0x19, 0x17, 0x36, 0x53, 0x65, 0xff, + 0xb6, 0xe3, 0xaf, 0x9b, 0xcb, 0xc9, 0xea, 0x83, 0x03, 0x69, 0xca, 0xb8, 0xc7, 0x7e, 0xea, 0x0a, + 0xd2, 0xde, 0x37, 0xfc, 0x80, 0xaf, 0xd0, 0x06, 0x3e, 0xc6, 0x8f, 0xa6, 0x2b, 0xe2, 0x45, 0xae, + 0xb6, 0x88, 0xae, 0x36, 0x17, 0x52, 0x3d, 0x42, 0x78, 0xe8, 0x72, 0xd9, 0x2d, 0x4c, 0xed, 0x84, + 0x16, 0xe6, 0x13, 0x98, 0x45, 0x21, 0xd1, 0xd5, 0x16, 0xdd, 0xf0, 0x52, 0x96, 0xfa, 0x43, 0x03, + 0x33, 0x5f, 0x9f, 0xa6, 0xf4, 0xef, 0x0b, 0x72, 0xd1, 0xbb, 0x7e, 0x01, 0x0b, 0x29, 0xbe, 0xf1, + 0x77, 0xf9, 0xe5, 0xbc, 0x0f, 0xbf, 0x09, 0xde, 0xd1, 0x03, 0x7d, 0x4b, 0x92, 0x47, 0x14, 0xa9, + 0x25, 0xc9, 0x63, 0x4a, 0xb1, 0x25, 0xc9, 0x97, 0x94, 0x5a, 0xfd, 0x4f, 0x05, 0x28, 0x61, 0xb5, + 0x7a, 0x46, 0x16, 0xcc, 0xca, 0x41, 0x17, 0x33, 0x73, 0xd0, 0x06, 0x94, 0xd1, 0x4f, 0x79, 0x86, + 0x1e, 0xc9, 0xfb, 0x4f, 0x39, 0x46, 0x24, 0x32, 0x50, 0x3c, 0x10, 0x49, 0x28, 0x07, 0x63, 0x0b, + 0x8f, 0x41, 0xf3, 0x20, 0xb3, 0x78, 0x15, 0x0e, 0x90, 0x8a, 0xf8, 0xdd, 0xb4, 0xea, 0x7f, 0x96, + 0x40, 0xc5, 0xf1, 0x4c, 0xf2, 0x4f, 0x46, 0xa7, 0xe6, 0xf7, 0x68, 0x30, 0x9d, 0x9d, 0xdf, 0x43, + 0x78, 0x22, 0xbf, 0x67, 0x99, 0x64, 0x24, 0xd3, 0x24, 0x0d, 0x98, 0x12, 0x98, 0xf1, 0xba, 0x8a, + 0x8f, 0xbe, 0x38, 0x28, 0x36, 0xcc, 0xba, 0x02, 0x82, 0x83, 0x68, 0x36, 0xd9, 0xd8, 0x4b, 0x24, + 0x77, 0x36, 0xce, 0xca, 0x1c, 0x6e, 0xca, 0xd9, 0xc3, 0xcd, 0x45, 0x28, 0x85, 0x05, 0x9e, 0xc8, + 0xd8, 0xe1, 0xc2, 0x39, 0xff, 0x31, 0xf4, 0x69, 0xf8, 0x4f, 0x27, 0x96, 0x25, 0x79, 0x7c, 0x2e, + 0x63, 0xbd, 0xb7, 0x72, 0x42, 0xd7, 0xf0, 0x50, 0xbc, 0x08, 0xf8, 0x84, 0x45, 0x6e, 0xf1, 0x9f, + 0xa8, 0xd8, 0x12, 0xd5, 0x23, 0x7d, 0x14, 0xe1, 0x1c, 0x4c, 0x49, 0x1e, 0x02, 0x0e, 0xec, 0x47, + 0xd9, 0xfb, 0xc4, 0xf8, 0x79, 0xdf, 0x27, 0x18, 0xdd, 0x50, 0x25, 0x5c, 0x1d, 0xaa, 0x84, 0xc3, + 0x7f, 0xb9, 0x15, 0x15, 0xb9, 0xfe, 0xbb, 0x02, 0x4c, 0x72, 0x8b, 0x6e, 0x61, 0xfe, 0x7c, 0x5e, + 0x8e, 0x95, 0x99, 0xb9, 0x47, 0xb2, 0xff, 0x05, 0x90, 0x6d, 0x32, 0x29, 0xdb, 0x64, 0xf5, 0xdf, + 0x17, 0x00, 0xb6, 0xf1, 0x35, 0xf5, 0x79, 0xe9, 0x9e, 0xac, 0x0d, 0x47, 0xd2, 0xb5, 0x61, 0xb6, + 0xba, 0xc5, 0x6c, 0x75, 0x53, 0xff, 0x31, 0x64, 0x41, 0x4b, 0x56, 0x4a, 0xf5, 0xaf, 0x0a, 0x20, + 0x6f, 0x1d, 0x10, 0xf3, 0xd0, 0xef, 0x77, 0xd3, 0x9b, 0x18, 0x8d, 0x36, 0x71, 0x07, 0xc6, 0xf6, + 0x3a, 0xc6, 0x91, 0xeb, 0xa1, 0xca, 0xd5, 0xf5, 0xeb, 0xa7, 0xf7, 0x22, 0x82, 0xe3, 0x3d, 0xa4, + 0xd1, 0x39, 0x6d, 0xf4, 0x47, 0xcf, 0x11, 0x6c, 0xd2, 0xd8, 0xc7, 0xe6, 0xff, 0x7c, 0xf3, 0x5d, + 0xed, 0xc2, 0xb7, 0xdf, 0xd5, 0x2e, 0xfc, 0xf8, 0x5d, 0xad, 0xf0, 0xd5, 0xd3, 0x5a, 0xe1, 0xd7, + 0x4f, 0x6b, 0x85, 0x3f, 0x3e, 0xad, 0x15, 0xbe, 0x79, 0x5a, 0x2b, 0xfc, 0xf5, 0x69, 0xad, 0xf0, + 0xb7, 0xa7, 0xb5, 0x0b, 0x3f, 0x3e, 0xad, 0x15, 0xbe, 0xfe, 0xbe, 0x76, 0xe1, 0x9b, 0xef, 0x6b, + 0x17, 0xbe, 0xfd, 0xbe, 0x76, 0xe1, 0xb3, 0x9b, 0xfb, 0x6e, 0xa4, 0x83, 0xed, 0x9e, 0xfc, 0x27, + 0xe8, 0x77, 0x62, 0x9f, 0xbb, 0x63, 0x18, 0x34, 0x6f, 0xfc, 0x33, 0x00, 0x00, 0xff, 0xff, 0x26, + 0x9b, 0xf5, 0x0b, 0xa7, 0x2f, 0x00, 0x00, } func (this *ShardInfo) Equal(that interface{}) bool { @@ -2632,9 +2643,6 @@ func (this *WorkflowExecutionInfo) Equal(that interface{}) bool { } else if !this.WorkflowTaskScheduledTime.Equal(*that1.WorkflowTaskScheduledTime) { return false } - if this.CancelRequested != that1.CancelRequested { - return false - } if that1.WorkflowTaskOriginalScheduledTime == nil { if this.WorkflowTaskOriginalScheduledTime != nil { return false @@ -2645,6 +2653,12 @@ func (this *WorkflowExecutionInfo) Equal(that interface{}) bool { if this.WorkflowTaskRequestId != that1.WorkflowTaskRequestId { return false } + if this.WorkflowTaskType != that1.WorkflowTaskType { + return false + } + if this.CancelRequested != that1.CancelRequested { + return false + } if this.CancelRequestId != that1.CancelRequestId { return false } @@ -3620,7 +3634,7 @@ func (this *WorkflowExecutionInfo) GoString() string { if this == nil { return "nil" } - s := make([]string, 0, 61) + s := make([]string, 0, 62) s = append(s, "&persistence.WorkflowExecutionInfo{") s = append(s, "NamespaceId: "+fmt.Sprintf("%#v", this.NamespaceId)+",\n") s = append(s, "WorkflowId: "+fmt.Sprintf("%#v", this.WorkflowId)+",\n") @@ -3646,9 +3660,10 @@ func (this *WorkflowExecutionInfo) GoString() string { s = append(s, "WorkflowTaskAttempt: "+fmt.Sprintf("%#v", this.WorkflowTaskAttempt)+",\n") s = append(s, "WorkflowTaskStartedTime: "+fmt.Sprintf("%#v", this.WorkflowTaskStartedTime)+",\n") s = append(s, "WorkflowTaskScheduledTime: "+fmt.Sprintf("%#v", this.WorkflowTaskScheduledTime)+",\n") - s = append(s, "CancelRequested: "+fmt.Sprintf("%#v", this.CancelRequested)+",\n") s = append(s, "WorkflowTaskOriginalScheduledTime: "+fmt.Sprintf("%#v", this.WorkflowTaskOriginalScheduledTime)+",\n") s = append(s, "WorkflowTaskRequestId: "+fmt.Sprintf("%#v", this.WorkflowTaskRequestId)+",\n") + s = append(s, "WorkflowTaskType: "+fmt.Sprintf("%#v", this.WorkflowTaskType)+",\n") + s = append(s, "CancelRequested: "+fmt.Sprintf("%#v", this.CancelRequested)+",\n") s = append(s, "CancelRequestId: "+fmt.Sprintf("%#v", this.CancelRequestId)+",\n") s = append(s, "StickyTaskQueue: "+fmt.Sprintf("%#v", this.StickyTaskQueue)+",\n") s = append(s, "StickyScheduleToStartTimeout: "+fmt.Sprintf("%#v", this.StickyScheduleToStartTimeout)+",\n") @@ -3670,7 +3685,7 @@ func (this *WorkflowExecutionInfo) GoString() string { keysForSearchAttributes = append(keysForSearchAttributes, k) } github_com_gogo_protobuf_sortkeys.Strings(keysForSearchAttributes) - mapStringForSearchAttributes := "map[string]*v11.Payload{" + mapStringForSearchAttributes := "map[string]*v12.Payload{" for _, k := range keysForSearchAttributes { mapStringForSearchAttributes += fmt.Sprintf("%#v: %#v,", k, this.SearchAttributes[k]) } @@ -3683,7 +3698,7 @@ func (this *WorkflowExecutionInfo) GoString() string { keysForMemo = append(keysForMemo, k) } github_com_gogo_protobuf_sortkeys.Strings(keysForMemo) - mapStringForMemo := "map[string]*v11.Payload{" + mapStringForMemo := "map[string]*v12.Payload{" for _, k := range keysForMemo { mapStringForMemo += fmt.Sprintf("%#v: %#v,", k, this.Memo[k]) } @@ -4134,6 +4149,13 @@ func (m *WorkflowExecutionInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.WorkflowTaskType != 0 { + i = encodeVarintExecutions(dAtA, i, uint64(m.WorkflowTaskType)) + i-- + dAtA[i] = 0x4 + i-- + dAtA[i] = 0xa0 + } if m.CloseVisibilityTaskCompleted { i-- if m.CloseVisibilityTaskCompleted { @@ -6231,6 +6253,9 @@ func (m *WorkflowExecutionInfo) Size() (n int) { if m.CloseVisibilityTaskCompleted { n += 3 } + if m.WorkflowTaskType != 0 { + n += 2 + sovExecutions(uint64(m.WorkflowTaskType)) + } return n } @@ -6862,7 +6887,7 @@ func (this *WorkflowExecutionInfo) String() string { keysForSearchAttributes = append(keysForSearchAttributes, k) } github_com_gogo_protobuf_sortkeys.Strings(keysForSearchAttributes) - mapStringForSearchAttributes := "map[string]*v11.Payload{" + mapStringForSearchAttributes := "map[string]*v12.Payload{" for _, k := range keysForSearchAttributes { mapStringForSearchAttributes += fmt.Sprintf("%v: %v,", k, this.SearchAttributes[k]) } @@ -6872,7 +6897,7 @@ func (this *WorkflowExecutionInfo) String() string { keysForMemo = append(keysForMemo, k) } github_com_gogo_protobuf_sortkeys.Strings(keysForMemo) - mapStringForMemo := "map[string]*v11.Payload{" + mapStringForMemo := "map[string]*v12.Payload{" for _, k := range keysForMemo { mapStringForMemo += fmt.Sprintf("%v: %v,", k, this.Memo[k]) } @@ -6918,10 +6943,10 @@ func (this *WorkflowExecutionInfo) String() string { `HasRetryPolicy:` + fmt.Sprintf("%v", this.HasRetryPolicy) + `,`, `CronSchedule:` + fmt.Sprintf("%v", this.CronSchedule) + `,`, `SignalCount:` + fmt.Sprintf("%v", this.SignalCount) + `,`, - `AutoResetPoints:` + strings.Replace(fmt.Sprintf("%v", this.AutoResetPoints), "ResetPoints", "v1.ResetPoints", 1) + `,`, + `AutoResetPoints:` + strings.Replace(fmt.Sprintf("%v", this.AutoResetPoints), "ResetPoints", "v11.ResetPoints", 1) + `,`, `SearchAttributes:` + mapStringForSearchAttributes + `,`, `Memo:` + mapStringForMemo + `,`, - `VersionHistories:` + strings.Replace(fmt.Sprintf("%v", this.VersionHistories), "VersionHistories", "v12.VersionHistories", 1) + `,`, + `VersionHistories:` + strings.Replace(fmt.Sprintf("%v", this.VersionHistories), "VersionHistories", "v13.VersionHistories", 1) + `,`, `FirstExecutionRunId:` + fmt.Sprintf("%v", this.FirstExecutionRunId) + `,`, `ExecutionStats:` + strings.Replace(this.ExecutionStats.String(), "ExecutionStats", "ExecutionStats", 1) + `,`, `WorkflowRunExpirationTime:` + strings.Replace(fmt.Sprintf("%v", this.WorkflowRunExpirationTime), "Timestamp", "types.Timestamp", 1) + `,`, @@ -6929,12 +6954,13 @@ func (this *WorkflowExecutionInfo) String() string { `StateTransitionCount:` + fmt.Sprintf("%v", this.StateTransitionCount) + `,`, `ExecutionTime:` + strings.Replace(fmt.Sprintf("%v", this.ExecutionTime), "Timestamp", "types.Timestamp", 1) + `,`, `NewExecutionRunId:` + fmt.Sprintf("%v", this.NewExecutionRunId) + `,`, - `ParentClock:` + strings.Replace(fmt.Sprintf("%v", this.ParentClock), "VectorClock", "v13.VectorClock", 1) + `,`, + `ParentClock:` + strings.Replace(fmt.Sprintf("%v", this.ParentClock), "VectorClock", "v14.VectorClock", 1) + `,`, `ParentInitiatedVersion:` + fmt.Sprintf("%v", this.ParentInitiatedVersion) + `,`, `CloseTransferTaskId:` + fmt.Sprintf("%v", this.CloseTransferTaskId) + `,`, `CloseVisibilityTaskId:` + fmt.Sprintf("%v", this.CloseVisibilityTaskId) + `,`, `CloseTime:` + strings.Replace(fmt.Sprintf("%v", this.CloseTime), "Timestamp", "types.Timestamp", 1) + `,`, `CloseVisibilityTaskCompleted:` + fmt.Sprintf("%v", this.CloseVisibilityTaskCompleted) + `,`, + `WorkflowTaskType:` + fmt.Sprintf("%v", this.WorkflowTaskType) + `,`, `}`, }, "") return s @@ -7117,7 +7143,7 @@ func (this *ActivityInfo) String() string { `RetryLastFailure:` + strings.Replace(fmt.Sprintf("%v", this.RetryLastFailure), "Failure", "v16.Failure", 1) + `,`, `RetryLastWorkerIdentity:` + fmt.Sprintf("%v", this.RetryLastWorkerIdentity) + `,`, `ScheduledEventId:` + fmt.Sprintf("%v", this.ScheduledEventId) + `,`, - `LastHeartbeatDetails:` + strings.Replace(fmt.Sprintf("%v", this.LastHeartbeatDetails), "Payloads", "v11.Payloads", 1) + `,`, + `LastHeartbeatDetails:` + strings.Replace(fmt.Sprintf("%v", this.LastHeartbeatDetails), "Payloads", "v12.Payloads", 1) + `,`, `LastHeartbeatUpdateTime:` + strings.Replace(fmt.Sprintf("%v", this.LastHeartbeatUpdateTime), "Timestamp", "types.Timestamp", 1) + `,`, `}`, }, "") @@ -7152,7 +7178,7 @@ func (this *ChildExecutionInfo) String() string { `WorkflowTypeName:` + fmt.Sprintf("%v", this.WorkflowTypeName) + `,`, `ParentClosePolicy:` + fmt.Sprintf("%v", this.ParentClosePolicy) + `,`, `InitiatedEventId:` + fmt.Sprintf("%v", this.InitiatedEventId) + `,`, - `Clock:` + strings.Replace(fmt.Sprintf("%v", this.Clock), "VectorClock", "v13.VectorClock", 1) + `,`, + `Clock:` + strings.Replace(fmt.Sprintf("%v", this.Clock), "VectorClock", "v14.VectorClock", 1) + `,`, `NamespaceId:` + fmt.Sprintf("%v", this.NamespaceId) + `,`, `}`, }, "") @@ -8934,7 +8960,7 @@ func (m *WorkflowExecutionInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.AutoResetPoints == nil { - m.AutoResetPoints = &v1.ResetPoints{} + m.AutoResetPoints = &v11.ResetPoints{} } if err := m.AutoResetPoints.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -8970,10 +8996,10 @@ func (m *WorkflowExecutionInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.SearchAttributes == nil { - m.SearchAttributes = make(map[string]*v11.Payload) + m.SearchAttributes = make(map[string]*v12.Payload) } var mapkey string - var mapvalue *v11.Payload + var mapvalue *v12.Payload for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -9047,7 +9073,7 @@ func (m *WorkflowExecutionInfo) Unmarshal(dAtA []byte) error { if postmsgIndex > l { return io.ErrUnexpectedEOF } - mapvalue = &v11.Payload{} + mapvalue = &v12.Payload{} if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { return err } @@ -9099,10 +9125,10 @@ func (m *WorkflowExecutionInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Memo == nil { - m.Memo = make(map[string]*v11.Payload) + m.Memo = make(map[string]*v12.Payload) } var mapkey string - var mapvalue *v11.Payload + var mapvalue *v12.Payload for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -9176,7 +9202,7 @@ func (m *WorkflowExecutionInfo) Unmarshal(dAtA []byte) error { if postmsgIndex > l { return io.ErrUnexpectedEOF } - mapvalue = &v11.Payload{} + mapvalue = &v12.Payload{} if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { return err } @@ -9228,7 +9254,7 @@ func (m *WorkflowExecutionInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.VersionHistories == nil { - m.VersionHistories = &v12.VersionHistories{} + m.VersionHistories = &v13.VersionHistories{} } if err := m.VersionHistories.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -9474,7 +9500,7 @@ func (m *WorkflowExecutionInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.ParentClock == nil { - m.ParentClock = &v13.VectorClock{} + m.ParentClock = &v14.VectorClock{} } if err := m.ParentClock.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -9593,6 +9619,25 @@ func (m *WorkflowExecutionInfo) Unmarshal(dAtA []byte) error { } } m.CloseVisibilityTaskCompleted = bool(v != 0) + case 68: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkflowTaskType", wireType) + } + m.WorkflowTaskType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutions + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.WorkflowTaskType |= v1.WorkflowTaskType(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipExecutions(dAtA[iNdEx:]) @@ -9796,7 +9841,7 @@ func (m *WorkflowExecutionState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.State |= v14.WorkflowExecutionState(b&0x7F) << shift + m.State |= v1.WorkflowExecutionState(b&0x7F) << shift if b < 0x80 { break } @@ -9983,7 +10028,7 @@ func (m *TransferTaskInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.TaskType |= v14.TaskType(b&0x7F) << shift + m.TaskType |= v1.TaskType(b&0x7F) << shift if b < 0x80 { break } @@ -10520,7 +10565,7 @@ func (m *ReplicationTaskInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.TaskType |= v14.TaskType(b&0x7F) << shift + m.TaskType |= v1.TaskType(b&0x7F) << shift if b < 0x80 { break } @@ -10919,7 +10964,7 @@ func (m *VisibilityTaskInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.TaskType |= v14.TaskType(b&0x7F) << shift + m.TaskType |= v1.TaskType(b&0x7F) << shift if b < 0x80 { break } @@ -11252,7 +11297,7 @@ func (m *TimerTaskInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.TaskType |= v14.TaskType(b&0x7F) << shift + m.TaskType |= v1.TaskType(b&0x7F) << shift if b < 0x80 { break } @@ -11290,7 +11335,7 @@ func (m *TimerTaskInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WorkflowBackoffType |= v14.WorkflowBackoffType(b&0x7F) << shift + m.WorkflowBackoffType |= v1.WorkflowBackoffType(b&0x7F) << shift if b < 0x80 { break } @@ -11643,7 +11688,7 @@ func (m *ArchivalTaskInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.TaskType |= v14.TaskType(b&0x7F) << shift + m.TaskType |= v1.TaskType(b&0x7F) << shift if b < 0x80 { break } @@ -12541,7 +12586,7 @@ func (m *ActivityInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.LastHeartbeatDetails == nil { - m.LastHeartbeatDetails = &v11.Payloads{} + m.LastHeartbeatDetails = &v12.Payloads{} } if err := m.LastHeartbeatDetails.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -13099,7 +13144,7 @@ func (m *ChildExecutionInfo) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Clock == nil { - m.Clock = &v13.VectorClock{} + m.Clock = &v14.VectorClock{} } if err := m.Clock.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -13507,7 +13552,7 @@ func (m *Checksum) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Flavor |= v14.ChecksumFlavor(b&0x7F) << shift + m.Flavor |= v1.ChecksumFlavor(b&0x7F) << shift if b < 0x80 { break } diff --git a/common/log/tag/tags.go b/common/log/tag/tags.go index 8c765b25a39..723df8ea27d 100644 --- a/common/log/tag/tags.go +++ b/common/log/tag/tags.go @@ -611,6 +611,10 @@ func Attempt(attempt int32) ZapTag { return NewInt32("attempt", attempt) } +func WorkflowTaskType(wtType string) ZapTag { + return NewStringTag("wt-type", wtType) +} + // AttemptCount returns tag for AttemptCount func AttemptCount(attemptCount int64) ZapTag { return NewInt64("attempt-count", attemptCount) diff --git a/proto/internal/temporal/server/api/enums/v1/workflow_task_type.proto b/proto/internal/temporal/server/api/enums/v1/workflow_task_type.proto new file mode 100644 index 00000000000..e1856df1cac --- /dev/null +++ b/proto/internal/temporal/server/api/enums/v1/workflow_task_type.proto @@ -0,0 +1,33 @@ +// Copyright (c) 2021 Temporal Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +syntax = "proto3"; + +package temporal.server.api.enums.v1; + +option go_package = "go.temporal.io/server/api/enums/v1;enums"; + +enum WorkflowTaskType { + WORKFLOW_TASK_TYPE_UNSPECIFIED = 0; + WORKFLOW_TASK_TYPE_NORMAL = 1; + // TODO (alex): TRANSIENT is not current used. Needs to be set when Attempt>1. + WORKFLOW_TASK_TYPE_TRANSIENT = 2; + WORKFLOW_TASK_TYPE_SPECULATIVE = 3; +} diff --git a/proto/internal/temporal/server/api/persistence/v1/executions.proto b/proto/internal/temporal/server/api/persistence/v1/executions.proto index a864c657c7a..58c8759a3d6 100644 --- a/proto/internal/temporal/server/api/persistence/v1/executions.proto +++ b/proto/internal/temporal/server/api/persistence/v1/executions.proto @@ -37,6 +37,7 @@ import "temporal/server/api/clock/v1/message.proto"; import "temporal/server/api/enums/v1/common.proto"; import "temporal/server/api/enums/v1/workflow.proto"; import "temporal/server/api/enums/v1/task.proto"; +import "temporal/server/api/enums/v1/workflow_task_type.proto"; import "temporal/server/api/history/v1/message.proto"; import "temporal/server/api/persistence/v1/queues.proto"; @@ -87,6 +88,8 @@ message WorkflowExecutionInfo { int64 last_workflow_task_started_event_id = 19; google.protobuf.Timestamp start_time = 20 [(gogoproto.stdtime) = true]; google.protobuf.Timestamp last_update_time = 21 [(gogoproto.stdtime) = true]; + + // Workflow task fields. int64 workflow_task_version = 22; int64 workflow_task_scheduled_event_id = 23; int64 workflow_task_started_event_id = 24; @@ -94,9 +97,11 @@ message WorkflowExecutionInfo { int32 workflow_task_attempt = 26; google.protobuf.Timestamp workflow_task_started_time = 27 [(gogoproto.stdtime) = true]; google.protobuf.Timestamp workflow_task_scheduled_time = 28 [(gogoproto.stdtime) = true]; - bool cancel_requested = 29; google.protobuf.Timestamp workflow_task_original_scheduled_time = 30 [(gogoproto.stdtime) = true]; string workflow_task_request_id = 31; + temporal.server.api.enums.v1.WorkflowTaskType workflow_task_type = 68; + + bool cancel_requested = 29; string cancel_request_id = 32; string sticky_task_queue = 33; // (-- api-linter: core::0140::prepositions=disabled diff --git a/service/history/api/signalwithstartworkflow/signal_with_start_workflow.go b/service/history/api/signalwithstartworkflow/signal_with_start_workflow.go index e412a7bb18e..8cece6ec72b 100644 --- a/service/history/api/signalwithstartworkflow/signal_with_start_workflow.go +++ b/service/history/api/signalwithstartworkflow/signal_with_start_workflow.go @@ -32,6 +32,7 @@ import ( "go.temporal.io/api/serviceerror" "go.temporal.io/api/workflowservice/v1" + enumsspb "go.temporal.io/server/api/enums/v1" "go.temporal.io/server/api/historyservice/v1" "go.temporal.io/server/common/namespace" "go.temporal.io/server/common/persistence" @@ -286,7 +287,7 @@ func signalWorkflow( // Create a transfer task to schedule a workflow task if !mutableState.HasPendingWorkflowTask() { - _, err := mutableState.AddWorkflowTaskScheduledEvent(false) + _, err := mutableState.AddWorkflowTaskScheduledEvent(false, enumsspb.WORKFLOW_TASK_TYPE_NORMAL) if err != nil { return err } diff --git a/service/history/api/signalwithstartworkflow/signal_with_start_workflow_test.go b/service/history/api/signalwithstartworkflow/signal_with_start_workflow_test.go index 106d6bdee60..49365903b54 100644 --- a/service/history/api/signalwithstartworkflow/signal_with_start_workflow_test.go +++ b/service/history/api/signalwithstartworkflow/signal_with_start_workflow_test.go @@ -38,6 +38,7 @@ import ( "go.temporal.io/api/history/v1" "go.temporal.io/api/workflowservice/v1" + enumsspb "go.temporal.io/server/api/enums/v1" "go.temporal.io/server/api/persistence/v1" "go.temporal.io/server/common/clock" "go.temporal.io/server/common/log" @@ -146,7 +147,7 @@ func (s *signalWithStartWorkflowSuite) TestSignalWorkflow_NewWorkflowTask() { request.GetHeader(), ).Return(&history.HistoryEvent{}, nil) s.currentMutableState.EXPECT().HasPendingWorkflowTask().Return(false) - s.currentMutableState.EXPECT().AddWorkflowTaskScheduledEvent(false).Return(&workflow.WorkflowTaskInfo{}, nil) + s.currentMutableState.EXPECT().AddWorkflowTaskScheduledEvent(false, enumsspb.WORKFLOW_TASK_TYPE_NORMAL).Return(&workflow.WorkflowTaskInfo{}, nil) s.currentContext.EXPECT().UpdateWorkflowExecutionAsActive(ctx, gomock.Any()).Return(nil) err := signalWorkflow( diff --git a/service/history/api/update_workflow_util.go b/service/history/api/update_workflow_util.go index e61897490ca..16832b4bbae 100644 --- a/service/history/api/update_workflow_util.go +++ b/service/history/api/update_workflow_util.go @@ -28,6 +28,7 @@ import ( "context" clockspb "go.temporal.io/server/api/clock/v1" + enumsspb "go.temporal.io/server/api/enums/v1" "go.temporal.io/server/common/definition" "go.temporal.io/server/service/history/shard" "go.temporal.io/server/service/history/workflow" @@ -80,6 +81,7 @@ func UpdateWorkflowWithNew( if !mutableState.HasPendingWorkflowTask() { if _, err := mutableState.AddWorkflowTaskScheduledEvent( false, + enumsspb.WORKFLOW_TASK_TYPE_NORMAL, ); err != nil { return err } diff --git a/service/history/historyEngine_test.go b/service/history/historyEngine_test.go index d0c15d177b6..b91c905e1fe 100644 --- a/service/history/historyEngine_test.go +++ b/service/history/historyEngine_test.go @@ -5120,7 +5120,7 @@ func addWorkflowExecutionStartedEvent(ms workflow.MutableState, workflowExecutio } func addWorkflowTaskScheduledEvent(ms workflow.MutableState) *workflow.WorkflowTaskInfo { - workflowTask, _ := ms.AddWorkflowTaskScheduledEvent(false) + workflowTask, _ := ms.AddWorkflowTaskScheduledEvent(false, enumsspb.WORKFLOW_TASK_TYPE_NORMAL) return workflowTask } diff --git a/service/history/ndc/events_reapplier.go b/service/history/ndc/events_reapplier.go index c774b73709c..6c0d7e5259b 100644 --- a/service/history/ndc/events_reapplier.go +++ b/service/history/ndc/events_reapplier.go @@ -33,6 +33,7 @@ import ( historypb "go.temporal.io/api/history/v1" "go.temporal.io/api/serviceerror" + enumsspb "go.temporal.io/server/api/enums/v1" "go.temporal.io/server/common/definition" "go.temporal.io/server/common/log" "go.temporal.io/server/common/metrics" @@ -117,6 +118,7 @@ func (r *EventsReapplierImpl) ReapplyEvents( if !ms.HasPendingWorkflowTask() { if _, err := ms.AddWorkflowTaskScheduledEvent( false, + enumsspb.WORKFLOW_TASK_TYPE_NORMAL, ); err != nil { return nil, err } diff --git a/service/history/workflow/mutable_state.go b/service/history/workflow/mutable_state.go index f612dc71238..1b4466d8901 100644 --- a/service/history/workflow/mutable_state.go +++ b/service/history/workflow/mutable_state.go @@ -85,6 +85,9 @@ type ( // In this case, OriginalScheduledTime won't change. Then when time.Now().UTC()-OriginalScheduledTime exceeds // some threshold, server can interrupt the heartbeat by enforcing to time out the workflow task. OriginalScheduledTime *time.Time + + // Indicate type of the current workflow task (normal, transient, or speculative). + Type enumsspb.WorkflowTaskType } MutableState interface { @@ -107,8 +110,8 @@ type ( AddWorkflowTaskFailedEvent(scheduledEventID int64, startedEventID int64, cause enumspb.WorkflowTaskFailedCause, failure *failurepb.Failure, identity, binChecksum, baseRunID, newRunID string, forkEventVersion int64) (*historypb.HistoryEvent, error) AddWorkflowTaskScheduleToStartTimeoutEvent(int64) (*historypb.HistoryEvent, error) AddFirstWorkflowTaskScheduled(*historypb.HistoryEvent) error - AddWorkflowTaskScheduledEvent(bypassTaskGeneration bool) (*WorkflowTaskInfo, error) - AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration bool, originalScheduledTimestamp *time.Time) (*WorkflowTaskInfo, error) + AddWorkflowTaskScheduledEvent(bypassTaskGeneration bool, workflowTaskType enumsspb.WorkflowTaskType) (*WorkflowTaskInfo, error) + AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration bool, originalScheduledTimestamp *time.Time, workflowTaskType enumsspb.WorkflowTaskType) (*WorkflowTaskInfo, error) AddWorkflowTaskStartedEvent(int64, string, *taskqueuepb.TaskQueue, string) (*historypb.HistoryEvent, *WorkflowTaskInfo, error) AddWorkflowTaskTimedOutEvent(int64, int64) (*historypb.HistoryEvent, error) AddExternalWorkflowExecutionCancelRequested(int64, namespace.Name, namespace.ID, string, string) (*historypb.HistoryEvent, error) @@ -214,7 +217,7 @@ type ( ReplicateChildWorkflowExecutionTimedOutEvent(*historypb.HistoryEvent) error ReplicateWorkflowTaskCompletedEvent(*historypb.HistoryEvent) error ReplicateWorkflowTaskFailedEvent() error - ReplicateWorkflowTaskScheduledEvent(int64, int64, *taskqueuepb.TaskQueue, *time.Duration, int32, *time.Time, *time.Time) (*WorkflowTaskInfo, error) + ReplicateWorkflowTaskScheduledEvent(int64, int64, *taskqueuepb.TaskQueue, *time.Duration, int32, *time.Time, *time.Time, enumsspb.WorkflowTaskType) (*WorkflowTaskInfo, error) ReplicateWorkflowTaskStartedEvent(*WorkflowTaskInfo, int64, int64, int64, string, time.Time) (*WorkflowTaskInfo, error) ReplicateWorkflowTaskTimedOutEvent(enumspb.TimeoutType) error ReplicateExternalWorkflowExecutionCancelRequested(*historypb.HistoryEvent) error diff --git a/service/history/workflow/mutable_state_impl.go b/service/history/workflow/mutable_state_impl.go index 8fda39fbe02..31435f7124f 100644 --- a/service/history/workflow/mutable_state_impl.go +++ b/service/history/workflow/mutable_state_impl.go @@ -1322,6 +1322,7 @@ func (ms *MutableStateImpl) ClearTransientWorkflowTask() error { TaskQueue: nil, OriginalScheduledTime: timestamp.UnixOrZeroTimePtr(0), + Type: enumsspb.WORKFLOW_TASK_TYPE_UNSPECIFIED, } ms.workflowTaskManager.UpdateWorkflowTask(emptyWorkflowTaskInfo) return nil @@ -1719,24 +1720,26 @@ func (ms *MutableStateImpl) AddFirstWorkflowTaskScheduled( func (ms *MutableStateImpl) AddWorkflowTaskScheduledEvent( bypassTaskGeneration bool, + workflowTaskType enumsspb.WorkflowTaskType, ) (*WorkflowTaskInfo, error) { opTag := tag.WorkflowActionWorkflowTaskScheduled if err := ms.checkMutability(opTag); err != nil { return nil, err } - return ms.workflowTaskManager.AddWorkflowTaskScheduledEvent(bypassTaskGeneration) + return ms.workflowTaskManager.AddWorkflowTaskScheduledEvent(bypassTaskGeneration, workflowTaskType) } // AddWorkflowTaskScheduledEventAsHeartbeat is to record the first WorkflowTaskScheduledEvent during workflow task heartbeat. func (ms *MutableStateImpl) AddWorkflowTaskScheduledEventAsHeartbeat( bypassTaskGeneration bool, originalScheduledTimestamp *time.Time, + workflowTaskType enumsspb.WorkflowTaskType, ) (*WorkflowTaskInfo, error) { opTag := tag.WorkflowActionWorkflowTaskScheduled if err := ms.checkMutability(opTag); err != nil { return nil, err } - return ms.workflowTaskManager.AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration, originalScheduledTimestamp) + return ms.workflowTaskManager.AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration, originalScheduledTimestamp, workflowTaskType) } func (ms *MutableStateImpl) ReplicateTransientWorkflowTaskScheduled() (*WorkflowTaskInfo, error) { @@ -1751,8 +1754,9 @@ func (ms *MutableStateImpl) ReplicateWorkflowTaskScheduledEvent( attempt int32, scheduleTimestamp *time.Time, originalScheduledTimestamp *time.Time, + workflowTaskType enumsspb.WorkflowTaskType, ) (*WorkflowTaskInfo, error) { - return ms.workflowTaskManager.ReplicateWorkflowTaskScheduledEvent(version, scheduledEventID, taskQueue, startToCloseTimeout, attempt, scheduleTimestamp, originalScheduledTimestamp) + return ms.workflowTaskManager.ReplicateWorkflowTaskScheduledEvent(version, scheduledEventID, taskQueue, startToCloseTimeout, attempt, scheduleTimestamp, originalScheduledTimestamp, workflowTaskType) } func (ms *MutableStateImpl) AddWorkflowTaskStartedEvent( diff --git a/service/history/workflow/mutable_state_impl_test.go b/service/history/workflow/mutable_state_impl_test.go index 6d1245b1319..dc48357f267 100644 --- a/service/history/workflow/mutable_state_impl_test.go +++ b/service/history/workflow/mutable_state_impl_test.go @@ -406,7 +406,7 @@ func (s *mutableStateSuite) TestTransientWorkflowTaskSchedule_CurrentVersionChan }) s.NoError(err) - wt, err := s.mutableState.AddWorkflowTaskScheduledEventAsHeartbeat(true, timestamp.TimeNowPtrUtc()) + wt, err := s.mutableState.AddWorkflowTaskScheduledEventAsHeartbeat(true, timestamp.TimeNowPtrUtc(), enumsspb.WORKFLOW_TASK_TYPE_NORMAL) s.NoError(err) s.NotNil(wt) @@ -437,7 +437,7 @@ func (s *mutableStateSuite) TestTransientWorkflowTaskStart_CurrentVersionChanged }) s.NoError(err) - wt, err := s.mutableState.AddWorkflowTaskScheduledEventAsHeartbeat(true, timestamp.TimeNowPtrUtc()) + wt, err := s.mutableState.AddWorkflowTaskScheduledEventAsHeartbeat(true, timestamp.TimeNowPtrUtc(), enumsspb.WORKFLOW_TASK_TYPE_NORMAL) s.NoError(err) s.NotNil(wt) @@ -583,6 +583,7 @@ func (s *mutableStateSuite) prepareTransientWorkflowTaskCompletionFirstBatchRepl workflowTaskScheduleEvent.GetWorkflowTaskScheduledEventAttributes().GetAttempt(), nil, nil, + enumsspb.WORKFLOW_TASK_TYPE_NORMAL, ) s.Nil(err) s.NotNil(wt) @@ -634,6 +635,7 @@ func (s *mutableStateSuite) prepareTransientWorkflowTaskCompletionFirstBatchRepl newWorkflowTaskScheduleEvent.GetWorkflowTaskScheduledEventAttributes().GetAttempt(), nil, nil, + enumsspb.WORKFLOW_TASK_TYPE_NORMAL, ) s.Nil(err) s.NotNil(wt) diff --git a/service/history/workflow/mutable_state_mock.go b/service/history/workflow/mutable_state_mock.go index c5ed5dea728..100289bc157 100644 --- a/service/history/workflow/mutable_state_mock.go +++ b/service/history/workflow/mutable_state_mock.go @@ -726,33 +726,33 @@ func (mr *MockMutableStateMockRecorder) AddWorkflowTaskScheduleToStartTimeoutEve } // AddWorkflowTaskScheduledEvent mocks base method. -func (m *MockMutableState) AddWorkflowTaskScheduledEvent(bypassTaskGeneration bool) (*WorkflowTaskInfo, error) { +func (m *MockMutableState) AddWorkflowTaskScheduledEvent(bypassTaskGeneration bool, workflowTaskType v18.WorkflowTaskType) (*WorkflowTaskInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddWorkflowTaskScheduledEvent", bypassTaskGeneration) + ret := m.ctrl.Call(m, "AddWorkflowTaskScheduledEvent", bypassTaskGeneration, workflowTaskType) ret0, _ := ret[0].(*WorkflowTaskInfo) ret1, _ := ret[1].(error) return ret0, ret1 } // AddWorkflowTaskScheduledEvent indicates an expected call of AddWorkflowTaskScheduledEvent. -func (mr *MockMutableStateMockRecorder) AddWorkflowTaskScheduledEvent(bypassTaskGeneration interface{}) *gomock.Call { +func (mr *MockMutableStateMockRecorder) AddWorkflowTaskScheduledEvent(bypassTaskGeneration, workflowTaskType interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddWorkflowTaskScheduledEvent", reflect.TypeOf((*MockMutableState)(nil).AddWorkflowTaskScheduledEvent), bypassTaskGeneration) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddWorkflowTaskScheduledEvent", reflect.TypeOf((*MockMutableState)(nil).AddWorkflowTaskScheduledEvent), bypassTaskGeneration, workflowTaskType) } // AddWorkflowTaskScheduledEventAsHeartbeat mocks base method. -func (m *MockMutableState) AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration bool, originalScheduledTimestamp *time.Time) (*WorkflowTaskInfo, error) { +func (m *MockMutableState) AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration bool, originalScheduledTimestamp *time.Time, workflowTaskType v18.WorkflowTaskType) (*WorkflowTaskInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddWorkflowTaskScheduledEventAsHeartbeat", bypassTaskGeneration, originalScheduledTimestamp) + ret := m.ctrl.Call(m, "AddWorkflowTaskScheduledEventAsHeartbeat", bypassTaskGeneration, originalScheduledTimestamp, workflowTaskType) ret0, _ := ret[0].(*WorkflowTaskInfo) ret1, _ := ret[1].(error) return ret0, ret1 } // AddWorkflowTaskScheduledEventAsHeartbeat indicates an expected call of AddWorkflowTaskScheduledEventAsHeartbeat. -func (mr *MockMutableStateMockRecorder) AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration, originalScheduledTimestamp interface{}) *gomock.Call { +func (mr *MockMutableStateMockRecorder) AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration, originalScheduledTimestamp, workflowTaskType interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddWorkflowTaskScheduledEventAsHeartbeat", reflect.TypeOf((*MockMutableState)(nil).AddWorkflowTaskScheduledEventAsHeartbeat), bypassTaskGeneration, originalScheduledTimestamp) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddWorkflowTaskScheduledEventAsHeartbeat", reflect.TypeOf((*MockMutableState)(nil).AddWorkflowTaskScheduledEventAsHeartbeat), bypassTaskGeneration, originalScheduledTimestamp, workflowTaskType) } // AddWorkflowTaskStartedEvent mocks base method. @@ -2297,18 +2297,18 @@ func (mr *MockMutableStateMockRecorder) ReplicateWorkflowTaskFailedEvent() *gomo } // ReplicateWorkflowTaskScheduledEvent mocks base method. -func (m *MockMutableState) ReplicateWorkflowTaskScheduledEvent(arg0, arg1 int64, arg2 *v14.TaskQueue, arg3 *time.Duration, arg4 int32, arg5, arg6 *time.Time) (*WorkflowTaskInfo, error) { +func (m *MockMutableState) ReplicateWorkflowTaskScheduledEvent(arg0, arg1 int64, arg2 *v14.TaskQueue, arg3 *time.Duration, arg4 int32, arg5, arg6 *time.Time, arg7 v18.WorkflowTaskType) (*WorkflowTaskInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ReplicateWorkflowTaskScheduledEvent", arg0, arg1, arg2, arg3, arg4, arg5, arg6) + ret := m.ctrl.Call(m, "ReplicateWorkflowTaskScheduledEvent", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) ret0, _ := ret[0].(*WorkflowTaskInfo) ret1, _ := ret[1].(error) return ret0, ret1 } // ReplicateWorkflowTaskScheduledEvent indicates an expected call of ReplicateWorkflowTaskScheduledEvent. -func (mr *MockMutableStateMockRecorder) ReplicateWorkflowTaskScheduledEvent(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { +func (mr *MockMutableStateMockRecorder) ReplicateWorkflowTaskScheduledEvent(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReplicateWorkflowTaskScheduledEvent", reflect.TypeOf((*MockMutableState)(nil).ReplicateWorkflowTaskScheduledEvent), arg0, arg1, arg2, arg3, arg4, arg5, arg6) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReplicateWorkflowTaskScheduledEvent", reflect.TypeOf((*MockMutableState)(nil).ReplicateWorkflowTaskScheduledEvent), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) } // ReplicateWorkflowTaskStartedEvent mocks base method. diff --git a/service/history/workflow/mutable_state_rebuilder.go b/service/history/workflow/mutable_state_rebuilder.go index fff78dbca99..d93d81cf17c 100644 --- a/service/history/workflow/mutable_state_rebuilder.go +++ b/service/history/workflow/mutable_state_rebuilder.go @@ -36,6 +36,7 @@ import ( historypb "go.temporal.io/api/history/v1" "go.temporal.io/api/serviceerror" + enumsspb "go.temporal.io/server/api/enums/v1" "go.temporal.io/server/common/cluster" "go.temporal.io/server/common/log" "go.temporal.io/server/common/namespace" @@ -191,6 +192,7 @@ func (b *MutableStateRebuilderImpl) ApplyEvents( attributes.GetAttempt(), event.GetEventTime(), event.GetEventTime(), + enumsspb.WORKFLOW_TASK_TYPE_NORMAL, // speculative workflow tasks are not replicated. ) if err != nil { return nil, err diff --git a/service/history/workflow/mutable_state_rebuilder_test.go b/service/history/workflow/mutable_state_rebuilder_test.go index cb40f4e7f27..1e9f9ff564e 100644 --- a/service/history/workflow/mutable_state_rebuilder_test.go +++ b/service/history/workflow/mutable_state_rebuilder_test.go @@ -39,6 +39,7 @@ import ( historypb "go.temporal.io/api/history/v1" taskqueuepb "go.temporal.io/api/taskqueue/v1" + enumsspb "go.temporal.io/server/api/enums/v1" historyspb "go.temporal.io/server/api/history/v1" persistencespb "go.temporal.io/server/api/persistence/v1" "go.temporal.io/server/common" @@ -756,10 +757,11 @@ func (s *stateBuilderSuite) TestApplyEvents_EventTypeWorkflowTaskScheduled() { WorkflowTaskTimeout: &timeout, TaskQueue: taskqueue, Attempt: workflowTaskAttempt, + Type: enumsspb.WORKFLOW_TASK_TYPE_NORMAL, } s.executionInfo.TaskQueue = taskqueue.GetName() s.mockMutableState.EXPECT().ReplicateWorkflowTaskScheduledEvent( - event.GetVersion(), event.GetEventId(), taskqueue, &timeout, workflowTaskAttempt, event.GetEventTime(), event.GetEventTime(), + event.GetVersion(), event.GetEventId(), taskqueue, &timeout, workflowTaskAttempt, event.GetEventTime(), event.GetEventTime(), enumsspb.WORKFLOW_TASK_TYPE_NORMAL, ).Return(wt, nil) s.mockUpdateVersion(event) s.mockTaskGenerator.EXPECT().GenerateScheduleWorkflowTaskTasks( diff --git a/service/history/workflow/util.go b/service/history/workflow/util.go index d4c7c99ae2f..ae1464a42a8 100644 --- a/service/history/workflow/util.go +++ b/service/history/workflow/util.go @@ -33,6 +33,7 @@ import ( "go.temporal.io/api/serviceerror" workflowpb "go.temporal.io/api/workflow/v1" + enumsspb "go.temporal.io/server/api/enums/v1" "go.temporal.io/server/common" "go.temporal.io/server/common/clock" "go.temporal.io/server/common/namespace" @@ -72,7 +73,7 @@ func ScheduleWorkflowTask( return nil } - _, err := mutableState.AddWorkflowTaskScheduledEvent(false) + _, err := mutableState.AddWorkflowTaskScheduledEvent(false, enumsspb.WORKFLOW_TASK_TYPE_NORMAL) if err != nil { return serviceerror.NewInternal("Failed to add workflow task scheduled event.") } diff --git a/service/history/workflow/workflow_task_state_machine.go b/service/history/workflow/workflow_task_state_machine.go index f034a20ec72..c46d9a92c81 100644 --- a/service/history/workflow/workflow_task_state_machine.go +++ b/service/history/workflow/workflow_task_state_machine.go @@ -74,6 +74,7 @@ func (m *workflowTaskStateMachine) ReplicateWorkflowTaskScheduledEvent( attempt int32, scheduledTime *time.Time, originalScheduledTimestamp *time.Time, + workflowTaskType enumsspb.WorkflowTaskType, ) (*WorkflowTaskInfo, error) { // set workflow state to running, since workflow task is scheduled @@ -99,6 +100,7 @@ func (m *workflowTaskStateMachine) ReplicateWorkflowTaskScheduledEvent( ScheduledTime: scheduledTime, StartedTime: nil, OriginalScheduledTime: originalScheduledTimestamp, + Type: workflowTaskType, } m.UpdateWorkflowTask(workflowTask) @@ -141,6 +143,7 @@ func (m *workflowTaskStateMachine) ReplicateTransientWorkflowTaskScheduled() (*W Attempt: m.ms.GetExecutionInfo().WorkflowTaskAttempt, ScheduledTime: timestamp.TimePtr(m.ms.timeSource.Now()), StartedTime: timestamp.UnixOrZeroTimePtr(0), + Type: enumsspb.WORKFLOW_TASK_TYPE_NORMAL, } m.UpdateWorkflowTask(workflowTask) @@ -189,6 +192,7 @@ func (m *workflowTaskStateMachine) ReplicateWorkflowTaskStartedEvent( ScheduledTime: workflowTask.ScheduledTime, TaskQueue: workflowTask.TaskQueue, OriginalScheduledTime: workflowTask.OriginalScheduledTime, + Type: workflowTask.Type, } m.UpdateWorkflowTask(workflowTask) @@ -250,6 +254,7 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskScheduleToStartTimeoutEvent( func (m *workflowTaskStateMachine) AddWorkflowTaskScheduledEventAsHeartbeat( bypassTaskGeneration bool, originalScheduledTimestamp *time.Time, + workflowTaskType enumsspb.WorkflowTaskType, ) (*WorkflowTaskInfo, error) { opTag := tag.WorkflowActionWorkflowTaskScheduled if m.HasPendingWorkflowTask() { @@ -264,13 +269,14 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskScheduledEventAsHeartbeat( // - is not transient (is not continuously failing) // and // - is not speculative. - createWorkflowTaskScheduledEvent := !m.ms.IsTransientWorkflowTask() + createWorkflowTaskScheduledEvent := !m.ms.IsTransientWorkflowTask() && workflowTaskType != enumsspb.WORKFLOW_TASK_TYPE_SPECULATIVE // If while scheduling a workflow task and new events has come, then this workflow task cannot be a transient/speculative. // Flush any buffered events before creating the workflow task, otherwise it will result in invalid IDs for // transient/speculative workflow task and will cause in timeout processing to not work for transient workflow tasks. if m.ms.HasBufferedEvents() { m.ms.executionInfo.WorkflowTaskAttempt = 1 + workflowTaskType = enumsspb.WORKFLOW_TASK_TYPE_NORMAL createWorkflowTaskScheduledEvent = true m.ms.updatePendingEventIDs(m.ms.hBuilder.FlushBufferToCurrentBatch()) } @@ -284,6 +290,7 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskScheduledEventAsHeartbeat( // then reset the attempt to 1, and not use transient workflow task. if m.ms.GetCurrentVersion() != lastWriteVersion { m.ms.executionInfo.WorkflowTaskAttempt = 1 + workflowTaskType = enumsspb.WORKFLOW_TASK_TYPE_NORMAL createWorkflowTaskScheduledEvent = true } } @@ -319,6 +326,7 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskScheduledEventAsHeartbeat( attempt, &scheduleTime, originalScheduledTimestamp, + workflowTaskType, ) if err != nil { return nil, err @@ -338,8 +346,9 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskScheduledEventAsHeartbeat( func (m *workflowTaskStateMachine) AddWorkflowTaskScheduledEvent( bypassTaskGeneration bool, + workflowTaskType enumsspb.WorkflowTaskType, ) (*WorkflowTaskInfo, error) { - return m.AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration, timestamp.TimePtr(m.ms.timeSource.Now())) + return m.AddWorkflowTaskScheduledEventAsHeartbeat(bypassTaskGeneration, timestamp.TimePtr(m.ms.timeSource.Now()), workflowTaskType) } func (m *workflowTaskStateMachine) AddFirstWorkflowTaskScheduled( @@ -371,6 +380,7 @@ func (m *workflowTaskStateMachine) AddFirstWorkflowTaskScheduled( } else { if _, err = m.AddWorkflowTaskScheduledEvent( false, + enumsspb.WORKFLOW_TASK_TYPE_NORMAL, ); err != nil { return err } @@ -398,7 +408,7 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskStartedEvent( scheduledEventID = workflowTask.ScheduledEventID startedEventID := scheduledEventID + 1 startTime := m.ms.timeSource.Now() - workflowTaskScheduledEventCreated := !m.ms.IsTransientWorkflowTask() + workflowTaskScheduledEventCreated := !m.ms.IsTransientWorkflowTask() && workflowTask.Type != enumsspb.WORKFLOW_TASK_TYPE_SPECULATIVE // If new events came since transient/speculative workflow task was scheduled // or failover happened during lifetime of transient workflow task, @@ -408,6 +418,7 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskStartedEvent( (workflowTask.ScheduledEventID != m.ms.GetNextEventID() || workflowTask.Version != m.ms.GetCurrentVersion()) { workflowTask.Attempt = 1 + workflowTask.Type = enumsspb.WORKFLOW_TASK_TYPE_NORMAL workflowTaskScheduledEventCreated = true scheduledEvent := m.ms.hBuilder.AddWorkflowTaskScheduledEvent( taskQueue, @@ -453,6 +464,7 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskCompletedEvent( ) (*historypb.HistoryEvent, error) { opTag := tag.WorkflowActionWorkflowTaskCompleted workflowTask, ok := m.GetWorkflowTaskInfo(scheduledEventID) + m.setSpeculativeWorkflowTaskStartedEventID(workflowTask, startedEventID) if !ok || workflowTask.StartedEventID != startedEventID { m.ms.logger.Warn(mutableStateInvalidHistoryActionMsg, opTag, tag.WorkflowEventID(m.ms.GetNextEventID()), @@ -465,7 +477,7 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskCompletedEvent( // Capture if WorkflowTaskScheduled and WorkflowTaskStarted events were created // before calling m.beforeAddWorkflowTaskCompletedEvent() because it will delete workflow task info from mutable state. - workflowTaskScheduledStartedEventsCreated := !m.ms.IsTransientWorkflowTask() + workflowTaskScheduledStartedEventsCreated := !m.ms.IsTransientWorkflowTask() && workflowTask.Type != enumsspb.WORKFLOW_TASK_TYPE_SPECULATIVE m.beforeAddWorkflowTaskCompletedEvent() if !workflowTaskScheduledStartedEventsCreated { @@ -525,6 +537,7 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskFailedEvent( } workflowTask, ok := m.GetWorkflowTaskInfo(scheduledEventID) + m.setSpeculativeWorkflowTaskStartedEventID(workflowTask, startedEventID) if !ok || workflowTask.StartedEventID != startedEventID { m.ms.logger.Warn(mutableStateInvalidHistoryActionMsg, opTag, tag.WorkflowEventID(m.ms.GetNextEventID()), @@ -568,6 +581,7 @@ func (m *workflowTaskStateMachine) AddWorkflowTaskTimedOutEvent( ) (*historypb.HistoryEvent, error) { opTag := tag.WorkflowActionWorkflowTaskTimedOut workflowTask, ok := m.GetWorkflowTaskInfo(scheduledEventID) + m.setSpeculativeWorkflowTaskStartedEventID(workflowTask, startedEventID) if !ok || workflowTask.StartedEventID != startedEventID { m.ms.logger.Warn(mutableStateInvalidHistoryActionMsg, opTag, tag.WorkflowEventID(m.ms.GetNextEventID()), @@ -611,6 +625,7 @@ func (m *workflowTaskStateMachine) FailWorkflowTask( TaskQueue: nil, OriginalScheduledTime: timestamp.UnixOrZeroTimePtr(0), Attempt: 1, + Type: enumsspb.WORKFLOW_TASK_TYPE_UNSPECIFIED, } if incrementAttempt { failWorkflowTaskInfo.Attempt = m.ms.executionInfo.WorkflowTaskAttempt + 1 @@ -634,6 +649,7 @@ func (m *workflowTaskStateMachine) DeleteWorkflowTask() { TaskQueue: nil, // Keep the last original scheduled Timestamp, so that AddWorkflowTaskScheduledEventAsHeartbeat can continue with it. OriginalScheduledTime: m.getWorkflowTaskInfo().OriginalScheduledTime, + Type: enumsspb.WORKFLOW_TASK_TYPE_UNSPECIFIED, } m.UpdateWorkflowTask(resetWorkflowTaskInfo) } @@ -651,8 +667,9 @@ func (m *workflowTaskStateMachine) UpdateWorkflowTask( m.ms.executionInfo.WorkflowTaskStartedTime = workflowTask.StartedTime m.ms.executionInfo.WorkflowTaskScheduledTime = workflowTask.ScheduledTime m.ms.executionInfo.WorkflowTaskOriginalScheduledTime = workflowTask.OriginalScheduledTime + m.ms.executionInfo.WorkflowTaskType = workflowTask.Type - // NOTE: do not update taskqueue in execution info + // NOTE: do not update task queue in execution info m.ms.logger.Debug("Workflow task updated", tag.WorkflowScheduledEventID(workflowTask.ScheduledEventID), @@ -660,7 +677,8 @@ func (m *workflowTaskStateMachine) UpdateWorkflowTask( tag.WorkflowTaskRequestId(workflowTask.RequestID), tag.WorkflowTaskTimeout(workflowTask.WorkflowTaskTimeout), tag.Attempt(workflowTask.Attempt), - tag.WorkflowStartedTimestamp(workflowTask.StartedTime)) + tag.WorkflowStartedTimestamp(workflowTask.StartedTime), + tag.WorkflowTaskType(workflowTask.Type.String())) } func (m *workflowTaskStateMachine) HasPendingWorkflowTask() bool { @@ -702,9 +720,59 @@ func (m *workflowTaskStateMachine) GetWorkflowTaskInfo( if scheduledEventID == workflowTask.ScheduledEventID { return workflowTask, true } + + workflowTask = m.tryRestoreSpeculativeWorkflowTask(scheduledEventID) + if workflowTask != nil { + return workflowTask, true + } + return nil, false } +func (m *workflowTaskStateMachine) tryRestoreSpeculativeWorkflowTask( + scheduledEventID int64, +) *WorkflowTaskInfo { + // TODO (alex): Uncomment this code to support speculative workflow task restoration. + /* + // ScheduledEventID might be lost (cleared) for speculative workflow task due to shard reload or history service restart. + // It is still considered to be valid speculative workflow task if ScheduledEventID from token is equal to the next event ID. + if m.ms.executionInfo.WorkflowTaskScheduledEventId == common.EmptyEventID && m.ms.GetNextEventID() == scheduledEventID { + workflowTask := &WorkflowTaskInfo{ + Version: m.ms.GetCurrentVersion(), // For version check to pass, speculative workflow tasks are not replicated. + ScheduledEventID: scheduledEventID, + ScheduledTime: timestamp.TimePtr(m.ms.timeSource.Now().UTC()), + Type: enumsspb.WORKFLOW_TASK_TYPE_SPECULATIVE, + + StartedEventID: common.EmptyEventID, + RequestID: emptyUUID, + WorkflowTaskTimeout: timestamp.DurationFromSeconds(0), + StartedTime: timestamp.UnixOrZeroTimePtr(0), + TaskQueue: nil, + OriginalScheduledTime: timestamp.UnixOrZeroTimePtr(0), + Attempt: 1, + } + m.UpdateWorkflowTask(workflowTask) + return workflowTask + } + */ + return nil +} + +func (m *workflowTaskStateMachine) setSpeculativeWorkflowTaskStartedEventID( + workflowTask *WorkflowTaskInfo, + startedEventID int64, +) { + // TODO (alex): Uncomment this code to support speculative workflow task restoration. + + /* + // StartedEventID might be lost (cleared) for speculative workflow task due to shard reload or history service restart. + if workflowTask != nil && workflowTask.Type == enumsspb.WORKFLOW_TASK_TYPE_SPECULATIVE && workflowTask.StartedEventID == common.EmptyEventID { + workflowTask.StartedEventID = startedEventID + m.UpdateWorkflowTask(workflowTask) + } + */ +} + func (m *workflowTaskStateMachine) GetTransientWorkflowTaskInfo( workflowTask *WorkflowTaskInfo, identity string, @@ -756,6 +824,7 @@ func (m *workflowTaskStateMachine) getWorkflowTaskInfo() *WorkflowTaskInfo { ScheduledTime: m.ms.executionInfo.WorkflowTaskScheduledTime, TaskQueue: m.ms.TaskQueue(), OriginalScheduledTime: m.ms.executionInfo.WorkflowTaskOriginalScheduledTime, + Type: m.ms.executionInfo.WorkflowTaskType, } } diff --git a/service/history/workflowTaskHandlerCallbacks.go b/service/history/workflowTaskHandlerCallbacks.go index 37859fa8e1b..2df2257db74 100644 --- a/service/history/workflowTaskHandlerCallbacks.go +++ b/service/history/workflowTaskHandlerCallbacks.go @@ -546,9 +546,10 @@ func (handler *workflowTaskHandlerCallbacksImpl) handleWorkflowTaskCompleted( newWorkflowTask, err = ms.AddWorkflowTaskScheduledEventAsHeartbeat( bypassTaskGeneration, currentWorkflowTask.OriginalScheduledTime, + enumsspb.WORKFLOW_TASK_TYPE_NORMAL, ) } else { - newWorkflowTask, err = ms.AddWorkflowTaskScheduledEvent(bypassTaskGeneration) + newWorkflowTask, err = ms.AddWorkflowTaskScheduledEvent(bypassTaskGeneration, enumsspb.WORKFLOW_TASK_TYPE_NORMAL) } if err != nil { return nil, err