From 66352edefbe1ad8efeaef7d3e1ef380fa1eed7f0 Mon Sep 17 00:00:00 2001 From: Yichao Yang Date: Wed, 22 Mar 2023 11:45:19 -0700 Subject: [PATCH 1/7] Track and emit metrics for entities in a single workflow (#4065) --- api/checksum/v1/message.pb.go | 311 ++++++-- api/persistence/v1/executions.pb.go | 663 ++++++++++++------ common/metrics/metric_defs.go | 8 + common/persistence/dataInterfaces.go | 8 + common/persistence/execution_manager.go | 2 +- common/persistence/size.go | 138 ++-- .../server/api/checksum/v1/message.proto | 7 + .../api/persistence/v1/executions.proto | 5 + service/history/workflow/checksum.go | 5 + service/history/workflow/metrics.go | 8 + .../history/workflow/mutable_state_impl.go | 5 + .../workflow/mutable_state_impl_test.go | 78 +++ 12 files changed, 916 insertions(+), 322 deletions(-) diff --git a/api/checksum/v1/message.pb.go b/api/checksum/v1/message.pb.go index 62210d7efee..e2cc15d52c1 100644 --- a/api/checksum/v1/message.pb.go +++ b/api/checksum/v1/message.pb.go @@ -62,6 +62,11 @@ type MutableStateChecksumPayload struct { NextEventId int64 `protobuf:"varint,7,opt,name=next_event_id,json=nextEventId,proto3" json:"next_event_id,omitempty"` LastProcessedEventId int64 `protobuf:"varint,8,opt,name=last_processed_event_id,json=lastProcessedEventId,proto3" json:"last_processed_event_id,omitempty"` SignalCount int64 `protobuf:"varint,9,opt,name=signal_count,json=signalCount,proto3" json:"signal_count,omitempty"` + ActivityCount int64 `protobuf:"varint,21,opt,name=activity_count,json=activityCount,proto3" json:"activity_count,omitempty"` + ChildExecutionCount int64 `protobuf:"varint,22,opt,name=child_execution_count,json=childExecutionCount,proto3" json:"child_execution_count,omitempty"` + UserTimerCount int64 `protobuf:"varint,23,opt,name=user_timer_count,json=userTimerCount,proto3" json:"user_timer_count,omitempty"` + RequestCancelExternalCount int64 `protobuf:"varint,24,opt,name=request_cancel_external_count,json=requestCancelExternalCount,proto3" json:"request_cancel_external_count,omitempty"` + SignalExternalCount int64 `protobuf:"varint,25,opt,name=signal_external_count,json=signalExternalCount,proto3" json:"signal_external_count,omitempty"` WorkflowTaskAttempt int32 `protobuf:"varint,10,opt,name=workflow_task_attempt,json=workflowTaskAttempt,proto3" json:"workflow_task_attempt,omitempty"` WorkflowTaskVersion int64 `protobuf:"varint,11,opt,name=workflow_task_version,json=workflowTaskVersion,proto3" json:"workflow_task_version,omitempty"` WorkflowTaskScheduledEventId int64 `protobuf:"varint,12,opt,name=workflow_task_scheduled_event_id,json=workflowTaskScheduledEventId,proto3" json:"workflow_task_scheduled_event_id,omitempty"` @@ -170,6 +175,41 @@ func (m *MutableStateChecksumPayload) GetSignalCount() int64 { return 0 } +func (m *MutableStateChecksumPayload) GetActivityCount() int64 { + if m != nil { + return m.ActivityCount + } + return 0 +} + +func (m *MutableStateChecksumPayload) GetChildExecutionCount() int64 { + if m != nil { + return m.ChildExecutionCount + } + return 0 +} + +func (m *MutableStateChecksumPayload) GetUserTimerCount() int64 { + if m != nil { + return m.UserTimerCount + } + return 0 +} + +func (m *MutableStateChecksumPayload) GetRequestCancelExternalCount() int64 { + if m != nil { + return m.RequestCancelExternalCount + } + return 0 +} + +func (m *MutableStateChecksumPayload) GetSignalExternalCount() int64 { + if m != nil { + return m.SignalExternalCount + } + return 0 +} + func (m *MutableStateChecksumPayload) GetWorkflowTaskAttempt() int32 { if m != nil { return m.WorkflowTaskAttempt @@ -256,53 +296,58 @@ func init() { } var fileDescriptor_c8c4c1fd39c4866b = []byte{ - // 729 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0x4d, 0x4f, 0xdb, 0x48, - 0x18, 0xc7, 0xe3, 0xcd, 0xc2, 0xc2, 0xf0, 0x16, 0x1c, 0x76, 0xd7, 0x0a, 0xbb, 0x83, 0x41, 0x68, - 0x95, 0xd5, 0x82, 0xb3, 0xc0, 0xee, 0xa9, 0x27, 0x48, 0x41, 0x80, 0x54, 0x04, 0x06, 0x15, 0xa9, - 0x52, 0x65, 0x0d, 0xf6, 0x43, 0x32, 0x8a, 0x63, 0x27, 0x9e, 0xb1, 0x21, 0xb7, 0x7e, 0x84, 0x7e, - 0x8c, 0x7e, 0x94, 0x1e, 0x39, 0x72, 0x2c, 0xe1, 0xd2, 0x4b, 0x25, 0x3e, 0x42, 0x35, 0x63, 0x0f, - 0x79, 0x45, 0xbd, 0x45, 0xcf, 0xff, 0xf7, 0xfc, 0xe6, 0xcd, 0x79, 0xd0, 0x26, 0x87, 0x66, 0x2b, - 0x8c, 0x88, 0x5f, 0x61, 0x10, 0x25, 0x10, 0x55, 0x48, 0x8b, 0x56, 0xdc, 0x3a, 0xb8, 0x0d, 0x16, - 0x37, 0x2b, 0xc9, 0x56, 0xa5, 0x09, 0x8c, 0x91, 0x1a, 0x58, 0xad, 0x28, 0xe4, 0xa1, 0xbe, 0xa2, - 0x70, 0x2b, 0xc5, 0x2d, 0xd2, 0xa2, 0x96, 0xc2, 0xad, 0x64, 0xab, 0xb4, 0xfe, 0xec, 0x13, 0x22, - 0x08, 0xe2, 0x26, 0x13, 0x96, 0x9b, 0x30, 0x6a, 0x5c, 0xfb, 0xe1, 0x4d, 0xaa, 0x29, 0x6d, 0x8c, - 0x5b, 0xb5, 0x4e, 0x19, 0x0f, 0xa3, 0xce, 0xc8, 0xa2, 0xa5, 0x7f, 0xc6, 0xd1, 0x2f, 0xa8, 0xd7, - 0xbe, 0x4d, 0xa3, 0xe5, 0x37, 0x31, 0x27, 0x57, 0x3e, 0x9c, 0x73, 0xc2, 0xa1, 0x9a, 0x6d, 0xee, - 0x94, 0x74, 0xfc, 0x90, 0x78, 0xfa, 0xdf, 0xa8, 0xe0, 0x92, 0xc0, 0x05, 0xdf, 0x89, 0xa0, 0x1d, - 0x03, 0xe3, 0xe0, 0x19, 0x9a, 0xa9, 0x95, 0xa7, 0xec, 0x85, 0xb4, 0x6e, 0xab, 0xb2, 0x7e, 0x8c, - 0x26, 0x98, 0x50, 0x18, 0x3f, 0x99, 0x5a, 0x79, 0x7e, 0xfb, 0x3f, 0x6b, 0xdc, 0xe1, 0xe5, 0x3e, - 0xac, 0x64, 0xcb, 0xba, 0xcc, 0xf6, 0xb1, 0x7f, 0x0b, 0x6e, 0xcc, 0x69, 0x18, 0xc8, 0xe5, 0xed, - 0x54, 0xa1, 0x1f, 0xa0, 0x49, 0xf1, 0x23, 0x66, 0x46, 0x5e, 0xca, 0xac, 0x9e, 0xec, 0xc7, 0x96, - 0x98, 0xd9, 0x59, 0xb7, 0xbe, 0x81, 0x74, 0x9f, 0x30, 0xee, 0xdc, 0x44, 0x94, 0x83, 0x93, 0x40, - 0xc4, 0x68, 0x18, 0x18, 0x3f, 0x9b, 0x5a, 0x39, 0x6f, 0x17, 0x44, 0x72, 0x29, 0x82, 0xb7, 0x69, - 0x5d, 0xdf, 0x44, 0xc5, 0x3e, 0x1a, 0x12, 0x08, 0xb8, 0x43, 0x3d, 0x63, 0x62, 0x08, 0xdf, 0x17, - 0xc1, 0x91, 0xf7, 0x8c, 0x5f, 0xd3, 0x88, 0xf1, 0x1e, 0x3e, 0xd9, 0xc3, 0x0f, 0x44, 0xa2, 0xf0, - 0x35, 0x34, 0x17, 0xc0, 0x6d, 0x1f, 0xf8, 0x8b, 0x04, 0x67, 0x44, 0x51, 0x31, 0xff, 0xa3, 0xdf, - 0xa5, 0xb2, 0x15, 0x85, 0x2e, 0x30, 0x06, 0x5e, 0x8f, 0x9e, 0x92, 0xf4, 0x92, 0x88, 0x4f, 0x55, - 0xaa, 0xda, 0x56, 0xd1, 0x2c, 0xa3, 0xb5, 0x80, 0xf8, 0x8e, 0x1b, 0xc6, 0x01, 0x37, 0xa6, 0x53, - 0x73, 0x5a, 0xab, 0x8a, 0x92, 0xbe, 0x8d, 0x7e, 0x55, 0x4f, 0xef, 0x70, 0xc2, 0x1a, 0x0e, 0xe1, - 0xe2, 0x4a, 0xb9, 0x81, 0x4c, 0xad, 0x3c, 0x61, 0x17, 0x55, 0x78, 0x41, 0x58, 0x63, 0x37, 0x8d, - 0x46, 0x7b, 0xd4, 0x05, 0xce, 0x48, 0xff, 0x40, 0x8f, 0xba, 0xc3, 0x03, 0x64, 0x0e, 0xf6, 0x30, - 0xb7, 0x0e, 0x5e, 0xec, 0xf7, 0x1f, 0x65, 0x56, 0xb6, 0xff, 0xd1, 0xdf, 0x7e, 0xae, 0x28, 0x75, - 0xa4, 0x3d, 0x84, 0x87, 0x3c, 0x9c, 0x44, 0xbc, 0xdf, 0x32, 0x27, 0x2d, 0xa5, 0x01, 0x4b, 0xca, - 0x28, 0xc7, 0x6b, 0xb4, 0xd2, 0x82, 0xc0, 0xa3, 0x41, 0xcd, 0xe1, 0xb4, 0x09, 0xd1, 0x88, 0x83, - 0x19, 0xf3, 0x66, 0xbe, 0x9c, 0xb7, 0x97, 0x33, 0xec, 0x42, 0x50, 0x83, 0x12, 0xa6, 0x9f, 0xa0, - 0x75, 0x65, 0x21, 0x2e, 0xa7, 0x09, 0xe5, 0x9d, 0x31, 0x87, 0x62, 0xc6, 0x82, 0x54, 0x99, 0x19, - 0xbb, 0x9b, 0xa1, 0xc3, 0x07, 0x63, 0xfa, 0x31, 0x5a, 0x53, 0xbe, 0xec, 0xd1, 0x68, 0x40, 0x39, - 0x25, 0x83, 0x1b, 0x2b, 0x48, 0x1b, 0xce, 0xc8, 0x73, 0x09, 0x1e, 0x29, 0xee, 0xd9, 0x75, 0x86, - 0xfe, 0x52, 0xae, 0x08, 0xda, 0x4e, 0xf6, 0x57, 0x1d, 0xe7, 0x5b, 0x94, 0xbe, 0xd5, 0x8c, 0xb6, - 0xa1, 0x5d, 0x95, 0xec, 0xa8, 0xf2, 0x10, 0x29, 0xc8, 0x71, 0xeb, 0xd4, 0xf7, 0xc6, 0xda, 0x74, - 0x69, 0xfb, 0x33, 0x03, 0xab, 0x82, 0x1b, 0x35, 0xed, 0xa0, 0xdf, 0x18, 0xa7, 0x6e, 0xa3, 0x93, - 0x3e, 0x60, 0x3b, 0x86, 0x18, 0x9c, 0x80, 0x34, 0xc1, 0x28, 0x9a, 0x5a, 0x79, 0xda, 0x2e, 0xa6, - 0xa9, 0x78, 0xb8, 0x33, 0x91, 0x9d, 0x90, 0x26, 0xe8, 0xef, 0xd1, 0x62, 0xf6, 0x95, 0x39, 0xe9, - 0x84, 0xa3, 0xc0, 0x8c, 0x25, 0x53, 0x2b, 0xcf, 0x6c, 0xff, 0x3b, 0x76, 0xa2, 0x64, 0x73, 0x50, - 0x4c, 0x83, 0xec, 0x1b, 0x3c, 0x54, 0x7d, 0x76, 0x21, 0x19, 0xaa, 0xec, 0x79, 0x77, 0x0f, 0x38, - 0x77, 0xff, 0x80, 0x73, 0x4f, 0x0f, 0x58, 0xfb, 0xd0, 0xc5, 0xda, 0xa7, 0x2e, 0xd6, 0x3e, 0x77, - 0xb1, 0x76, 0xd7, 0xc5, 0xda, 0x97, 0x2e, 0xd6, 0xbe, 0x76, 0x71, 0xee, 0xa9, 0x8b, 0xb5, 0x8f, - 0x8f, 0x38, 0x77, 0xf7, 0x88, 0x73, 0xf7, 0x8f, 0x38, 0xf7, 0xce, 0xaa, 0x85, 0xbd, 0xb5, 0x69, - 0xf8, 0xc2, 0xf0, 0x7f, 0xa5, 0x7e, 0x5f, 0x4d, 0xca, 0xe1, 0xba, 0xf3, 0x3d, 0x00, 0x00, 0xff, - 0xff, 0xe2, 0xf9, 0x6f, 0xc9, 0x2f, 0x06, 0x00, 0x00, + // 813 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x95, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x80, 0xc5, 0xaa, 0x76, 0x93, 0x55, 0xac, 0x28, 0x54, 0x7e, 0x58, 0xa5, 0x61, 0x18, 0x23, + 0x2d, 0x58, 0x34, 0xa1, 0x6a, 0xa7, 0x3d, 0xf5, 0xe4, 0xa8, 0x36, 0x92, 0x00, 0x0d, 0x12, 0x3a, + 0x68, 0x80, 0x02, 0x05, 0xb1, 0x26, 0xc7, 0xd2, 0x42, 0x14, 0x29, 0xed, 0x2e, 0x69, 0xeb, 0xd6, + 0x47, 0xe8, 0x63, 0xf4, 0x51, 0x7a, 0xf4, 0xd1, 0xc7, 0x5a, 0xbe, 0xb4, 0x37, 0x3f, 0x42, 0xb1, + 0x7f, 0xfa, 0x37, 0x72, 0x13, 0x66, 0xbe, 0xf9, 0x76, 0x96, 0x33, 0x22, 0xd1, 0x73, 0x0e, 0x83, + 0x61, 0x4e, 0x71, 0xda, 0x66, 0x40, 0x4b, 0xa0, 0x6d, 0x3c, 0x24, 0xed, 0xb8, 0x07, 0x71, 0x9f, + 0x15, 0x83, 0x76, 0xb9, 0xd3, 0x1e, 0x00, 0x63, 0xb8, 0x0b, 0xc1, 0x90, 0xe6, 0x3c, 0xb7, 0x1f, + 0x1b, 0x3c, 0x50, 0x78, 0x80, 0x87, 0x24, 0x30, 0x78, 0x50, 0xee, 0xb4, 0x9e, 0x4e, 0x7d, 0x42, + 0x04, 0x59, 0x31, 0x60, 0xc2, 0x72, 0x92, 0xd3, 0xfe, 0x71, 0x9a, 0x9f, 0x28, 0x4d, 0xeb, 0xd9, + 0xba, 0x53, 0x7b, 0x84, 0xf1, 0x9c, 0x8e, 0x57, 0x0e, 0x6d, 0x7d, 0xb7, 0x8e, 0xbe, 0x46, 0xbd, + 0xfd, 0x5f, 0x0d, 0x3d, 0xfc, 0xa5, 0xe0, 0xf8, 0x28, 0x85, 0x43, 0x8e, 0x39, 0x74, 0x74, 0x73, + 0xef, 0xf0, 0x38, 0xcd, 0x71, 0x62, 0x7f, 0x8b, 0x1a, 0x31, 0xce, 0x62, 0x48, 0x23, 0x0a, 0xa3, + 0x02, 0x18, 0x87, 0xc4, 0xb1, 0x3c, 0xcb, 0xbf, 0x11, 0xde, 0x56, 0xf1, 0xd0, 0x84, 0xed, 0x37, + 0x68, 0x83, 0x09, 0x85, 0xf3, 0x99, 0x67, 0xf9, 0xf5, 0xdd, 0x1f, 0x82, 0x75, 0x97, 0x97, 0x7d, + 0x04, 0xe5, 0x4e, 0xf0, 0x51, 0xf7, 0xb1, 0x7f, 0x0a, 0x71, 0xc1, 0x49, 0x9e, 0xc9, 0xe3, 0x43, + 0xa5, 0xb0, 0x0f, 0xd0, 0xa6, 0xf8, 0x51, 0x30, 0xa7, 0x2a, 0x65, 0xc1, 0x4c, 0xf6, 0x69, 0x4b, + 0xc1, 0x42, 0x5d, 0x6d, 0x3f, 0x43, 0x76, 0x8a, 0x19, 0x8f, 0x4e, 0x28, 0xe1, 0x10, 0x95, 0x40, + 0x19, 0xc9, 0x33, 0xe7, 0x73, 0xcf, 0xf2, 0xab, 0x61, 0x43, 0x64, 0x3e, 0x8a, 0xc4, 0xaf, 0x2a, + 0x6e, 0x3f, 0x47, 0xcd, 0x39, 0x1a, 0x4a, 0xc8, 0x78, 0x44, 0x12, 0x67, 0x63, 0x09, 0xdf, 0x17, + 0x89, 0xd7, 0xc9, 0x14, 0x3f, 0x26, 0x94, 0xf1, 0x19, 0xbe, 0x39, 0xc3, 0x0f, 0x44, 0xc6, 0xe0, + 0xdb, 0x68, 0x2b, 0x83, 0xd3, 0x39, 0xf0, 0x0b, 0x09, 0xd6, 0x44, 0xd0, 0x30, 0x3f, 0xa2, 0x07, + 0x52, 0x39, 0xa4, 0x79, 0x0c, 0x8c, 0x41, 0x32, 0xa3, 0x6f, 0x48, 0xfa, 0xae, 0x48, 0xbf, 0x33, + 0x59, 0x53, 0xf6, 0x04, 0xdd, 0x62, 0xa4, 0x9b, 0xe1, 0x34, 0x8a, 0xf3, 0x22, 0xe3, 0xce, 0x4d, + 0x65, 0x56, 0xb1, 0x8e, 0x08, 0xd9, 0x5f, 0xa3, 0x3a, 0x8e, 0x39, 0x29, 0x09, 0x1f, 0x6b, 0xe8, + 0x9e, 0x84, 0xb6, 0x4c, 0x54, 0x61, 0xbb, 0xe8, 0x5e, 0xdc, 0x23, 0x69, 0x12, 0x81, 0x79, 0xa2, + 0x9a, 0xbe, 0x2f, 0xe9, 0xa6, 0x4c, 0x4e, 0x9f, 0xb6, 0xaa, 0xf1, 0x51, 0xa3, 0x60, 0x40, 0x23, + 0x4e, 0x06, 0x40, 0x35, 0xfe, 0x40, 0xe2, 0x75, 0x11, 0xff, 0x20, 0xc2, 0x8a, 0xdc, 0x43, 0x8f, + 0xf4, 0x1a, 0x45, 0x7a, 0xab, 0xe0, 0x94, 0x03, 0x9d, 0x35, 0xee, 0xc8, 0xb2, 0x96, 0x86, 0x3a, + 0x92, 0xd9, 0xd7, 0xc8, 0xb4, 0x41, 0x7d, 0xd5, 0xa5, 0xd2, 0x2f, 0x55, 0x83, 0x2a, 0xb9, 0x52, + 0x63, 0xd6, 0x3e, 0xe2, 0x98, 0xf5, 0x23, 0xcc, 0xc5, 0x3a, 0x71, 0x07, 0x79, 0x96, 0xbf, 0x11, + 0x36, 0x4d, 0xf2, 0x03, 0x66, 0xfd, 0x3d, 0x95, 0x5a, 0xad, 0x31, 0xcb, 0x53, 0x53, 0xe7, 0xcc, + 0xd7, 0x98, 0xfd, 0x39, 0x40, 0xde, 0x62, 0x0d, 0x8b, 0x7b, 0x90, 0x14, 0xe9, 0xfc, 0x18, 0x6f, + 0xc9, 0xf2, 0xaf, 0xe6, 0xcb, 0x0f, 0x0d, 0x65, 0xc6, 0xf9, 0x12, 0xb9, 0x4b, 0x1e, 0x8e, 0x29, + 0x9f, 0xb7, 0x6c, 0xa9, 0xe7, 0xb4, 0x60, 0x51, 0x8c, 0x71, 0xfc, 0x8c, 0x1e, 0x0f, 0x21, 0x4b, + 0x48, 0xd6, 0xd5, 0x73, 0x59, 0x76, 0x30, 0xa7, 0xee, 0x55, 0xfd, 0x6a, 0xf8, 0x50, 0x63, 0x72, + 0x4c, 0x8b, 0x12, 0x66, 0xbf, 0x45, 0x4f, 0x8d, 0x65, 0xba, 0x3d, 0xab, 0x97, 0x62, 0xce, 0x6d, + 0xa9, 0xf2, 0x34, 0xbb, 0xa7, 0xd1, 0xe5, 0x8b, 0x31, 0xfb, 0x0d, 0xda, 0x36, 0x3e, 0x3d, 0x45, + 0x92, 0x11, 0x4e, 0xf0, 0x62, 0x63, 0x0d, 0x69, 0x73, 0x35, 0x79, 0x28, 0xc1, 0xd7, 0x86, 0x9b, + 0xba, 0xde, 0xa3, 0x6f, 0x8c, 0x8b, 0xc2, 0xc8, 0x2c, 0xd4, 0x3a, 0xdf, 0x1d, 0xe9, 0x7b, 0xa2, + 0xe9, 0x10, 0x46, 0x6a, 0xb1, 0x56, 0x95, 0xaf, 0x90, 0x81, 0x22, 0xf5, 0x2f, 0x58, 0x67, 0xb3, + 0xa5, 0xed, 0x91, 0x06, 0x3b, 0x82, 0x5b, 0x35, 0xbd, 0x40, 0xf7, 0x19, 0x27, 0x71, 0x7f, 0xac, + 0x06, 0x38, 0x2a, 0xa0, 0x80, 0x28, 0xc3, 0x03, 0x70, 0x9a, 0x9e, 0xe5, 0xdf, 0x0c, 0x9b, 0x2a, + 0x2b, 0x06, 0xf7, 0x5e, 0xe4, 0xde, 0xe2, 0x01, 0xd8, 0xbf, 0xa3, 0x3b, 0x7a, 0xcb, 0x22, 0xf5, + 0x76, 0x27, 0xc0, 0x9c, 0xbb, 0x9e, 0xe5, 0xd7, 0x76, 0xbf, 0x5f, 0xfb, 0x36, 0xd5, 0xdf, 0x00, + 0xf1, 0x26, 0xd4, 0x3b, 0xf8, 0xca, 0xd4, 0x85, 0x8d, 0x72, 0x29, 0xf2, 0x32, 0x39, 0xbb, 0x70, + 0x2b, 0xe7, 0x17, 0x6e, 0xe5, 0xea, 0xc2, 0xb5, 0xfe, 0x98, 0xb8, 0xd6, 0x5f, 0x13, 0xd7, 0xfa, + 0x7b, 0xe2, 0x5a, 0x67, 0x13, 0xd7, 0xfa, 0x67, 0xe2, 0x5a, 0xff, 0x4e, 0xdc, 0xca, 0xd5, 0xc4, + 0xb5, 0xfe, 0xbc, 0x74, 0x2b, 0x67, 0x97, 0x6e, 0xe5, 0xfc, 0xd2, 0xad, 0xfc, 0x16, 0x74, 0xf3, + 0xd9, 0xd9, 0x24, 0xbf, 0xe6, 0xc3, 0xf7, 0x93, 0xf9, 0x7d, 0xb4, 0x29, 0x3f, 0x2c, 0x2f, 0xfe, + 0x0f, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x29, 0xa1, 0x38, 0x2b, 0x07, 0x00, 0x00, } func (this *MutableStateChecksumPayload) Equal(that interface{}) bool { @@ -351,6 +396,21 @@ func (this *MutableStateChecksumPayload) Equal(that interface{}) bool { if this.SignalCount != that1.SignalCount { return false } + if this.ActivityCount != that1.ActivityCount { + return false + } + if this.ChildExecutionCount != that1.ChildExecutionCount { + return false + } + if this.UserTimerCount != that1.UserTimerCount { + return false + } + if this.RequestCancelExternalCount != that1.RequestCancelExternalCount { + return false + } + if this.SignalExternalCount != that1.SignalExternalCount { + return false + } if this.WorkflowTaskAttempt != that1.WorkflowTaskAttempt { return false } @@ -415,7 +475,7 @@ func (this *MutableStateChecksumPayload) GoString() string { if this == nil { return "nil" } - s := make([]string, 0, 24) + s := make([]string, 0, 29) s = append(s, "&checksum.MutableStateChecksumPayload{") s = append(s, "CancelRequested: "+fmt.Sprintf("%#v", this.CancelRequested)+",\n") s = append(s, "State: "+fmt.Sprintf("%#v", this.State)+",\n") @@ -426,6 +486,11 @@ func (this *MutableStateChecksumPayload) GoString() string { s = append(s, "NextEventId: "+fmt.Sprintf("%#v", this.NextEventId)+",\n") s = append(s, "LastProcessedEventId: "+fmt.Sprintf("%#v", this.LastProcessedEventId)+",\n") s = append(s, "SignalCount: "+fmt.Sprintf("%#v", this.SignalCount)+",\n") + s = append(s, "ActivityCount: "+fmt.Sprintf("%#v", this.ActivityCount)+",\n") + s = append(s, "ChildExecutionCount: "+fmt.Sprintf("%#v", this.ChildExecutionCount)+",\n") + s = append(s, "UserTimerCount: "+fmt.Sprintf("%#v", this.UserTimerCount)+",\n") + s = append(s, "RequestCancelExternalCount: "+fmt.Sprintf("%#v", this.RequestCancelExternalCount)+",\n") + s = append(s, "SignalExternalCount: "+fmt.Sprintf("%#v", this.SignalExternalCount)+",\n") s = append(s, "WorkflowTaskAttempt: "+fmt.Sprintf("%#v", this.WorkflowTaskAttempt)+",\n") s = append(s, "WorkflowTaskVersion: "+fmt.Sprintf("%#v", this.WorkflowTaskVersion)+",\n") s = append(s, "WorkflowTaskScheduledEventId: "+fmt.Sprintf("%#v", this.WorkflowTaskScheduledEventId)+",\n") @@ -470,6 +535,41 @@ func (m *MutableStateChecksumPayload) MarshalToSizedBuffer(dAtA []byte) (int, er _ = i var l int _ = l + if m.SignalExternalCount != 0 { + i = encodeVarintMessage(dAtA, i, uint64(m.SignalExternalCount)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc8 + } + if m.RequestCancelExternalCount != 0 { + i = encodeVarintMessage(dAtA, i, uint64(m.RequestCancelExternalCount)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc0 + } + if m.UserTimerCount != 0 { + i = encodeVarintMessage(dAtA, i, uint64(m.UserTimerCount)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb8 + } + if m.ChildExecutionCount != 0 { + i = encodeVarintMessage(dAtA, i, uint64(m.ChildExecutionCount)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb0 + } + if m.ActivityCount != 0 { + i = encodeVarintMessage(dAtA, i, uint64(m.ActivityCount)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa8 + } if m.VersionHistories != nil { { size, err := m.VersionHistories.MarshalToSizedBuffer(dAtA[:i]) @@ -766,6 +866,21 @@ func (m *MutableStateChecksumPayload) Size() (n int) { l = m.VersionHistories.Size() n += 2 + l + sovMessage(uint64(l)) } + if m.ActivityCount != 0 { + n += 2 + sovMessage(uint64(m.ActivityCount)) + } + if m.ChildExecutionCount != 0 { + n += 2 + sovMessage(uint64(m.ChildExecutionCount)) + } + if m.UserTimerCount != 0 { + n += 2 + sovMessage(uint64(m.UserTimerCount)) + } + if m.RequestCancelExternalCount != 0 { + n += 2 + sovMessage(uint64(m.RequestCancelExternalCount)) + } + if m.SignalExternalCount != 0 { + n += 2 + sovMessage(uint64(m.SignalExternalCount)) + } return n } @@ -800,6 +915,11 @@ func (this *MutableStateChecksumPayload) String() string { `PendingChildInitiatedEventIds:` + fmt.Sprintf("%v", this.PendingChildInitiatedEventIds) + `,`, `StickyTaskQueueName:` + fmt.Sprintf("%v", this.StickyTaskQueueName) + `,`, `VersionHistories:` + strings.Replace(fmt.Sprintf("%v", this.VersionHistories), "VersionHistories", "v12.VersionHistories", 1) + `,`, + `ActivityCount:` + fmt.Sprintf("%v", this.ActivityCount) + `,`, + `ChildExecutionCount:` + fmt.Sprintf("%v", this.ChildExecutionCount) + `,`, + `UserTimerCount:` + fmt.Sprintf("%v", this.UserTimerCount) + `,`, + `RequestCancelExternalCount:` + fmt.Sprintf("%v", this.RequestCancelExternalCount) + `,`, + `SignalExternalCount:` + fmt.Sprintf("%v", this.SignalExternalCount) + `,`, `}`, }, "") return s @@ -1537,6 +1657,101 @@ func (m *MutableStateChecksumPayload) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 21: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActivityCount", wireType) + } + m.ActivityCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMessage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ActivityCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 22: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ChildExecutionCount", wireType) + } + m.ChildExecutionCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMessage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ChildExecutionCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 23: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UserTimerCount", wireType) + } + m.UserTimerCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMessage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UserTimerCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 24: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RequestCancelExternalCount", wireType) + } + m.RequestCancelExternalCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMessage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RequestCancelExternalCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 25: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SignalExternalCount", wireType) + } + m.SignalExternalCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMessage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.SignalExternalCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipMessage(dAtA[iNdEx:]) diff --git a/api/persistence/v1/executions.pb.go b/api/persistence/v1/executions.pb.go index fc11426e1c2..c570ca0a8e0 100644 --- a/api/persistence/v1/executions.pb.go +++ b/api/persistence/v1/executions.pb.go @@ -223,6 +223,11 @@ 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"` + ActivityCount int64 `protobuf:"varint,71,opt,name=activity_count,json=activityCount,proto3" json:"activity_count,omitempty"` + ChildExecutionCount int64 `protobuf:"varint,72,opt,name=child_execution_count,json=childExecutionCount,proto3" json:"child_execution_count,omitempty"` + UserTimerCount int64 `protobuf:"varint,73,opt,name=user_timer_count,json=userTimerCount,proto3" json:"user_timer_count,omitempty"` + RequestCancelExternalCount int64 `protobuf:"varint,74,opt,name=request_cancel_external_count,json=requestCancelExternalCount,proto3" json:"request_cancel_external_count,omitempty"` + SignalExternalCount int64 `protobuf:"varint,75,opt,name=signal_external_count,json=signalExternalCount,proto3" json:"signal_external_count,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"` @@ -580,6 +585,41 @@ func (m *WorkflowExecutionInfo) GetSignalCount() int64 { return 0 } +func (m *WorkflowExecutionInfo) GetActivityCount() int64 { + if m != nil { + return m.ActivityCount + } + return 0 +} + +func (m *WorkflowExecutionInfo) GetChildExecutionCount() int64 { + if m != nil { + return m.ChildExecutionCount + } + return 0 +} + +func (m *WorkflowExecutionInfo) GetUserTimerCount() int64 { + if m != nil { + return m.UserTimerCount + } + return 0 +} + +func (m *WorkflowExecutionInfo) GetRequestCancelExternalCount() int64 { + if m != nil { + return m.RequestCancelExternalCount + } + return 0 +} + +func (m *WorkflowExecutionInfo) GetSignalExternalCount() int64 { + if m != nil { + return m.SignalExternalCount + } + return 0 +} + func (m *WorkflowExecutionInfo) GetAutoResetPoints() *v11.ResetPoints { if m != nil { return m.AutoResetPoints @@ -2240,229 +2280,234 @@ func init() { } var fileDescriptor_67a714d0e7ba9f37 = []byte{ - // 3537 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0xcd, 0x73, 0xdb, 0xc6, - 0x77, 0xa6, 0x05, 0x89, 0xe0, 0x23, 0x45, 0x41, 0xd0, 0x17, 0xa4, 0xc8, 0x94, 0xcc, 0xd8, 0x89, - 0x9c, 0x38, 0x54, 0x24, 0x3b, 0x75, 0x3e, 0xda, 0xb8, 0x92, 0x2c, 0xc7, 0x64, 0x1d, 0xdb, 0x81, - 0x94, 0x38, 0x93, 0x26, 0xc3, 0x81, 0x80, 0x95, 0x84, 0x8a, 0x04, 0x68, 0x00, 0x94, 0xcc, 0x4c, - 0x0f, 0x39, 0x74, 0x7a, 0x4e, 0x6f, 0xfd, 0x13, 0x7a, 0xec, 0xa5, 0xa7, 0x5e, 0x7a, 0xe8, 0x74, - 0x7a, 0xea, 0xe4, 0xd6, 0xdc, 0xda, 0x38, 0x97, 0x5e, 0x3a, 0xc9, 0xfc, 0xfe, 0x82, 0xdf, 0xec, - 0xdb, 0x5d, 0x7c, 0x11, 0x92, 0x20, 0xff, 0xe2, 0x43, 0x6e, 0xc4, 0xbe, 0xcf, 0x7d, 0xfb, 0xf6, - 0x7d, 0x2d, 0xe1, 0x56, 0x40, 0xba, 0x3d, 0xd7, 0x33, 0x3a, 0xab, 0x3e, 0xf1, 0x8e, 0x89, 0xb7, - 0x6a, 0xf4, 0xec, 0xd5, 0x1e, 0xf1, 0x7c, 0xdb, 0x0f, 0x88, 0x63, 0x92, 0xd5, 0xe3, 0xb5, 0x55, - 0xf2, 0x9c, 0x98, 0xfd, 0xc0, 0x76, 0x1d, 0xbf, 0xd1, 0xf3, 0xdc, 0xc0, 0x55, 0xeb, 0x82, 0xa8, - 0xc1, 0x88, 0x1a, 0x46, 0xcf, 0x6e, 0xc4, 0x88, 0x1a, 0xc7, 0x6b, 0x0b, 0xb5, 0x03, 0xd7, 0x3d, - 0xe8, 0x90, 0x55, 0xa4, 0xd8, 0xeb, 0xef, 0xaf, 0x5a, 0x7d, 0xcf, 0xa0, 0x4c, 0x18, 0x8f, 0x85, - 0xa5, 0x34, 0x3c, 0xb0, 0xbb, 0xc4, 0x0f, 0x8c, 0x6e, 0x8f, 0x23, 0x5c, 0xb5, 0x48, 0x8f, 0x38, - 0x16, 0x71, 0x4c, 0x9b, 0xf8, 0xab, 0x07, 0xee, 0x81, 0x8b, 0xeb, 0xf8, 0x8b, 0xa3, 0x5c, 0x0b, - 0x95, 0xa7, 0x5a, 0x9b, 0x6e, 0xb7, 0xeb, 0x3a, 0x54, 0xe1, 0x2e, 0xf1, 0x7d, 0xe3, 0x80, 0x64, - 0x62, 0x11, 0xa7, 0xdf, 0xf5, 0x29, 0xd2, 0x89, 0xeb, 0x1d, 0xed, 0x77, 0xdc, 0x13, 0x8e, 0x75, - 0x3d, 0x81, 0xb5, 0x6f, 0xd8, 0x9d, 0xbe, 0x47, 0x86, 0x99, 0xbd, 0x91, 0x40, 0x13, 0x3c, 0x86, - 0xf1, 0xde, 0xca, 0xb2, 0xab, 0xd9, 0x71, 0xcd, 0xa3, 0x61, 0xdc, 0x1b, 0x59, 0xb8, 0xa1, 0x9e, - 0x6c, 0x5b, 0x1c, 0xf5, 0xed, 0x33, 0x51, 0x53, 0x5b, 0x7a, 0xf3, 0x4c, 0xe4, 0xc0, 0xf0, 0x8f, - 0x38, 0xe2, 0x7b, 0xb9, 0xb8, 0xb6, 0x29, 0x45, 0x3b, 0x18, 0xf4, 0x84, 0xde, 0x37, 0xb3, 0xc8, - 0x0e, 0x6d, 0x3f, 0x70, 0xbd, 0xc1, 0xf0, 0x2e, 0x57, 0x73, 0x78, 0xda, 0xb3, 0x3e, 0xe9, 0x13, - 0xee, 0x65, 0xf5, 0xff, 0x28, 0x42, 0x69, 0xe7, 0xd0, 0xf0, 0xac, 0xa6, 0xb3, 0xef, 0xaa, 0xf3, - 0x20, 0xfb, 0xf4, 0xa3, 0x6d, 0x5b, 0x5a, 0x61, 0xb9, 0xb0, 0x32, 0xaa, 0x17, 0xf1, 0xbb, 0x69, - 0x51, 0x90, 0x67, 0x38, 0x07, 0x84, 0x82, 0x2e, 0x2f, 0x17, 0x56, 0x46, 0xf4, 0x22, 0x7e, 0x37, - 0x2d, 0x75, 0x1a, 0x46, 0xdd, 0x13, 0x87, 0x78, 0xda, 0xc8, 0x72, 0x61, 0xa5, 0xa4, 0xb3, 0x0f, - 0xf5, 0x26, 0xa8, 0x7e, 0xe0, 0x76, 0x88, 0xd3, 0xf6, 0x6d, 0xc7, 0x24, 0x6d, 0x8f, 0x38, 0xe4, - 0x44, 0x1b, 0x43, 0xae, 0x0a, 0x83, 0xec, 0x50, 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, 0x85, 0xff, 0x6e, 0x4a, 0xdf, 0xff, 0xcf, 0x52, 0x41, 0x07, 0x46, - 0x44, 0x97, 0xd5, 0x7b, 0x50, 0x73, 0x8c, 0x2e, 0xf1, 0x7b, 0x86, 0x49, 0xda, 0x8e, 0x1b, 0xd8, - 0xfb, 0xb6, 0x89, 0x97, 0xa1, 0x7d, 0x4c, 0x0d, 0xe0, 0x3a, 0x5a, 0x09, 0xf5, 0x5e, 0x0c, 0xb1, - 0x1e, 0xc5, 0x90, 0xbe, 0x60, 0x38, 0xea, 0xdf, 0x15, 0x60, 0xde, 0x23, 0xbd, 0x8e, 0xa0, 0xb5, - 0x3a, 0xcf, 0xda, 0x86, 0x79, 0xd4, 0xee, 0x90, 0x63, 0xd2, 0xd1, 0xc6, 0x97, 0x47, 0x56, 0xca, - 0xeb, 0xcd, 0xc6, 0xf9, 0x77, 0xb3, 0x11, 0x5a, 0xb5, 0xa1, 0x47, 0xec, 0xee, 0x75, 0x9e, 0x6d, - 0x98, 0x47, 0x0f, 0x29, 0xaf, 0x6d, 0x27, 0xf0, 0x06, 0xfa, 0xac, 0x97, 0x09, 0x54, 0x8f, 0x40, - 0xc1, 0x73, 0x8a, 0x64, 0xfb, 0x9a, 0x82, 0xc2, 0x37, 0x2e, 0x26, 0xfc, 0x33, 0xca, 0x45, 0xb0, - 0xf5, 0x99, 0xd0, 0xea, 0xb3, 0xc4, 0xa2, 0x6a, 0x40, 0x85, 0x09, 0xf3, 0x03, 0x23, 0x20, 0xbe, - 0x36, 0x89, 0x82, 0x3e, 0x7e, 0x09, 0x41, 0x3b, 0xc8, 0x80, 0x49, 0x29, 0x3f, 0x8b, 0x56, 0x16, - 0x9a, 0xf0, 0xda, 0x19, 0x66, 0x50, 0x15, 0x18, 0x39, 0x22, 0x03, 0xf4, 0xb9, 0x92, 0x4e, 0x7f, - 0x52, 0xa7, 0x3a, 0x36, 0x3a, 0x7d, 0xc2, 0x9d, 0x8d, 0x7d, 0x7c, 0x78, 0xf9, 0xfd, 0xc2, 0x42, - 0x00, 0x53, 0x19, 0x9b, 0x8a, 0xb3, 0x18, 0x65, 0x2c, 0x3e, 0x89, 0xb3, 0x28, 0xaf, 0xaf, 0xe5, - 0xd9, 0x4f, 0x82, 0x73, 0x5c, 0xaa, 0x03, 0x4a, 0x7a, 0x87, 0x19, 0x22, 0xef, 0x25, 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, 0x7f, 0xbd, - 0x0a, 0x33, 0x4f, 0x79, 0x10, 0xd9, 0x16, 0xb9, 0x04, 0x2f, 0xf5, 0x55, 0xa8, 0x44, 0xf7, 0x82, - 0x5f, 0xec, 0x92, 0x5e, 0x0e, 0xd7, 0x9a, 0x96, 0xba, 0x04, 0xe5, 0x30, 0x00, 0xf1, 0xfb, 0x5d, - 0xd2, 0x41, 0x2c, 0x35, 0x2d, 0xb5, 0x01, 0x53, 0x3d, 0xc3, 0x23, 0x4e, 0xd0, 0x4e, 0xb0, 0x62, - 0x17, 0x7e, 0x92, 0x81, 0x1e, 0xc5, 0x18, 0xde, 0x04, 0x95, 0xe3, 0xc7, 0xf9, 0x4a, 0x88, 0xae, - 0x30, 0xc8, 0xd3, 0x88, 0x7b, 0x1d, 0xc6, 0x39, 0xb6, 0xd7, 0x77, 0x28, 0xe2, 0x28, 0x53, 0x91, - 0x2d, 0xea, 0x7d, 0x27, 0xa1, 0x81, 0xed, 0xd8, 0x81, 0x6d, 0x04, 0x04, 0xa3, 0xd4, 0x18, 0x7a, - 0x07, 0xd7, 0xa0, 0x29, 0x20, 0x4d, 0x4b, 0xfd, 0x00, 0xe6, 0x4d, 0xb7, 0xdb, 0xeb, 0x10, 0xbc, - 0xc5, 0xe4, 0x98, 0x52, 0xee, 0x19, 0x81, 0x79, 0x48, 0xa9, 0x8a, 0x48, 0x35, 0x1b, 0x21, 0x6c, - 0x53, 0xf8, 0x26, 0x05, 0x37, 0x2d, 0xf5, 0x0a, 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, 0x3b, 0xe8, 0x11, 0x6a, 0x10, 0xf5, 0x1b, 0x58, 0x08, 0xb1, 0xc3, 0x1c, 0x8f, - 0x41, 0xce, 0xed, 0x07, 0x5a, 0x19, 0xdd, 0x64, 0x7e, 0x28, 0xce, 0xdd, 0xe3, 0x79, 0x7c, 0x53, - 0xfa, 0x47, 0x1a, 0xe6, 0xb4, 0x93, 0xf4, 0xc9, 0xee, 0x32, 0x06, 0xea, 0x67, 0x30, 0x1d, 0xb2, - 0xa7, 0xc6, 0x13, 0x8c, 0x2b, 0xf9, 0x18, 0x87, 0x3b, 0xd1, 0xfb, 0x21, 0xcb, 0x3d, 0xb8, 0x62, - 0x91, 0x7d, 0xa3, 0xdf, 0x89, 0x1d, 0x1e, 0xcb, 0x4a, 0x9c, 0xf7, 0x78, 0x3e, 0xde, 0x0b, 0x9c, - 0x8b, 0x38, 0xe8, 0x5d, 0xc3, 0x3f, 0x12, 0x32, 0xde, 0x06, 0xb5, 0x63, 0xf8, 0x01, 0x3f, 0x17, - 0xe4, 0x6e, 0x5b, 0xda, 0x24, 0x1e, 0xcb, 0x04, 0x85, 0xe0, 0x81, 0x50, 0x8a, 0xa6, 0xa5, 0xbe, - 0x03, 0x53, 0x88, 0xbc, 0x6f, 0x7b, 0x21, 0x89, 0x6d, 0x69, 0x2a, 0x62, 0x2b, 0x14, 0x74, 0x9f, - 0x42, 0x90, 0xa4, 0x69, 0xa9, 0x7f, 0x05, 0xaf, 0x23, 0x7a, 0x52, 0x79, 0x3f, 0x30, 0x3c, 0xea, - 0x33, 0x21, 0xf9, 0x14, 0x92, 0xd7, 0x28, 0x6a, 0x5c, 0xc3, 0x1d, 0x86, 0x27, 0x98, 0xdd, 0x05, - 0x40, 0x4a, 0x96, 0x96, 0xa6, 0x73, 0xa6, 0xa5, 0x12, 0xd2, 0x60, 0x56, 0x6a, 0x01, 0x6a, 0xd8, - 0x8e, 0x67, 0xb7, 0x99, 0x9c, 0x6c, 0xaa, 0x94, 0xf2, 0xf3, 0x28, 0xc3, 0xad, 0xc3, 0x4c, 0x72, - 0x53, 0x22, 0xb1, 0xcd, 0xe2, 0x5e, 0xa6, 0x4e, 0x62, 0xfb, 0x10, 0xf9, 0xec, 0x3e, 0x2c, 0xa7, - 0x0c, 0x61, 0x1e, 0x12, 0xab, 0xdf, 0x89, 0x9b, 0x62, 0x8e, 0xe5, 0xc5, 0x38, 0xf9, 0x8e, 0xc0, - 0x12, 0x86, 0xd8, 0x84, 0xda, 0x39, 0x06, 0xd5, 0x90, 0xcb, 0xc2, 0xc9, 0xe9, 0xc6, 0xdc, 0x49, - 0xeb, 0x2f, 0x3c, 0x6a, 0x3e, 0x9f, 0x47, 0x25, 0x36, 0x28, 0x5c, 0x69, 0xc8, 0x28, 0x46, 0x40, - 0x83, 0x6e, 0xa0, 0x2d, 0x60, 0x58, 0x4e, 0xd0, 0x6c, 0x30, 0x50, 0xe2, 0x52, 0x26, 0x36, 0x83, - 0xc7, 0xf3, 0x5a, 0xce, 0xe3, 0x99, 0xcb, 0xd8, 0x2a, 0x9e, 0x93, 0x01, 0x8b, 0xa7, 0xd9, 0x1c, - 0x05, 0x2c, 0xe6, 0x14, 0x30, 0x9f, 0x79, 0x22, 0x28, 0xc2, 0x83, 0xeb, 0x49, 0x11, 0xae, 0x67, - 0x1f, 0xd8, 0x8e, 0xd1, 0x49, 0xcb, 0xaa, 0xe5, 0x94, 0x75, 0x35, 0x2e, 0xeb, 0x31, 0x67, 0x96, - 0x94, 0x79, 0x07, 0xb4, 0xa4, 0x4c, 0x8f, 0x3c, 0xeb, 0x13, 0x1f, 0x0f, 0x7f, 0x09, 0xc3, 0xdf, - 0x4c, 0x9c, 0x89, 0xce, 0xa0, 0x4d, 0x4b, 0xfd, 0x3a, 0x1e, 0x31, 0x45, 0x7d, 0xab, 0xdd, 0x5b, - 0x2e, 0xac, 0x54, 0x4f, 0x49, 0x91, 0x58, 0x17, 0xd3, 0xe4, 0x98, 0x08, 0x1e, 0x83, 0x1e, 0x89, - 0x45, 0x58, 0xbe, 0xa2, 0x3e, 0x4e, 0x9b, 0xc2, 0xef, 0x1f, 0x1c, 0x50, 0xb5, 0x4c, 0xd7, 0x09, - 0x6c, 0x87, 0xd6, 0x50, 0x7e, 0x9b, 0xd6, 0x9e, 0xdb, 0xcb, 0x85, 0x15, 0x59, 0x5f, 0x4e, 0x18, - 0x95, 0xa1, 0x6e, 0x71, 0xcc, 0x0d, 0xff, 0x11, 0x39, 0x19, 0xbe, 0x32, 0xbc, 0xdc, 0x6e, 0xfb, - 0xf6, 0xb7, 0xa4, 0xbd, 0x37, 0xa0, 0x25, 0xd2, 0xfd, 0xe1, 0x2b, 0xf3, 0x80, 0x61, 0xed, 0xd8, - 0xdf, 0x92, 0x4d, 0x8a, 0xa3, 0xde, 0x00, 0xc5, 0x34, 0x1c, 0x93, 0x74, 0x84, 0xa1, 0x88, 0xa5, - 0x5d, 0x41, 0x1d, 0x26, 0xd8, 0xba, 0x2e, 0x96, 0xd5, 0xb7, 0x60, 0x32, 0x89, 0x4a, 0x6d, 0xba, - 0x8c, 0x36, 0x4d, 0xe2, 0x36, 0x11, 0xd7, 0x0f, 0x6c, 0xf3, 0x68, 0xd0, 0x8e, 0x65, 0xa9, 0xab, - 0x0c, 0x97, 0x01, 0x76, 0xc3, 0x5c, 0x75, 0x00, 0xcb, 0x1c, 0x57, 0xb8, 0x45, 0x3b, 0x70, 0xdb, - 0x51, 0x44, 0xa3, 0x97, 0xaf, 0x9e, 0xef, 0xf2, 0x2d, 0x32, 0x46, 0xc2, 0x25, 0x76, 0xdd, 0x1d, - 0x11, 0xe3, 0xe8, 0x2d, 0xd4, 0xa0, 0x28, 0xee, 0xdd, 0xeb, 0xac, 0x71, 0xe0, 0x9f, 0xea, 0xe7, - 0x30, 0xeb, 0x91, 0xc0, 0x1b, 0xf0, 0xbc, 0xdd, 0x69, 0xdb, 0x4e, 0x40, 0xbc, 0x63, 0xa3, 0xa3, - 0x5d, 0xcb, 0x27, 0x78, 0x1a, 0xc9, 0x59, 0x6e, 0xef, 0x34, 0x39, 0x71, 0xc4, 0xb6, 0x6b, 0x3c, - 0xb7, 0xbb, 0xfd, 0x6e, 0xc4, 0xf6, 0xfa, 0x45, 0xd8, 0x7e, 0xca, 0xa8, 0x43, 0xb6, 0xb7, 0xd3, - 0x6c, 0xf9, 0x36, 0x7c, 0xed, 0x0d, 0xdc, 0x56, 0x82, 0x8a, 0x87, 0x13, 0x5f, 0xfd, 0x90, 0xf6, - 0x0c, 0x94, 0x6a, 0xcf, 0x30, 0x8f, 0xdc, 0xfd, 0xfd, 0xb6, 0xe9, 0x92, 0xfd, 0x7d, 0xdb, 0xb4, - 0x89, 0x13, 0x68, 0x6f, 0x2e, 0x17, 0x56, 0x0a, 0xfa, 0x1c, 0x22, 0x6c, 0x32, 0xf8, 0x56, 0x04, - 0x56, 0xbb, 0x50, 0xcf, 0x28, 0x10, 0xc8, 0xf3, 0x9e, 0xcd, 0xd4, 0x65, 0xd7, 0x78, 0x25, 0xe7, - 0x35, 0x5e, 0x1a, 0xaa, 0x14, 0xb6, 0x43, 0x4e, 0xbc, 0x4b, 0x5a, 0x62, 0xaa, 0x3a, 0xae, 0xd3, - 0xc6, 0x5f, 0xc6, 0x5e, 0x87, 0xb4, 0x89, 0xe7, 0xb9, 0x1e, 0xde, 0x4b, 0x5f, 0xbb, 0xb1, 0x3c, - 0xb2, 0x52, 0xd2, 0x5f, 0x43, 0xe0, 0x23, 0xd7, 0xd1, 0x05, 0xd2, 0x36, 0xc5, 0xa1, 0x57, 0xce, - 0x57, 0x57, 0x40, 0x39, 0x34, 0x7c, 0x46, 0xdf, 0xee, 0xb9, 0x1d, 0xdb, 0x1c, 0x68, 0x6f, 0xa1, - 0x6b, 0x57, 0x0f, 0x0d, 0x1f, 0x29, 0x9e, 0xe0, 0xaa, 0xfa, 0x3a, 0x8c, 0x9b, 0x9e, 0xeb, 0x84, - 0xfe, 0xa7, 0xbd, 0x8d, 0x9e, 0x5a, 0xa1, 0x8b, 0xc2, 0x97, 0x68, 0x89, 0xea, 0xdb, 0x07, 0x34, - 0x7a, 0x99, 0x6e, 0xdf, 0x09, 0xb4, 0x06, 0xde, 0xae, 0x32, 0x5b, 0xdb, 0xa2, 0x4b, 0xea, 0x67, - 0x30, 0x69, 0xf4, 0x03, 0xb7, 0xed, 0x11, 0x9f, 0x04, 0xed, 0x9e, 0x6b, 0x3b, 0x81, 0xaf, 0xdd, - 0x42, 0xab, 0x5c, 0x8f, 0x42, 0x08, 0x8d, 0x1d, 0x61, 0x83, 0x7e, 0xbc, 0xd6, 0xd0, 0x29, 0xf6, - 0x13, 0x44, 0xd6, 0x27, 0x28, 0x7d, 0x6c, 0x41, 0xfd, 0x5b, 0x98, 0xf4, 0x89, 0xe1, 0x99, 0x87, - 0xf4, 0x90, 0x3d, 0x7b, 0xaf, 0x4f, 0x2f, 0xf6, 0x6d, 0xec, 0x7d, 0x1e, 0xe7, 0x29, 0xdc, 0x33, - 0xcb, 0xed, 0xc6, 0x0e, 0xb2, 0xdc, 0x08, 0x39, 0xb2, 0x66, 0x48, 0xf1, 0x53, 0xcb, 0xea, 0x53, - 0x90, 0xba, 0xa4, 0xeb, 0x6a, 0xef, 0xa1, 0xc0, 0xad, 0x97, 0x17, 0xf8, 0x29, 0xe9, 0xba, 0x4c, - 0x08, 0x32, 0x54, 0xbf, 0x81, 0x49, 0x5e, 0x17, 0xf0, 0xc0, 0x65, 0x13, 0x5f, 0xfb, 0x33, 0xb4, - 0xd4, 0xbb, 0x99, 0x52, 0x78, 0x78, 0xa3, 0x12, 0x78, 0xd5, 0xf0, 0x40, 0xd0, 0xe9, 0xca, 0x71, - 0x6a, 0x45, 0xbd, 0x05, 0xb3, 0xbc, 0x10, 0x0b, 0x9d, 0x95, 0x57, 0xed, 0x77, 0xf0, 0x64, 0xa7, - 0x10, 0x1a, 0xaa, 0xc8, 0xaa, 0xf7, 0xbf, 0x86, 0x89, 0x08, 0x9d, 0x76, 0x99, 0xbe, 0xf6, 0x3e, - 0x6a, 0xb4, 0x9e, 0x67, 0xdf, 0x21, 0x33, 0xda, 0x25, 0xf9, 0x7a, 0x95, 0x24, 0xbe, 0x13, 0xe9, - 0x96, 0xaa, 0x92, 0xbe, 0x3b, 0x1f, 0x5c, 0x34, 0xdd, 0xea, 0xfd, 0xf4, 0xad, 0xb9, 0x0d, 0x73, - 0x43, 0x25, 0x68, 0xf0, 0x1c, 0x77, 0xfd, 0x21, 0xab, 0xbd, 0x92, 0x65, 0xe8, 0xee, 0x73, 0xba, - 0xeb, 0xdb, 0x30, 0x8b, 0x1d, 0x75, 0x3b, 0xf0, 0x0c, 0xc7, 0xb7, 0x51, 0x23, 0xe6, 0xe0, 0x1f, - 0x21, 0xd1, 0x34, 0x42, 0x77, 0x43, 0x20, 0xf3, 0xf4, 0x4f, 0xa0, 0x9a, 0x6c, 0x14, 0xb4, 0x3f, - 0xcf, 0xb9, 0x81, 0x71, 0x12, 0x6f, 0x0f, 0xd4, 0x55, 0x98, 0x76, 0xc8, 0xc9, 0xf0, 0x39, 0xfd, - 0x05, 0xeb, 0xda, 0x1c, 0x72, 0x92, 0x3a, 0xa5, 0x87, 0x50, 0xe1, 0x3d, 0x16, 0x0e, 0xd1, 0xb4, - 0x8f, 0x51, 0xee, 0x8d, 0xcc, 0x23, 0x42, 0x0c, 0xe6, 0x32, 0x66, 0xe0, 0x7a, 0x5b, 0xf4, 0x53, - 0x74, 0x6c, 0xf8, 0xa1, 0xbe, 0x0f, 0xda, 0x50, 0xc7, 0x26, 0x0a, 0xd6, 0xbb, 0xac, 0x01, 0x4b, - 0xb5, 0x6d, 0xa2, 0x66, 0xbd, 0x05, 0xb3, 0x66, 0xc7, 0xf5, 0xb9, 0xdd, 0xf6, 0x89, 0x17, 0x76, - 0x08, 0x7f, 0xc9, 0x8c, 0x8d, 0xd0, 0x5d, 0x0e, 0xe4, 0x5d, 0xc2, 0x1d, 0xd0, 0x18, 0xd1, 0xb1, - 0xed, 0xdb, 0x7b, 0x76, 0xc7, 0x0e, 0x06, 0x21, 0xd9, 0x06, 0x92, 0xcd, 0x20, 0xfc, 0x8b, 0x10, - 0xcc, 0x09, 0xef, 0x02, 0x70, 0x69, 0xd4, 0xd6, 0x9b, 0x79, 0x4b, 0x7c, 0xa6, 0x03, 0xb5, 0xf3, - 0x36, 0x2c, 0x65, 0x4b, 0xe6, 0xfd, 0x25, 0xb1, 0xb4, 0x2d, 0x8c, 0x8d, 0x8b, 0x19, 0x0a, 0x6c, - 0x09, 0x9c, 0x05, 0x0b, 0x66, 0x32, 0x63, 0x47, 0xc6, 0x70, 0xe4, 0xbd, 0xe4, 0x98, 0x61, 0x29, - 0x19, 0x00, 0xf9, 0x30, 0xf3, 0x78, 0xad, 0xf1, 0xc4, 0x18, 0x74, 0x5c, 0xc3, 0x8a, 0xcf, 0x31, - 0xbe, 0x84, 0x52, 0x18, 0x30, 0x7e, 0x53, 0xce, 0xe1, 0x94, 0x22, 0x9c, 0x49, 0xb4, 0x24, 0x59, - 0x51, 0x26, 0x5b, 0x92, 0x7c, 0x53, 0x79, 0xa7, 0x25, 0xc9, 0xef, 0x28, 0x8d, 0x96, 0x24, 0xaf, - 0x2a, 0xef, 0xb6, 0x24, 0xf9, 0x5d, 0x65, 0xad, 0x25, 0xc9, 0x6b, 0xca, 0x7a, 0x4b, 0x92, 0xd7, - 0x95, 0x5b, 0xf5, 0x5b, 0x50, 0x4d, 0x5e, 0x72, 0x9a, 0x12, 0xe2, 0x65, 0x17, 0xea, 0x38, 0xa2, - 0x97, 0x0f, 0xa3, 0x22, 0xab, 0xfe, 0x4b, 0x01, 0x66, 0x87, 0x42, 0x22, 0x0e, 0x52, 0xb0, 0x9e, - 0xf2, 0x08, 0xbd, 0x7a, 0xb1, 0x7a, 0xaa, 0xc0, 0xeb, 0x29, 0x04, 0x44, 0xf5, 0xd4, 0x0c, 0x8c, - 0xf1, 0x8b, 0xc1, 0xe6, 0x1e, 0xa3, 0x1e, 0x5e, 0x86, 0x16, 0x8c, 0xe2, 0xf5, 0xc4, 0x21, 0x47, - 0x75, 0xfd, 0x76, 0xbe, 0x3a, 0x35, 0xa9, 0x87, 0xce, 0x58, 0xa8, 0xf7, 0x61, 0x8c, 0xfe, 0xe8, - 0xfb, 0x38, 0x02, 0x49, 0x14, 0xbd, 0xe7, 0x73, 0xe9, 0xfb, 0x3a, 0xa7, 0xae, 0xff, 0x61, 0x0c, - 0x94, 0x84, 0xdb, 0xff, 0x56, 0xf3, 0x9d, 0xc8, 0x06, 0x23, 0x71, 0x1b, 0x6c, 0x41, 0x29, 0xaa, - 0xd7, 0x99, 0xea, 0x6f, 0x9c, 0x6d, 0x87, 0xb0, 0x4e, 0x97, 0x03, 0x51, 0x9f, 0x37, 0x60, 0x2a, - 0x30, 0xbc, 0x03, 0x92, 0x9a, 0x1d, 0xb1, 0x19, 0xcf, 0x24, 0x03, 0xa5, 0x66, 0x47, 0x1c, 0x3f, - 0xae, 0xf3, 0x18, 0x9b, 0xaf, 0x30, 0x48, 0x72, 0x76, 0xc4, 0xb1, 0xf9, 0x06, 0x8a, 0x6c, 0xfb, - 0x6c, 0x91, 0xc5, 0xb5, 0xe4, 0x40, 0x47, 0x4e, 0x0f, 0x74, 0x3e, 0x82, 0x05, 0xce, 0xc2, 0x3c, - 0xb4, 0x3b, 0x56, 0x24, 0xd6, 0x75, 0x3a, 0x03, 0x9c, 0xff, 0xc8, 0xfa, 0x1c, 0xc3, 0xd8, 0xa2, - 0x08, 0x42, 0xfa, 0x63, 0xa7, 0x33, 0xc0, 0x31, 0xf7, 0x70, 0x47, 0x0d, 0x6c, 0x36, 0xe1, 0xa7, - 0xbb, 0x68, 0x0d, 0x8a, 0x22, 0x04, 0x96, 0xd9, 0x10, 0x9d, 0x7f, 0xaa, 0x73, 0x50, 0x14, 0xd1, - 0xaa, 0x82, 0x90, 0xb1, 0x80, 0x85, 0xa7, 0x26, 0x4c, 0xc4, 0xe3, 0x0a, 0x8d, 0x51, 0xe3, 0x79, - 0xe7, 0x07, 0x11, 0x21, 0x06, 0xaa, 0x9b, 0xa0, 0x5a, 0x84, 0x06, 0x9b, 0xb6, 0xb1, 0x1f, 0x10, - 0xaf, 0x8d, 0xe1, 0x48, 0x9b, 0xc0, 0x0d, 0x2a, 0x0c, 0xb2, 0x41, 0x01, 0x5b, 0x74, 0x5d, 0xfd, - 0x87, 0x02, 0xb0, 0x80, 0x15, 0x9f, 0x5b, 0x51, 0x15, 0x2d, 0x12, 0x18, 0x36, 0xce, 0xa3, 0xa9, - 0x1a, 0x8f, 0xf2, 0x64, 0xf0, 0xb4, 0xd3, 0x36, 0x50, 0x44, 0x34, 0xcd, 0x32, 0xfc, 0xa3, 0x7b, - 0x8c, 0xeb, 0x83, 0x4b, 0xfa, 0xbc, 0x79, 0x1a, 0x70, 0xe1, 0x6b, 0x98, 0x3f, 0x95, 0x52, 0xbd, - 0x0b, 0x8b, 0xa6, 0xe1, 0xb4, 0xfd, 0x23, 0xbb, 0x17, 0x0f, 0xc5, 0x34, 0xa4, 0xda, 0xb4, 0x31, - 0x28, 0xe0, 0x46, 0xe7, 0x4d, 0xc3, 0xd9, 0x39, 0xb2, 0x7b, 0x51, 0x18, 0xde, 0xe0, 0x08, 0x9b, - 0x55, 0xa8, 0xc4, 0x37, 0xc8, 0x62, 0x59, 0xfd, 0x5f, 0x24, 0x98, 0x8a, 0xcd, 0xae, 0x7f, 0x37, - 0xf7, 0x2e, 0xe6, 0x6b, 0xa3, 0x49, 0x5f, 0xbb, 0x06, 0xd5, 0xd4, 0x2c, 0x8d, 0x8d, 0x51, 0x2b, - 0xfb, 0xf1, 0x39, 0x5a, 0x1d, 0xc6, 0x1d, 0xf2, 0x3c, 0x86, 0xc4, 0xa6, 0xa6, 0x65, 0xba, 0x28, - 0x70, 0xb2, 0xbd, 0x5f, 0x3e, 0xc5, 0xfb, 0xaf, 0x42, 0x65, 0xcf, 0x33, 0x1c, 0xf3, 0xb0, 0x1d, - 0xb8, 0x47, 0x84, 0x5d, 0x81, 0x8a, 0x5e, 0x66, 0x6b, 0xbb, 0x74, 0x49, 0xd4, 0x2c, 0xd4, 0x28, - 0x09, 0xd4, 0x71, 0x44, 0xa5, 0x35, 0x8b, 0xde, 0x77, 0x36, 0x63, 0x04, 0xb1, 0x7b, 0x33, 0x71, - 0xde, 0xbd, 0x51, 0x5e, 0xf2, 0xde, 0x2c, 0x02, 0x08, 0xa5, 0xf8, 0x94, 0xb2, 0xa4, 0xcb, 0x4c, - 0x95, 0xa6, 0xd5, 0x92, 0xe4, 0x92, 0x02, 0xe1, 0x74, 0x3e, 0x9c, 0xcb, 0xd7, 0xff, 0x7f, 0x04, - 0xd4, 0x54, 0xb1, 0xf1, 0xfb, 0x76, 0x9b, 0x98, 0xa9, 0xc7, 0xce, 0x33, 0x75, 0xf1, 0x25, 0x4d, - 0x9d, 0x2c, 0xc6, 0xe4, 0x8b, 0x17, 0x63, 0xc9, 0x81, 0x6d, 0xe9, 0xe2, 0x03, 0xdb, 0xb3, 0xea, - 0x48, 0x38, 0xa3, 0x8e, 0xac, 0xff, 0x22, 0xc1, 0x38, 0xe5, 0xf0, 0xfb, 0xc9, 0xcc, 0xdb, 0x50, - 0xe1, 0x43, 0x20, 0xc6, 0x67, 0x14, 0xf9, 0xd4, 0x4f, 0x29, 0x4e, 0xf8, 0xa8, 0x07, 0x79, 0x94, - 0x83, 0xe8, 0x43, 0x25, 0xb1, 0x09, 0xac, 0x18, 0x80, 0x20, 0xbf, 0x31, 0xe4, 0xb7, 0x96, 0xaf, - 0x72, 0xe2, 0xa3, 0x11, 0x64, 0x1f, 0x0e, 0x6d, 0x63, 0x8b, 0x71, 0xc7, 0x2c, 0x26, 0x1d, 0xf3, - 0x06, 0x84, 0xb1, 0x26, 0x9c, 0xfe, 0xca, 0x38, 0xae, 0x99, 0x10, 0xeb, 0x62, 0xf2, 0x3b, 0x0f, - 0x72, 0x18, 0xa6, 0xd8, 0x73, 0x70, 0x91, 0xf0, 0xe8, 0x14, 0x73, 0x6f, 0x38, 0xcf, 0xbd, 0xcb, - 0x2f, 0xe9, 0xde, 0xe9, 0x08, 0x58, 0x19, 0x8e, 0x80, 0x37, 0x40, 0x31, 0x3a, 0x1e, 0x31, 0x2c, - 0x91, 0xb9, 0x88, 0x85, 0xd1, 0x4f, 0xd6, 0x27, 0xf8, 0xfa, 0x06, 0x5f, 0xae, 0xff, 0xf3, 0x65, - 0x50, 0x44, 0xf2, 0x0a, 0x9d, 0x2e, 0xb6, 0x8d, 0x42, 0x62, 0x1b, 0x69, 0x6f, 0xbc, 0x7c, 0xae, - 0x37, 0x8e, 0x9c, 0xe1, 0x8d, 0xd2, 0xa9, 0xde, 0x38, 0xfa, 0xa7, 0x07, 0x9e, 0xb1, 0xe4, 0xf9, - 0xfe, 0x76, 0xf1, 0xa5, 0xfe, 0xf7, 0x55, 0xa8, 0x6c, 0x98, 0x81, 0x7d, 0x6c, 0x07, 0x03, 0x34, - 0x57, 0x4c, 0x6a, 0x21, 0x29, 0xf5, 0x0e, 0x68, 0xe9, 0xdc, 0x16, 0x3e, 0x20, 0xb2, 0x47, 0xe9, - 0x99, 0x64, 0x86, 0x13, 0xef, 0x87, 0x9f, 0x40, 0x35, 0x35, 0x84, 0x97, 0xf2, 0x36, 0xf0, 0x7e, - 0x62, 0xe0, 0xbe, 0x02, 0xca, 0xd0, 0x2b, 0x0b, 0x8b, 0xc9, 0x55, 0x3f, 0xf9, 0xb2, 0xb2, 0x05, - 0x95, 0xc4, 0x13, 0x46, 0x5e, 0xf3, 0x94, 0xfd, 0xd8, 0xb3, 0xc5, 0x12, 0x94, 0x0d, 0x6e, 0x1a, - 0x91, 0xc5, 0x4b, 0x3a, 0x88, 0x25, 0x56, 0x47, 0xc7, 0xda, 0x29, 0xfe, 0x30, 0xea, 0x85, 0x8d, - 0xd4, 0x57, 0x30, 0x7f, 0xfa, 0x94, 0x19, 0xf2, 0x4d, 0x65, 0x67, 0xfd, 0xec, 0xf9, 0x72, 0x8a, - 0x77, 0x94, 0x23, 0x2e, 0xf0, 0x8a, 0x1a, 0xe3, 0xbd, 0x25, 0xf2, 0x05, 0xe5, 0xbd, 0x8b, 0x63, - 0x1a, 0xaa, 0x6b, 0x9a, 0x71, 0xce, 0x57, 0xd4, 0x29, 0x96, 0x3d, 0x92, 0x5c, 0x1f, 0xc2, 0xe4, - 0x21, 0x31, 0xbc, 0x60, 0x8f, 0x18, 0xc1, 0x45, 0x9f, 0x4e, 0x95, 0x90, 0x52, 0x70, 0xcb, 0x7a, - 0x4b, 0xa8, 0x5e, 0xe0, 0x2d, 0x81, 0xd5, 0x46, 0x59, 0x6f, 0x09, 0x54, 0x35, 0x2f, 0x7c, 0x05, - 0xa3, 0x3d, 0xaa, 0xc2, 0x42, 0x67, 0x20, 0x72, 0x19, 0x6b, 0x42, 0xe3, 0x23, 0xfe, 0xc9, 0xe4, - 0x88, 0x3f, 0xd9, 0x5f, 0xa9, 0xe9, 0xfe, 0xea, 0x46, 0xe4, 0xc6, 0xb6, 0x45, 0x9c, 0xc0, 0x0e, - 0x06, 0xf8, 0xfa, 0x8a, 0xef, 0x15, 0xb8, 0xde, 0xe4, 0xcb, 0x99, 0x73, 0xe5, 0xe9, 0xcc, 0xb9, - 0xf2, 0xe9, 0xcf, 0x0a, 0x33, 0xaf, 0xe6, 0x59, 0x61, 0xf6, 0xd5, 0x3c, 0x2b, 0xcc, 0x9d, 0xf1, - 0xac, 0xb0, 0x0b, 0x33, 0x8c, 0x2a, 0x3d, 0xd1, 0xd4, 0x72, 0x5e, 0xef, 0x29, 0x24, 0x4f, 0xcd, - 0x32, 0xcf, 0x7c, 0xac, 0x98, 0x3f, 0xfb, 0xb1, 0x22, 0xc7, 0xeb, 0xc1, 0xc2, 0xf9, 0xaf, 0x07, - 0x8f, 0x40, 0x65, 0x5c, 0xd8, 0x4c, 0x95, 0xfd, 0x0d, 0x90, 0x3f, 0xbb, 0x2e, 0x27, 0xab, 0x0f, - 0x0e, 0xa4, 0x29, 0xe3, 0x3e, 0xfb, 0xa9, 0x2b, 0x48, 0xfb, 0xd0, 0xf0, 0x03, 0xbe, 0x42, 0x1b, - 0xf8, 0x18, 0x3f, 0x9a, 0xae, 0x88, 0x17, 0xb9, 0xda, 0x22, 0xba, 0xda, 0x5c, 0x48, 0xf5, 0x14, - 0xe1, 0xa1, 0xcb, 0x65, 0xb7, 0x30, 0xb5, 0x53, 0x5a, 0x98, 0x2f, 0x60, 0x16, 0x85, 0x44, 0x57, - 0x5b, 0x74, 0xc3, 0x4b, 0x59, 0xea, 0x0f, 0x0d, 0xcc, 0x7c, 0x7d, 0x9a, 0xd2, 0x3f, 0x10, 0xe4, - 0xa2, 0x77, 0xfd, 0x06, 0x16, 0x52, 0x7c, 0xe3, 0x7f, 0x18, 0x58, 0xce, 0xfb, 0x22, 0x9d, 0xe0, - 0x1d, 0xfd, 0x73, 0xa0, 0x25, 0xc9, 0x23, 0x8a, 0xd4, 0x92, 0xe4, 0x31, 0xa5, 0xd8, 0x92, 0xe4, - 0x2b, 0x4a, 0xad, 0xfe, 0x5f, 0x05, 0x28, 0x61, 0xb5, 0x7a, 0x4e, 0x16, 0xcc, 0xca, 0x41, 0x97, - 0x33, 0x73, 0xd0, 0x06, 0x94, 0xd1, 0x4f, 0x79, 0x86, 0x1e, 0xc9, 0xfb, 0x17, 0x3e, 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, 0xff, 0x2d, 0x81, 0x8a, 0xe3, 0x99, 0xe4, 0xbf, 0x9f, - 0xce, 0xcc, 0xef, 0xd1, 0x60, 0x3a, 0x3b, 0xbf, 0x87, 0xf0, 0x44, 0x7e, 0xcf, 0x32, 0xc9, 0x48, - 0xa6, 0x49, 0x1a, 0x30, 0x25, 0x30, 0xe3, 0x75, 0x15, 0x1f, 0x7d, 0x71, 0x50, 0x6c, 0x98, 0x75, - 0x0d, 0x04, 0x07, 0xd1, 0x6c, 0xb2, 0xb1, 0x97, 0x48, 0xee, 0x6c, 0x9c, 0x95, 0x39, 0xdc, 0x94, - 0xb3, 0x87, 0x9b, 0x8b, 0x50, 0x0a, 0x0b, 0x3c, 0x91, 0xb1, 0xc3, 0x85, 0x0b, 0xfe, 0x95, 0xe9, - 0xcb, 0xf0, 0x2f, 0x58, 0x2c, 0x4b, 0xf2, 0xf8, 0x5c, 0xc6, 0x7a, 0x6f, 0xe5, 0x94, 0xae, 0xe1, - 0x89, 0x78, 0x11, 0xf0, 0x09, 0x8b, 0xdc, 0xe2, 0xcf, 0x5a, 0xb1, 0x25, 0xaa, 0x47, 0xfa, 0x28, - 0xc2, 0x39, 0x98, 0x92, 0x3c, 0x04, 0x1c, 0xd8, 0x8f, 0xb2, 0xf7, 0x89, 0xf1, 0x8b, 0xbe, 0x4f, - 0x30, 0xba, 0xa1, 0x4a, 0xb8, 0x3a, 0x54, 0x09, 0x87, 0x7f, 0xbf, 0x2b, 0x2a, 0x72, 0xfd, 0xdf, - 0x0a, 0x30, 0xc9, 0x2d, 0xba, 0x85, 0xf9, 0xf3, 0x55, 0x39, 0x56, 0x66, 0xe6, 0x1e, 0xc9, 0xfe, - 0x17, 0x40, 0xb6, 0xc9, 0xa4, 0x6c, 0x93, 0xd5, 0xff, 0xbd, 0x00, 0xb0, 0x83, 0xaf, 0xa9, 0xaf, - 0x4a, 0xf7, 0x64, 0x6d, 0x38, 0x92, 0xae, 0x0d, 0xb3, 0xd5, 0x2d, 0x66, 0xab, 0x9b, 0xfa, 0xf3, - 0x23, 0x0b, 0x5a, 0xb2, 0x52, 0xaa, 0x7f, 0x57, 0x00, 0x79, 0xeb, 0x90, 0x98, 0x47, 0x7e, 0xbf, - 0x9b, 0xde, 0xc4, 0x68, 0xb4, 0x89, 0x7b, 0x30, 0xb6, 0xdf, 0x31, 0x8e, 0x5d, 0x0f, 0x55, 0xae, - 0xae, 0xdf, 0x3c, 0xbb, 0x17, 0x11, 0x1c, 0xef, 0x23, 0x8d, 0xce, 0x69, 0xa3, 0x7f, 0xa0, 0x8e, - 0x60, 0x93, 0xc6, 0x3e, 0x36, 0xff, 0xe6, 0x87, 0x9f, 0x6a, 0x97, 0x7e, 0xfc, 0xa9, 0x76, 0xe9, - 0xd7, 0x9f, 0x6a, 0x85, 0xef, 0x5e, 0xd4, 0x0a, 0xff, 0xf4, 0xa2, 0x56, 0xf8, 0xcf, 0x17, 0xb5, - 0xc2, 0x0f, 0x2f, 0x6a, 0x85, 0xff, 0x7d, 0x51, 0x2b, 0xfc, 0xdf, 0x8b, 0xda, 0xa5, 0x5f, 0x5f, - 0xd4, 0x0a, 0xdf, 0xff, 0x5c, 0xbb, 0xf4, 0xc3, 0xcf, 0xb5, 0x4b, 0x3f, 0xfe, 0x5c, 0xbb, 0xf4, - 0xd5, 0xed, 0x03, 0x37, 0xd2, 0xc1, 0x76, 0x4f, 0xff, 0x77, 0xf6, 0x47, 0xb1, 0xcf, 0xbd, 0x31, - 0x0c, 0x9a, 0xb7, 0xfe, 0x18, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x0b, 0x92, 0x45, 0x40, 0x30, 0x00, - 0x00, + // 3621 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0x4b, 0x73, 0xdb, 0xd6, + 0xd5, 0xa6, 0x05, 0x89, 0xe0, 0x21, 0x45, 0x41, 0xd0, 0x0b, 0x52, 0x64, 0x4a, 0xa6, 0xed, 0x44, + 0x4e, 0x1c, 0x2a, 0x92, 0x9d, 0xcf, 0x79, 0x7c, 0x5f, 0xfc, 0x49, 0xb2, 0x6c, 0x93, 0x71, 0x6c, + 0x07, 0x52, 0xe2, 0x4c, 0x9a, 0x0c, 0x07, 0x02, 0xae, 0x24, 0x54, 0x24, 0x40, 0x03, 0xa0, 0x64, + 0x66, 0xba, 0xc8, 0xa2, 0xd3, 0x75, 0xba, 0xeb, 0x4f, 0xe8, 0xb2, 0x9b, 0x4e, 0xb7, 0x5d, 0x74, + 0x3a, 0x5d, 0x75, 0xb2, 0x6b, 0x76, 0x6d, 0x9c, 0x4d, 0x37, 0x9d, 0x64, 0xfa, 0x0b, 0x3a, 0xf7, + 0xdc, 0x7b, 0xf1, 0x22, 0x24, 0x51, 0x6e, 0xbc, 0xc8, 0x8e, 0xb8, 0xe7, 0x71, 0xcf, 0x3d, 0xf7, + 0xdc, 0xf3, 0x24, 0x5c, 0x0f, 0x48, 0xbb, 0xe3, 0x7a, 0x46, 0x6b, 0xd9, 0x27, 0xde, 0x21, 0xf1, + 0x96, 0x8d, 0x8e, 0xbd, 0xdc, 0x21, 0x9e, 0x6f, 0xfb, 0x01, 0x71, 0x4c, 0xb2, 0x7c, 0xb8, 0xb2, + 0x4c, 0x9e, 0x12, 0xb3, 0x1b, 0xd8, 0xae, 0xe3, 0xd7, 0x3a, 0x9e, 0x1b, 0xb8, 0x6a, 0x55, 0x10, + 0xd5, 0x18, 0x51, 0xcd, 0xe8, 0xd8, 0xb5, 0x18, 0x51, 0xed, 0x70, 0x65, 0xae, 0xb2, 0xe7, 0xba, + 0x7b, 0x2d, 0xb2, 0x8c, 0x14, 0x3b, 0xdd, 0xdd, 0x65, 0xab, 0xeb, 0x19, 0x94, 0x09, 0xe3, 0x31, + 0xb7, 0x90, 0x86, 0x07, 0x76, 0x9b, 0xf8, 0x81, 0xd1, 0xee, 0x70, 0x84, 0x8b, 0x16, 0xe9, 0x10, + 0xc7, 0x22, 0x8e, 0x69, 0x13, 0x7f, 0x79, 0xcf, 0xdd, 0x73, 0x71, 0x1d, 0x7f, 0x71, 0x94, 0xcb, + 0xa1, 0xf0, 0x54, 0x6a, 0xd3, 0x6d, 0xb7, 0x5d, 0x87, 0x0a, 0xdc, 0x26, 0xbe, 0x6f, 0xec, 0x91, + 0x4c, 0x2c, 0xe2, 0x74, 0xdb, 0x3e, 0x45, 0x3a, 0x72, 0xbd, 0x83, 0xdd, 0x96, 0x7b, 0xc4, 0xb1, + 0xae, 0x24, 0xb0, 0x76, 0x0d, 0xbb, 0xd5, 0xf5, 0x48, 0x3f, 0xb3, 0x97, 0x13, 0x68, 0x82, 0x47, + 0x3f, 0xde, 0xab, 0x59, 0x7a, 0x35, 0x5b, 0xae, 0x79, 0xd0, 0x8f, 0x7b, 0x35, 0x0b, 0x37, 0x94, + 0x93, 0x1d, 0x8b, 0xa3, 0xbe, 0x76, 0x22, 0x6a, 0xea, 0x48, 0xaf, 0x9c, 0x88, 0x1c, 0x18, 0xfe, + 0x01, 0x47, 0x7c, 0x73, 0x20, 0xae, 0x4d, 0x4a, 0xd1, 0x0c, 0x7a, 0x1d, 0x21, 0xf7, 0xb5, 0x2c, + 0xb2, 0x7d, 0xdb, 0x0f, 0x5c, 0xaf, 0xd7, 0x7f, 0xca, 0xe5, 0x01, 0x2c, 0xed, 0x49, 0x97, 0x74, + 0x09, 0xb7, 0xb2, 0xea, 0x9f, 0xf3, 0x50, 0xd8, 0xda, 0x37, 0x3c, 0xab, 0xee, 0xec, 0xba, 0xea, + 0x2c, 0xc8, 0x3e, 0xfd, 0x68, 0xda, 0x96, 0x96, 0x5b, 0xcc, 0x2d, 0x0d, 0xeb, 0x79, 0xfc, 0xae, + 0x5b, 0x14, 0xe4, 0x19, 0xce, 0x1e, 0xa1, 0xa0, 0xf3, 0x8b, 0xb9, 0xa5, 0x21, 0x3d, 0x8f, 0xdf, + 0x75, 0x4b, 0x9d, 0x84, 0x61, 0xf7, 0xc8, 0x21, 0x9e, 0x36, 0xb4, 0x98, 0x5b, 0x2a, 0xe8, 0xec, + 0x43, 0xbd, 0x06, 0xaa, 0x1f, 0xb8, 0x2d, 0xe2, 0x34, 0x7d, 0xdb, 0x31, 0x49, 0xd3, 0x23, 0x0e, + 0x39, 0xd2, 0x46, 0x90, 0xab, 0xc2, 0x20, 0x5b, 0x14, 0xa0, 0xd3, 0x75, 0x75, 0x0d, 0x8a, 0xdd, + 0x8e, 0x65, 0x04, 0xa4, 0x49, 0x4d, 0x54, 0xcb, 0x2f, 0xe6, 0x96, 0x8a, 0xab, 0x73, 0x35, 0x66, + 0xbf, 0x35, 0x61, 0xbf, 0xb5, 0x6d, 0x61, 0xbf, 0xeb, 0xd2, 0x57, 0x7f, 0x5f, 0xc8, 0xe9, 0xc0, + 0x88, 0xe8, 0xb2, 0x7a, 0x1b, 0x2a, 0x8e, 0xd1, 0x26, 0x7e, 0xc7, 0x30, 0x49, 0xd3, 0x71, 0x03, + 0x7b, 0xd7, 0x36, 0xf1, 0x31, 0x34, 0x0f, 0xa9, 0x02, 0x5c, 0x47, 0x2b, 0xa0, 0xdc, 0xf3, 0x21, + 0xd6, 0x83, 0x18, 0xd2, 0xc7, 0x0c, 0x47, 0xfd, 0x65, 0x0e, 0x66, 0x3d, 0xd2, 0x69, 0x09, 0x5a, + 0xab, 0xf5, 0xa4, 0x69, 0x98, 0x07, 0xcd, 0x16, 0x39, 0x24, 0x2d, 0x6d, 0x74, 0x71, 0x68, 0xa9, + 0xb8, 0x5a, 0xaf, 0x9d, 0xfe, 0x36, 0x6b, 0xa1, 0x56, 0x6b, 0x7a, 0xc4, 0xee, 0x76, 0xeb, 0xc9, + 0x9a, 0x79, 0x70, 0x9f, 0xf2, 0xda, 0x74, 0x02, 0xaf, 0xa7, 0x4f, 0x7b, 0x99, 0x40, 0xf5, 0x00, + 0x14, 0xbc, 0xa7, 0x68, 0x6f, 0x5f, 0x53, 0x70, 0xf3, 0xb5, 0xb3, 0x6d, 0xfe, 0x21, 0xe5, 0x22, + 0xd8, 0xfa, 0x6c, 0xd3, 0xf2, 0x93, 0xc4, 0xa2, 0x6a, 0x40, 0x89, 0x6d, 0xe6, 0x07, 0x46, 0x40, + 0x7c, 0x6d, 0x1c, 0x37, 0x7a, 0xef, 0x39, 0x36, 0xda, 0x42, 0x06, 0x6c, 0x97, 0xe2, 0x93, 0x68, + 0x65, 0xae, 0x0e, 0x2f, 0x9d, 0xa0, 0x06, 0x55, 0x81, 0xa1, 0x03, 0xd2, 0x43, 0x9b, 0x2b, 0xe8, + 0xf4, 0x27, 0x35, 0xaa, 0x43, 0xa3, 0xd5, 0x25, 0xdc, 0xd8, 0xd8, 0xc7, 0x3b, 0xe7, 0xdf, 0xca, + 0xcd, 0x05, 0x30, 0x91, 0x71, 0xa8, 0x38, 0x8b, 0x61, 0xc6, 0xe2, 0x6e, 0x9c, 0x45, 0x71, 0x75, + 0x65, 0x90, 0xf3, 0x24, 0x38, 0xc7, 0x77, 0x75, 0x40, 0x49, 0x9f, 0x30, 0x63, 0xcb, 0xdb, 0xc9, + 0x2d, 0x6b, 0x03, 0x6f, 0x89, 0x6c, 0x63, 0xfb, 0x35, 0x24, 0x59, 0x52, 0x86, 0x1b, 0x92, 0x3c, + 0xac, 0x8c, 0x34, 0x24, 0x59, 0x56, 0x0a, 0x0d, 0x49, 0x06, 0xa5, 0xd8, 0x90, 0xe4, 0xa2, 0x52, + 0x6a, 0x48, 0x72, 0x49, 0x19, 0x6d, 0x48, 0x72, 0x59, 0x19, 0x6b, 0x48, 0xf2, 0x98, 0xa2, 0x54, + 0xff, 0x70, 0x09, 0xa6, 0x1e, 0x73, 0x27, 0xb2, 0x29, 0x62, 0x09, 0x3e, 0xea, 0x8b, 0x50, 0x8a, + 0xde, 0x05, 0x7f, 0xd8, 0x05, 0xbd, 0x18, 0xae, 0xd5, 0x2d, 0x75, 0x01, 0x8a, 0xa1, 0x03, 0xe2, + 0xef, 0xbb, 0xa0, 0x83, 0x58, 0xaa, 0x5b, 0x6a, 0x0d, 0x26, 0x3a, 0x86, 0x47, 0x9c, 0xa0, 0x99, + 0x60, 0xc5, 0x1e, 0xfc, 0x38, 0x03, 0x3d, 0x88, 0x31, 0xbc, 0x06, 0x2a, 0xc7, 0x8f, 0xf3, 0x95, + 0x10, 0x5d, 0x61, 0x90, 0xc7, 0x11, 0xf7, 0x2a, 0x8c, 0x72, 0x6c, 0xaf, 0xeb, 0x50, 0xc4, 0x61, + 0x26, 0x22, 0x5b, 0xd4, 0xbb, 0x4e, 0x42, 0x02, 0xdb, 0xb1, 0x03, 0xdb, 0x08, 0x08, 0x7a, 0xa9, + 0x11, 0xb4, 0x0e, 0x2e, 0x41, 0x5d, 0x40, 0xea, 0x96, 0xfa, 0x36, 0xcc, 0x9a, 0x6e, 0xbb, 0xd3, + 0x22, 0xf8, 0x8a, 0xc9, 0x21, 0xa5, 0xdc, 0x31, 0x02, 0x73, 0x9f, 0x52, 0xe5, 0x91, 0x6a, 0x3a, + 0x42, 0xd8, 0xa4, 0xf0, 0x75, 0x0a, 0xae, 0x5b, 0xea, 0x05, 0x00, 0xf4, 0xc2, 0x68, 0xbf, 0xe8, + 0x34, 0x0a, 0x7a, 0x81, 0xae, 0xe0, 0x4d, 0xd1, 0xb3, 0x45, 0xde, 0xba, 0xd7, 0x21, 0xa8, 0x12, + 0x0d, 0xd8, 0xd9, 0x04, 0x64, 0xbb, 0xd7, 0x21, 0x54, 0x21, 0xea, 0xe7, 0x30, 0x17, 0x62, 0x87, + 0x31, 0x1e, 0x9d, 0x9c, 0xdb, 0x0d, 0xb4, 0x22, 0x9a, 0xc9, 0x6c, 0x9f, 0x9f, 0xbb, 0xcd, 0xe3, + 0xf8, 0xba, 0xf4, 0x1b, 0xea, 0xe6, 0xb4, 0xa3, 0xf4, 0xcd, 0x6e, 0x33, 0x06, 0xea, 0x87, 0x30, + 0x19, 0xb2, 0xa7, 0xca, 0x13, 0x8c, 0x4b, 0x83, 0x31, 0x0e, 0x4f, 0xa2, 0x77, 0x43, 0x96, 0x3b, + 0x70, 0xc1, 0x22, 0xbb, 0x46, 0xb7, 0x15, 0xbb, 0x3c, 0x16, 0x95, 0x38, 0xef, 0xd1, 0xc1, 0x78, + 0xcf, 0x71, 0x2e, 0xe2, 0xa2, 0xb7, 0x0d, 0xff, 0x40, 0xec, 0xf1, 0x1a, 0xa8, 0x2d, 0xc3, 0x0f, + 0xf8, 0xbd, 0x20, 0x77, 0xdb, 0xd2, 0xc6, 0xf1, 0x5a, 0xc6, 0x28, 0x04, 0x2f, 0x84, 0x52, 0xd4, + 0x2d, 0xf5, 0x75, 0x98, 0x40, 0xe4, 0x5d, 0xdb, 0x0b, 0x49, 0x6c, 0x4b, 0x53, 0x11, 0x5b, 0xa1, + 0xa0, 0x3b, 0x14, 0x82, 0x24, 0x75, 0x4b, 0x7d, 0x1f, 0x2e, 0x21, 0x7a, 0x52, 0x78, 0x3f, 0x30, + 0x3c, 0x6a, 0x33, 0x21, 0xf9, 0x04, 0x92, 0x57, 0x28, 0x6a, 0x5c, 0xc2, 0x2d, 0x86, 0x27, 0x98, + 0xdd, 0x02, 0x40, 0x4a, 0x16, 0x96, 0x26, 0x07, 0x0c, 0x4b, 0x05, 0xa4, 0xc1, 0xa8, 0xd4, 0x00, + 0x94, 0xb0, 0x19, 0x8f, 0x6e, 0x53, 0x03, 0xb2, 0x29, 0x53, 0xca, 0x8f, 0xa2, 0x08, 0xb7, 0x0a, + 0x53, 0xc9, 0x43, 0x89, 0xc0, 0x36, 0x8d, 0x67, 0x99, 0x38, 0x8a, 0x9d, 0x43, 0xc4, 0xb3, 0x3b, + 0xb0, 0x98, 0x52, 0x84, 0xb9, 0x4f, 0xac, 0x6e, 0x2b, 0xae, 0x8a, 0x19, 0x16, 0x17, 0xe3, 0xe4, + 0x5b, 0x02, 0x4b, 0x28, 0x62, 0x1d, 0x2a, 0xa7, 0x28, 0x54, 0x43, 0x2e, 0x73, 0x47, 0xc7, 0x2b, + 0x73, 0x2b, 0x2d, 0xbf, 0xb0, 0xa8, 0xd9, 0xc1, 0x2c, 0x2a, 0x71, 0x40, 0x61, 0x4a, 0x7d, 0x4a, + 0x31, 0x02, 0xea, 0x74, 0x03, 0x6d, 0x0e, 0xdd, 0x72, 0x82, 0x66, 0x8d, 0x81, 0x12, 0x8f, 0x32, + 0x71, 0x18, 0xbc, 0x9e, 0x97, 0x06, 0xbc, 0x9e, 0x99, 0x8c, 0xa3, 0xe2, 0x3d, 0x19, 0x30, 0x7f, + 0x9c, 0xce, 0x71, 0x83, 0xf9, 0x01, 0x37, 0x98, 0xcd, 0xbc, 0x11, 0xdc, 0xc2, 0x83, 0x2b, 0xc9, + 0x2d, 0x5c, 0xcf, 0xde, 0xb3, 0x1d, 0xa3, 0x95, 0xde, 0xab, 0x32, 0xe0, 0x5e, 0x17, 0xe3, 0x7b, + 0x3d, 0xe4, 0xcc, 0x92, 0x7b, 0xde, 0x04, 0x2d, 0xb9, 0xa7, 0x47, 0x9e, 0x74, 0x89, 0x8f, 0x97, + 0xbf, 0x80, 0xee, 0x6f, 0x2a, 0xce, 0x44, 0x67, 0xd0, 0xba, 0xa5, 0x7e, 0x16, 0xf7, 0x98, 0x22, + 0xbf, 0xd5, 0x6e, 0x2f, 0xe6, 0x96, 0xca, 0xc7, 0x84, 0x48, 0xcc, 0x8b, 0x69, 0x70, 0x4c, 0x38, + 0x8f, 0x5e, 0x87, 0xc4, 0x3c, 0x2c, 0x5f, 0x51, 0x1f, 0xa6, 0x55, 0xe1, 0x77, 0xf7, 0xf6, 0xa8, + 0x58, 0xa6, 0xeb, 0x04, 0xb6, 0x43, 0x73, 0x28, 0xbf, 0x49, 0x73, 0xcf, 0xcd, 0xc5, 0xdc, 0x92, + 0xac, 0x2f, 0x26, 0x94, 0xca, 0x50, 0x37, 0x38, 0xe6, 0x9a, 0xff, 0x80, 0x1c, 0xf5, 0x3f, 0x19, + 0x9e, 0x6e, 0x37, 0x7d, 0xfb, 0x0b, 0xd2, 0xdc, 0xe9, 0xd1, 0x14, 0xe9, 0x4e, 0xff, 0x93, 0xb9, + 0xc7, 0xb0, 0xb6, 0xec, 0x2f, 0xc8, 0x3a, 0xc5, 0x51, 0xaf, 0x82, 0x62, 0x1a, 0x8e, 0x49, 0x5a, + 0x42, 0x51, 0xc4, 0xd2, 0x2e, 0xa0, 0x0c, 0x63, 0x6c, 0x5d, 0x17, 0xcb, 0xea, 0xab, 0x30, 0x9e, + 0x44, 0xa5, 0x3a, 0x5d, 0x44, 0x9d, 0x26, 0x71, 0xeb, 0x88, 0xeb, 0x07, 0xb6, 0x79, 0xd0, 0x6b, + 0xc6, 0xa2, 0xd4, 0x45, 0x86, 0xcb, 0x00, 0xdb, 0x61, 0xac, 0xda, 0x83, 0x45, 0x8e, 0x2b, 0xcc, + 0xa2, 0x19, 0xb8, 0xcd, 0xc8, 0xa3, 0xd1, 0xc7, 0x57, 0x1d, 0xec, 0xf1, 0xcd, 0x33, 0x46, 0xc2, + 0x24, 0xb6, 0xdd, 0x2d, 0xe1, 0xe3, 0xe8, 0x2b, 0xd4, 0x20, 0x2f, 0xde, 0xdd, 0x25, 0x56, 0x38, + 0xf0, 0x4f, 0xf5, 0x23, 0x98, 0xf6, 0x48, 0xe0, 0xf5, 0x78, 0xdc, 0x6e, 0x35, 0x6d, 0x27, 0x20, + 0xde, 0xa1, 0xd1, 0xd2, 0x2e, 0x0f, 0xb6, 0xf1, 0x24, 0x92, 0xb3, 0xd8, 0xde, 0xaa, 0x73, 0xe2, + 0x88, 0x6d, 0xdb, 0x78, 0x6a, 0xb7, 0xbb, 0xed, 0x88, 0xed, 0x95, 0xb3, 0xb0, 0xfd, 0x80, 0x51, + 0x87, 0x6c, 0x6f, 0xa4, 0xd9, 0xf2, 0x63, 0xf8, 0xda, 0xcb, 0x78, 0xac, 0x04, 0x15, 0x77, 0x27, + 0xbe, 0xfa, 0x0e, 0xad, 0x19, 0x28, 0xd5, 0x8e, 0x61, 0x1e, 0xb8, 0xbb, 0xbb, 0x4d, 0xd3, 0x25, + 0xbb, 0xbb, 0xb6, 0x69, 0x13, 0x27, 0xd0, 0x5e, 0x59, 0xcc, 0x2d, 0xe5, 0xf4, 0x19, 0x44, 0x58, + 0x67, 0xf0, 0x8d, 0x08, 0xac, 0xb6, 0xa1, 0x9a, 0x91, 0x20, 0x90, 0xa7, 0x1d, 0x9b, 0x89, 0xcb, + 0x9e, 0xf1, 0xd2, 0x80, 0xcf, 0x78, 0xa1, 0x2f, 0x53, 0xd8, 0x0c, 0x39, 0xf1, 0x2a, 0x69, 0x81, + 0x89, 0xea, 0xb8, 0x4e, 0x13, 0x7f, 0x19, 0x3b, 0x2d, 0xd2, 0x24, 0x9e, 0xe7, 0x7a, 0xf8, 0x2e, + 0x7d, 0xed, 0xea, 0xe2, 0xd0, 0x52, 0x41, 0x7f, 0x09, 0x81, 0x0f, 0x5c, 0x47, 0x17, 0x48, 0x9b, + 0x14, 0x87, 0x3e, 0x39, 0x5f, 0x5d, 0x02, 0x65, 0xdf, 0xf0, 0x19, 0x7d, 0xb3, 0xe3, 0xb6, 0x6c, + 0xb3, 0xa7, 0xbd, 0x8a, 0xa6, 0x5d, 0xde, 0x37, 0x7c, 0xa4, 0x78, 0x84, 0xab, 0xea, 0x25, 0x18, + 0x35, 0x3d, 0xd7, 0x09, 0xed, 0x4f, 0x7b, 0x0d, 0x2d, 0xb5, 0x44, 0x17, 0x85, 0x2d, 0xd1, 0x14, + 0xd5, 0xb7, 0xf7, 0xa8, 0xf7, 0x32, 0xdd, 0xae, 0x13, 0x68, 0x35, 0x7c, 0x5d, 0x45, 0xb6, 0xb6, + 0x41, 0x97, 0xd4, 0x2b, 0x50, 0x36, 0xcc, 0xc0, 0x3e, 0xb4, 0x83, 0x1e, 0x47, 0xba, 0x8b, 0x48, + 0xa3, 0x62, 0x95, 0xa1, 0xad, 0xc2, 0x94, 0xb9, 0x6f, 0xb7, 0xac, 0x98, 0x2a, 0x19, 0xf6, 0x3d, + 0x16, 0x22, 0x11, 0x18, 0xea, 0x86, 0xd1, 0x2c, 0x81, 0xd2, 0xf5, 0x89, 0x87, 0x8a, 0xf6, 0x38, + 0x7a, 0x1d, 0xd1, 0xcb, 0x74, 0x9d, 0xaa, 0xcd, 0x63, 0x98, 0x6b, 0x70, 0x41, 0xbc, 0x4f, 0xfe, + 0x5c, 0xc9, 0xd3, 0x80, 0x78, 0x91, 0xe0, 0x0d, 0x16, 0x03, 0x39, 0xd2, 0x06, 0xe2, 0x6c, 0x72, + 0x94, 0x50, 0x40, 0x7e, 0xd4, 0x14, 0xe9, 0xfb, 0x4c, 0x40, 0x06, 0x4c, 0xd2, 0x7c, 0x08, 0xe3, + 0x46, 0x37, 0x70, 0x9b, 0x1e, 0xf1, 0x49, 0xd0, 0xec, 0xb8, 0xb6, 0x13, 0xf8, 0xda, 0x75, 0xb4, + 0x88, 0x2b, 0x91, 0xfb, 0xa4, 0x7e, 0x33, 0x6c, 0x4e, 0x1c, 0xae, 0xd4, 0x74, 0x8a, 0xfd, 0x08, + 0x91, 0xf5, 0x31, 0x4a, 0x1f, 0x5b, 0x50, 0x7f, 0x01, 0xe3, 0x3e, 0x31, 0x3c, 0x73, 0x9f, 0x1a, + 0xb8, 0x67, 0xef, 0x74, 0xa9, 0x53, 0xbb, 0x81, 0x75, 0xdf, 0xc3, 0x41, 0x8a, 0x96, 0xcc, 0x52, + 0xa3, 0xb6, 0x85, 0x2c, 0xd7, 0x42, 0x8e, 0xac, 0x10, 0x54, 0xfc, 0xd4, 0xb2, 0xfa, 0x18, 0xa4, + 0x36, 0x69, 0xbb, 0xda, 0x9b, 0xb8, 0xe1, 0xc6, 0xf3, 0x6f, 0xf8, 0x01, 0x69, 0xbb, 0x6c, 0x13, + 0x64, 0xa8, 0x7e, 0x0e, 0xe3, 0x3c, 0x27, 0xe2, 0x4e, 0xdb, 0x26, 0xbe, 0xf6, 0x3f, 0xa8, 0xa9, + 0x37, 0x32, 0x77, 0xe1, 0xae, 0x9d, 0xee, 0xc0, 0x33, 0xa6, 0x7b, 0x82, 0x4e, 0x57, 0x0e, 0x53, + 0x2b, 0xea, 0x75, 0x98, 0xe6, 0x49, 0x68, 0x68, 0x5d, 0xbc, 0x62, 0xb9, 0x89, 0x56, 0x3d, 0x81, + 0xd0, 0x50, 0x44, 0x56, 0xb9, 0xfc, 0x0c, 0xc6, 0x22, 0x74, 0x5a, 0x61, 0xfb, 0xda, 0x5b, 0x28, + 0xd1, 0xea, 0x20, 0xe7, 0x0e, 0x99, 0xd1, 0x0a, 0xd1, 0xd7, 0xcb, 0x24, 0xf1, 0x9d, 0x48, 0x35, + 0xa8, 0x28, 0x69, 0xbf, 0xf1, 0xf6, 0x59, 0x53, 0x0d, 0xbd, 0x9b, 0xf6, 0x18, 0x37, 0x60, 0xa6, + 0x2f, 0xfd, 0x0e, 0x9e, 0xe2, 0xa9, 0xdf, 0x61, 0x36, 0x9b, 0x4c, 0xc1, 0xb7, 0x9f, 0xd2, 0x53, + 0xdf, 0x80, 0x69, 0xec, 0x26, 0x34, 0x03, 0xcf, 0x70, 0x7c, 0x3b, 0xf6, 0x12, 0xdf, 0x45, 0xa2, + 0x49, 0x84, 0x6e, 0x87, 0x40, 0x66, 0xe9, 0x77, 0xa1, 0x9c, 0x2c, 0x92, 0xb4, 0xff, 0x1d, 0xf0, + 0x00, 0xa3, 0x24, 0x5e, 0x1a, 0xa9, 0xcb, 0x30, 0xe9, 0x90, 0xa3, 0xfe, 0x7b, 0xfa, 0x3f, 0x56, + 0xb1, 0x3a, 0xe4, 0x28, 0x75, 0x4b, 0xf7, 0xa1, 0xc4, 0xeb, 0x4b, 0x6c, 0x20, 0x6a, 0xef, 0xe1, + 0xbe, 0x57, 0x33, 0xaf, 0x08, 0x31, 0x98, 0xc9, 0x98, 0x81, 0xeb, 0x6d, 0xd0, 0x4f, 0x51, 0xad, + 0xe2, 0x87, 0xfa, 0x16, 0x68, 0x7d, 0xd5, 0xaa, 0x48, 0xd6, 0x6f, 0xb1, 0xe2, 0x33, 0x55, 0xb2, + 0x8a, 0x7c, 0xfd, 0x3a, 0x4c, 0x9b, 0x2d, 0xd7, 0xe7, 0x7a, 0xdb, 0xa5, 0x6e, 0x89, 0x57, 0x47, + 0xff, 0xcf, 0x3d, 0x18, 0x85, 0x6e, 0x73, 0x20, 0xaf, 0x90, 0x6e, 0x82, 0xc6, 0x88, 0x0e, 0x6d, + 0xdf, 0xde, 0xb1, 0x5b, 0xd4, 0x49, 0x0a, 0xb2, 0x35, 0x24, 0x9b, 0x42, 0xf8, 0xc7, 0x21, 0x98, + 0x13, 0xde, 0x02, 0xe0, 0xbb, 0x51, 0x5d, 0xaf, 0x0f, 0x5a, 0xde, 0x30, 0x19, 0xa8, 0x9e, 0x37, + 0x61, 0x21, 0x7b, 0x67, 0x5e, 0x5b, 0x13, 0x4b, 0xdb, 0xc0, 0xb8, 0x30, 0x9f, 0x21, 0xc0, 0x86, + 0xc0, 0x99, 0xb3, 0x60, 0x2a, 0xd3, 0x77, 0x64, 0x34, 0x86, 0xde, 0x4c, 0xb6, 0x58, 0x16, 0x92, + 0x0e, 0x90, 0x37, 0x72, 0x0f, 0x57, 0x6a, 0x8f, 0x8c, 0x5e, 0xcb, 0x35, 0xac, 0x78, 0x0f, 0xe7, + 0x13, 0x28, 0x84, 0x0e, 0xe3, 0x47, 0xe5, 0x1c, 0x76, 0x68, 0xc2, 0x7e, 0x4c, 0x43, 0x92, 0x15, + 0x65, 0xbc, 0x21, 0xc9, 0xd7, 0x94, 0xd7, 0x1b, 0x92, 0xfc, 0xba, 0x52, 0x6b, 0x48, 0xf2, 0xb2, + 0xf2, 0x46, 0x43, 0x92, 0xdf, 0x50, 0x56, 0x1a, 0x92, 0xbc, 0xa2, 0xac, 0x36, 0x24, 0x79, 0x55, + 0xb9, 0x5e, 0xbd, 0x0e, 0xe5, 0xe4, 0x23, 0xa7, 0xe1, 0x30, 0x9e, 0x72, 0xa2, 0x8c, 0x43, 0x7a, + 0x71, 0x3f, 0x4a, 0x30, 0xab, 0xdf, 0xe7, 0x60, 0xba, 0xcf, 0x25, 0x62, 0x13, 0x09, 0x73, 0x49, + 0x8f, 0xd0, 0xa7, 0x17, 0xcb, 0x25, 0x73, 0x3c, 0x97, 0x44, 0x40, 0x94, 0x4b, 0x4e, 0xc1, 0x08, + 0x7f, 0x18, 0xac, 0xe7, 0x33, 0xec, 0xe1, 0x63, 0x68, 0xc0, 0x30, 0x3e, 0x4f, 0x6c, 0xf0, 0x94, + 0x57, 0x6f, 0x0c, 0x96, 0xa3, 0x27, 0xe5, 0xd0, 0x19, 0x0b, 0xf5, 0x0e, 0x8c, 0xd0, 0x1f, 0x5d, + 0x1f, 0xdb, 0x3f, 0x89, 0x84, 0xff, 0x74, 0x2e, 0x5d, 0x5f, 0xe7, 0xd4, 0xd5, 0x7f, 0x8f, 0x80, + 0x92, 0x30, 0xfb, 0x1f, 0xab, 0xb7, 0x15, 0xe9, 0x60, 0x28, 0xae, 0x83, 0x0d, 0x28, 0x44, 0xb5, + 0x0a, 0x13, 0xfd, 0xe5, 0x93, 0xf5, 0x10, 0xd6, 0x28, 0x72, 0x20, 0x6a, 0x93, 0x1a, 0x4c, 0x04, + 0x86, 0xb7, 0x47, 0x52, 0x7d, 0x33, 0xd6, 0xdf, 0x1a, 0x67, 0xa0, 0x54, 0xdf, 0x8c, 0xe3, 0xc7, + 0x65, 0x1e, 0x61, 0xbd, 0x25, 0x06, 0x49, 0xf6, 0xcd, 0x38, 0x36, 0x3f, 0x40, 0x9e, 0x1d, 0x9f, + 0x2d, 0x32, 0xbf, 0x96, 0x6c, 0x66, 0xc9, 0xe9, 0x66, 0xd6, 0xbb, 0x30, 0xc7, 0x59, 0xb0, 0xb4, + 0x29, 0xdc, 0xd6, 0x75, 0x5a, 0x3d, 0xec, 0x7d, 0xc9, 0xfa, 0x0c, 0xc3, 0xd8, 0xa0, 0x08, 0x62, + 0xf7, 0x87, 0x4e, 0xab, 0x87, 0x2d, 0xfe, 0xfe, 0x6e, 0x02, 0xb0, 0xbe, 0x8c, 0x9f, 0xee, 0x20, + 0x68, 0x90, 0x17, 0x2e, 0xb0, 0xc8, 0x06, 0x08, 0xfc, 0x53, 0x9d, 0x81, 0xbc, 0xf0, 0x56, 0x25, + 0x84, 0x8c, 0x04, 0xcc, 0x3d, 0xd5, 0x61, 0x2c, 0xee, 0x57, 0xa8, 0x8f, 0x1a, 0x1d, 0xb4, 0x77, + 0x12, 0x11, 0xa2, 0xa3, 0xba, 0x06, 0xaa, 0x45, 0xa8, 0xb3, 0x69, 0x1a, 0xbb, 0x01, 0x4d, 0xf3, + 0xa8, 0x3b, 0xd2, 0xc6, 0xf0, 0x80, 0x0a, 0x83, 0xac, 0x51, 0xc0, 0x06, 0x5d, 0x57, 0x7f, 0x9d, + 0x03, 0xe6, 0xb0, 0xe2, 0x3d, 0x3b, 0x2a, 0xa2, 0x45, 0x02, 0xc3, 0xc6, 0x5e, 0x3c, 0x15, 0xe3, + 0xc1, 0x20, 0x11, 0x3c, 0x6d, 0xb4, 0x35, 0xdc, 0x22, 0xea, 0xe4, 0x19, 0xfe, 0xc1, 0x6d, 0xc6, + 0xf5, 0xde, 0x39, 0x7d, 0xd6, 0x3c, 0x0e, 0x38, 0xf7, 0x19, 0xcc, 0x1e, 0x4b, 0xa9, 0xde, 0x82, + 0x79, 0xd3, 0x70, 0x9a, 0xfe, 0x81, 0xdd, 0x89, 0xbb, 0x62, 0xea, 0x52, 0x6d, 0x5a, 0x14, 0xe5, + 0xf0, 0xa0, 0xb3, 0xa6, 0xe1, 0x6c, 0x1d, 0xd8, 0x9d, 0xc8, 0x0d, 0xaf, 0x71, 0x84, 0xf5, 0x32, + 0x94, 0xe2, 0x07, 0x64, 0xbe, 0xac, 0xfa, 0x7b, 0x09, 0x26, 0x62, 0x7d, 0xfb, 0x9f, 0xcc, 0xbb, + 0x8b, 0xd9, 0xda, 0x70, 0xd2, 0xd6, 0x2e, 0x43, 0x39, 0xd5, 0x47, 0x64, 0x2d, 0xe4, 0xd2, 0x6e, + 0xbc, 0x87, 0x58, 0x85, 0x51, 0x87, 0x3c, 0x8d, 0x21, 0xb1, 0x8e, 0x71, 0x91, 0x2e, 0x0a, 0x9c, + 0x6c, 0xeb, 0x97, 0x8f, 0xb1, 0xfe, 0x8b, 0x50, 0xda, 0xf1, 0x0c, 0xc7, 0xdc, 0x6f, 0x06, 0xee, + 0x01, 0x61, 0x4f, 0xa0, 0xa4, 0x17, 0xd9, 0xda, 0x36, 0x5d, 0x12, 0x39, 0x0b, 0x55, 0x4a, 0x02, + 0x75, 0x14, 0x51, 0x69, 0xce, 0xa2, 0x77, 0x9d, 0xf5, 0x18, 0x41, 0xec, 0xdd, 0x8c, 0x9d, 0xf6, + 0x6e, 0x94, 0xe7, 0x7c, 0x37, 0xf3, 0x00, 0x42, 0x28, 0xde, 0xa1, 0x2d, 0xe8, 0x32, 0x13, 0xa5, + 0x6e, 0x35, 0x24, 0xb9, 0xa0, 0x40, 0x38, 0x99, 0x08, 0x67, 0x12, 0xd5, 0x7f, 0x0d, 0x81, 0x9a, + 0x4a, 0x36, 0x7e, 0xda, 0x66, 0x13, 0x53, 0xf5, 0xc8, 0x69, 0xaa, 0xce, 0x3f, 0xa7, 0xaa, 0x93, + 0xc9, 0x98, 0x7c, 0xf6, 0x64, 0x2c, 0xd9, 0xac, 0x2e, 0x9c, 0xbd, 0x59, 0x7d, 0x52, 0x1e, 0x09, + 0x27, 0xe4, 0x91, 0xd5, 0xef, 0x25, 0x18, 0xc5, 0x3a, 0xf9, 0x27, 0x73, 0xd5, 0x9b, 0x50, 0xe2, + 0x0d, 0x30, 0xc6, 0x67, 0x18, 0xf9, 0x54, 0x8f, 0x49, 0x4e, 0x78, 0x9b, 0x0b, 0x79, 0x14, 0x83, + 0xe8, 0x43, 0x25, 0xb1, 0xee, 0xb3, 0x68, 0xfe, 0x20, 0xbf, 0x11, 0xe4, 0xb7, 0x32, 0x58, 0xe6, + 0xc4, 0xdb, 0x42, 0xc8, 0x3e, 0x6c, 0x58, 0xc7, 0x16, 0xe3, 0x86, 0x99, 0x4f, 0x1a, 0xe6, 0x55, + 0x08, 0x7d, 0x4d, 0xd8, 0xf9, 0x96, 0xb1, 0x55, 0x35, 0x26, 0xd6, 0x45, 0xd7, 0x7b, 0x16, 0xe4, + 0xd0, 0x4d, 0xb1, 0x51, 0x78, 0x9e, 0x70, 0xef, 0x14, 0x33, 0x6f, 0x38, 0xcd, 0xbc, 0x8b, 0xcf, + 0x69, 0xde, 0x69, 0x0f, 0x58, 0xea, 0xf7, 0x80, 0x57, 0x41, 0x31, 0x5a, 0x1e, 0x31, 0x2c, 0x11, + 0xb9, 0x88, 0x85, 0xde, 0x4f, 0xd6, 0xc7, 0xf8, 0xfa, 0x1a, 0x5f, 0xae, 0xfe, 0xee, 0x3c, 0x28, + 0x22, 0x78, 0x85, 0x46, 0x17, 0x3b, 0x46, 0x2e, 0x71, 0x8c, 0xb4, 0x35, 0x9e, 0x3f, 0xd5, 0x1a, + 0x87, 0x4e, 0xb0, 0x46, 0xe9, 0x58, 0x6b, 0x1c, 0xfe, 0xef, 0x1d, 0xcf, 0x48, 0xf2, 0x7e, 0x7f, + 0x3c, 0xff, 0x52, 0xfd, 0x55, 0x19, 0x4a, 0x6b, 0xbc, 0x5b, 0x86, 0xea, 0x8a, 0xed, 0x9a, 0x4b, + 0xee, 0x7a, 0x13, 0xb4, 0x74, 0x6c, 0x0b, 0x87, 0xa7, 0x6c, 0x20, 0x3f, 0x95, 0x8c, 0x70, 0x62, + 0x76, 0x7a, 0x17, 0xca, 0xa9, 0x01, 0x84, 0x34, 0x68, 0x01, 0xef, 0x27, 0x86, 0x0d, 0x4b, 0xa0, + 0xf4, 0x4d, 0x98, 0x98, 0x4f, 0x2e, 0xfb, 0xc9, 0xa9, 0xd2, 0x06, 0x94, 0x12, 0xe3, 0x9b, 0x41, + 0xd5, 0x53, 0xf4, 0x63, 0x23, 0x9b, 0x05, 0x28, 0x86, 0xed, 0x45, 0x1e, 0xc5, 0x0b, 0x3a, 0x88, + 0x25, 0x96, 0x47, 0xc7, 0xca, 0x29, 0x3e, 0x14, 0xf6, 0xc2, 0x42, 0xea, 0x53, 0x98, 0x3d, 0xbe, + 0xc3, 0x0e, 0x83, 0x75, 0xa4, 0xa7, 0xfd, 0xec, 0xde, 0x7a, 0x8a, 0x77, 0x14, 0x23, 0xce, 0x30, + 0x41, 0x8e, 0xf1, 0xde, 0x10, 0xf1, 0x82, 0xf2, 0xde, 0xc6, 0x36, 0x0d, 0x95, 0x35, 0xcd, 0x78, + 0xc0, 0x09, 0xf2, 0x04, 0x8b, 0x1e, 0x49, 0xae, 0xf7, 0x61, 0x7c, 0x9f, 0x18, 0x5e, 0xb0, 0x43, + 0x8c, 0xe0, 0xac, 0x63, 0x63, 0x25, 0xa4, 0x14, 0xdc, 0xb2, 0xe6, 0x28, 0xe5, 0x33, 0xcc, 0x51, + 0x58, 0x6e, 0x94, 0x35, 0x47, 0x61, 0x1d, 0x5f, 0x31, 0x01, 0xa4, 0x35, 0xaa, 0xc2, 0x5c, 0x67, + 0x20, 0x62, 0x19, 0x2b, 0x42, 0xe3, 0xe3, 0x8d, 0xf1, 0xe4, 0x78, 0x23, 0x59, 0x5f, 0xa9, 0xe9, + 0xfa, 0xea, 0x6a, 0x64, 0xc6, 0xb6, 0x45, 0x9c, 0xc0, 0x0e, 0x7a, 0x38, 0x79, 0xc6, 0x59, 0x0d, + 0xae, 0xd7, 0xf9, 0x72, 0x66, 0x4f, 0x7d, 0x32, 0xb3, 0xa7, 0x7e, 0xfc, 0x48, 0x65, 0xea, 0xc5, + 0x8c, 0x54, 0xa6, 0x5f, 0xcc, 0x48, 0x65, 0xe6, 0x84, 0x91, 0xca, 0x36, 0x4c, 0x31, 0xaa, 0x74, + 0x47, 0x53, 0x1b, 0xf0, 0x79, 0x4f, 0x20, 0x79, 0xaa, 0x97, 0x79, 0xe2, 0xa0, 0x66, 0xf6, 0xe4, + 0x41, 0xcd, 0x00, 0x93, 0x93, 0xb9, 0xd3, 0x27, 0x27, 0x0f, 0x40, 0x65, 0x5c, 0x58, 0x4f, 0x95, + 0xfd, 0x05, 0x92, 0x8f, 0x9c, 0x17, 0x93, 0xd9, 0x07, 0x07, 0xd2, 0x90, 0x71, 0x87, 0xfd, 0xd4, + 0x15, 0xa4, 0xbd, 0x6f, 0xf8, 0x01, 0x5f, 0xa1, 0x05, 0x7c, 0x8c, 0x1f, 0x0d, 0x57, 0xc4, 0x8b, + 0x4c, 0x6d, 0x1e, 0x4d, 0x6d, 0x26, 0xa4, 0x7a, 0x8c, 0xf0, 0xd0, 0xe4, 0xb2, 0x4b, 0x98, 0xca, + 0x31, 0x25, 0xcc, 0xc7, 0x30, 0x8d, 0x9b, 0x44, 0x4f, 0x5b, 0x54, 0xc3, 0x0b, 0x59, 0xe2, 0xf7, + 0x35, 0xcc, 0x7c, 0x7d, 0x92, 0xd2, 0xdf, 0x13, 0xe4, 0xa2, 0x76, 0xfd, 0x1c, 0xe6, 0x52, 0x7c, + 0xe3, 0x7f, 0x96, 0x58, 0x1c, 0x74, 0x1a, 0x9f, 0xe0, 0x1d, 0xfd, 0x6b, 0xa2, 0x21, 0xc9, 0x43, + 0x8a, 0xd4, 0x90, 0xe4, 0x11, 0x25, 0xdf, 0x90, 0xe4, 0x0b, 0x4a, 0xa5, 0xfa, 0xd7, 0x1c, 0x14, + 0x30, 0x5b, 0x3d, 0x25, 0x0a, 0x66, 0xc5, 0xa0, 0xf3, 0x99, 0x31, 0x68, 0x0d, 0x8a, 0x68, 0xa7, + 0x3c, 0x42, 0x0f, 0x0d, 0xfa, 0xf7, 0x45, 0x46, 0x24, 0x22, 0x50, 0xdc, 0x11, 0x49, 0xb8, 0x0f, + 0xfa, 0x16, 0xee, 0x83, 0x66, 0x41, 0x66, 0xfe, 0x2a, 0x6c, 0x20, 0xe5, 0xf1, 0xbb, 0x6e, 0x55, + 0xff, 0x26, 0x81, 0xba, 0x91, 0x98, 0x6c, 0x9d, 0x1e, 0xdf, 0xa3, 0xc6, 0x74, 0x76, 0x7c, 0x0f, + 0xe1, 0x89, 0xf8, 0x9e, 0xa5, 0x92, 0xa1, 0x4c, 0x95, 0xd4, 0x60, 0x42, 0x60, 0xc6, 0xf3, 0x2a, + 0xde, 0xfa, 0xe2, 0xa0, 0x58, 0x33, 0xeb, 0x32, 0x08, 0x0e, 0xa2, 0xd8, 0x64, 0x6d, 0x2f, 0x11, + 0xdc, 0x59, 0x3b, 0x2b, 0xb3, 0xb9, 0x29, 0x67, 0x37, 0x37, 0xe7, 0xa1, 0x10, 0x26, 0x78, 0x22, + 0x62, 0x87, 0x0b, 0x67, 0xfc, 0x1b, 0xd7, 0x27, 0xe1, 0xdf, 0xcf, 0x58, 0x94, 0xe4, 0xfe, 0xb9, + 0x88, 0xf9, 0xde, 0xd2, 0x31, 0x55, 0xc3, 0x23, 0x31, 0x11, 0xf0, 0x09, 0xf3, 0xdc, 0xe2, 0x8f, + 0x6a, 0xb1, 0x25, 0x2a, 0x47, 0xfa, 0x2a, 0xc2, 0x3e, 0x98, 0x92, 0xbc, 0x04, 0x6c, 0xd8, 0x0f, + 0xb3, 0xf9, 0xc4, 0xe8, 0x59, 0xe7, 0x13, 0x8c, 0xae, 0x2f, 0x13, 0x2e, 0xf7, 0x65, 0xc2, 0xe1, + 0x5f, 0x0f, 0xf3, 0x8a, 0x5c, 0xfd, 0x63, 0x0e, 0xc6, 0xf5, 0xf8, 0x34, 0xf3, 0x45, 0x19, 0x56, + 0x66, 0xe4, 0x1e, 0xca, 0xfe, 0x07, 0x44, 0xb6, 0xca, 0xa4, 0x6c, 0x95, 0x55, 0xff, 0x94, 0x03, + 0xd8, 0xc2, 0xa9, 0xea, 0x8b, 0x92, 0x3d, 0x99, 0x1b, 0x0e, 0xa5, 0x73, 0xc3, 0x6c, 0x71, 0xf3, + 0xd9, 0xe2, 0xa6, 0xfe, 0xf8, 0xc9, 0x9c, 0x96, 0xac, 0x14, 0xaa, 0x5f, 0xe6, 0x40, 0xde, 0xd8, + 0x27, 0xe6, 0x81, 0xdf, 0x6d, 0xa7, 0x0f, 0x31, 0x1c, 0x1d, 0xe2, 0x36, 0x8c, 0xec, 0xb6, 0x8c, + 0x43, 0xd7, 0x43, 0x91, 0xcb, 0xab, 0xd7, 0x4e, 0xae, 0x45, 0x04, 0xc7, 0x3b, 0x48, 0xa3, 0x73, + 0xda, 0xe8, 0xdf, 0xb7, 0x43, 0x58, 0xa4, 0xb1, 0x8f, 0xf5, 0x9f, 0x7f, 0xfd, 0x6d, 0xe5, 0xdc, + 0x37, 0xdf, 0x56, 0xce, 0xfd, 0xf0, 0x6d, 0x25, 0xf7, 0xe5, 0xb3, 0x4a, 0xee, 0xb7, 0xcf, 0x2a, + 0xb9, 0xbf, 0x3c, 0xab, 0xe4, 0xbe, 0x7e, 0x56, 0xc9, 0xfd, 0xe3, 0x59, 0x25, 0xf7, 0xcf, 0x67, + 0x95, 0x73, 0x3f, 0x3c, 0xab, 0xe4, 0xbe, 0xfa, 0xae, 0x72, 0xee, 0xeb, 0xef, 0x2a, 0xe7, 0xbe, + 0xf9, 0xae, 0x72, 0xee, 0xd3, 0x1b, 0x7b, 0x6e, 0x24, 0x83, 0xed, 0x1e, 0xff, 0xcf, 0xf4, 0x77, + 0x63, 0x9f, 0x3b, 0x23, 0xe8, 0x34, 0xaf, 0xff, 0x27, 0x00, 0x00, 0xff, 0xff, 0xac, 0x4e, 0x0e, + 0xb3, 0x3c, 0x31, 0x00, 0x00, } func (this *ShardInfo) Equal(that interface{}) bool { @@ -2751,6 +2796,21 @@ func (this *WorkflowExecutionInfo) Equal(that interface{}) bool { if this.SignalCount != that1.SignalCount { return false } + if this.ActivityCount != that1.ActivityCount { + return false + } + if this.ChildExecutionCount != that1.ChildExecutionCount { + return false + } + if this.UserTimerCount != that1.UserTimerCount { + return false + } + if this.RequestCancelExternalCount != that1.RequestCancelExternalCount { + return false + } + if this.SignalExternalCount != that1.SignalExternalCount { + return false + } if !this.AutoResetPoints.Equal(that1.AutoResetPoints) { return false } @@ -3660,7 +3720,7 @@ func (this *WorkflowExecutionInfo) GoString() string { if this == nil { return "nil" } - s := make([]string, 0, 64) + s := make([]string, 0, 69) 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") @@ -3705,6 +3765,11 @@ func (this *WorkflowExecutionInfo) GoString() string { s = append(s, "HasRetryPolicy: "+fmt.Sprintf("%#v", this.HasRetryPolicy)+",\n") s = append(s, "CronSchedule: "+fmt.Sprintf("%#v", this.CronSchedule)+",\n") s = append(s, "SignalCount: "+fmt.Sprintf("%#v", this.SignalCount)+",\n") + s = append(s, "ActivityCount: "+fmt.Sprintf("%#v", this.ActivityCount)+",\n") + s = append(s, "ChildExecutionCount: "+fmt.Sprintf("%#v", this.ChildExecutionCount)+",\n") + s = append(s, "UserTimerCount: "+fmt.Sprintf("%#v", this.UserTimerCount)+",\n") + s = append(s, "RequestCancelExternalCount: "+fmt.Sprintf("%#v", this.RequestCancelExternalCount)+",\n") + s = append(s, "SignalExternalCount: "+fmt.Sprintf("%#v", this.SignalExternalCount)+",\n") if this.AutoResetPoints != nil { s = append(s, "AutoResetPoints: "+fmt.Sprintf("%#v", this.AutoResetPoints)+",\n") } @@ -4177,6 +4242,41 @@ func (m *WorkflowExecutionInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.SignalExternalCount != 0 { + i = encodeVarintExecutions(dAtA, i, uint64(m.SignalExternalCount)) + i-- + dAtA[i] = 0x4 + i-- + dAtA[i] = 0xd8 + } + if m.RequestCancelExternalCount != 0 { + i = encodeVarintExecutions(dAtA, i, uint64(m.RequestCancelExternalCount)) + i-- + dAtA[i] = 0x4 + i-- + dAtA[i] = 0xd0 + } + if m.UserTimerCount != 0 { + i = encodeVarintExecutions(dAtA, i, uint64(m.UserTimerCount)) + i-- + dAtA[i] = 0x4 + i-- + dAtA[i] = 0xc8 + } + if m.ChildExecutionCount != 0 { + i = encodeVarintExecutions(dAtA, i, uint64(m.ChildExecutionCount)) + i-- + dAtA[i] = 0x4 + i-- + dAtA[i] = 0xc0 + } + if m.ActivityCount != 0 { + i = encodeVarintExecutions(dAtA, i, uint64(m.ActivityCount)) + i-- + dAtA[i] = 0x4 + i-- + dAtA[i] = 0xb8 + } if m.WorkflowTaskHistorySizeBytes != 0 { i = encodeVarintExecutions(dAtA, i, uint64(m.WorkflowTaskHistorySizeBytes)) i-- @@ -6309,6 +6409,21 @@ func (m *WorkflowExecutionInfo) Size() (n int) { if m.WorkflowTaskHistorySizeBytes != 0 { n += 2 + sovExecutions(uint64(m.WorkflowTaskHistorySizeBytes)) } + if m.ActivityCount != 0 { + n += 2 + sovExecutions(uint64(m.ActivityCount)) + } + if m.ChildExecutionCount != 0 { + n += 2 + sovExecutions(uint64(m.ChildExecutionCount)) + } + if m.UserTimerCount != 0 { + n += 2 + sovExecutions(uint64(m.UserTimerCount)) + } + if m.RequestCancelExternalCount != 0 { + n += 2 + sovExecutions(uint64(m.RequestCancelExternalCount)) + } + if m.SignalExternalCount != 0 { + n += 2 + sovExecutions(uint64(m.SignalExternalCount)) + } return n } @@ -7016,6 +7131,11 @@ func (this *WorkflowExecutionInfo) String() string { `WorkflowTaskType:` + fmt.Sprintf("%v", this.WorkflowTaskType) + `,`, `WorkflowTaskSuggestContinueAsNew:` + fmt.Sprintf("%v", this.WorkflowTaskSuggestContinueAsNew) + `,`, `WorkflowTaskHistorySizeBytes:` + fmt.Sprintf("%v", this.WorkflowTaskHistorySizeBytes) + `,`, + `ActivityCount:` + fmt.Sprintf("%v", this.ActivityCount) + `,`, + `ChildExecutionCount:` + fmt.Sprintf("%v", this.ChildExecutionCount) + `,`, + `UserTimerCount:` + fmt.Sprintf("%v", this.UserTimerCount) + `,`, + `RequestCancelExternalCount:` + fmt.Sprintf("%v", this.RequestCancelExternalCount) + `,`, + `SignalExternalCount:` + fmt.Sprintf("%v", this.SignalExternalCount) + `,`, `}`, }, "") return s @@ -9732,6 +9852,101 @@ func (m *WorkflowExecutionInfo) Unmarshal(dAtA []byte) error { break } } + case 71: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActivityCount", wireType) + } + m.ActivityCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutions + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ActivityCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 72: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ChildExecutionCount", wireType) + } + m.ChildExecutionCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutions + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ChildExecutionCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 73: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UserTimerCount", wireType) + } + m.UserTimerCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutions + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UserTimerCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 74: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RequestCancelExternalCount", wireType) + } + m.RequestCancelExternalCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutions + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RequestCancelExternalCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 75: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SignalExternalCount", wireType) + } + m.SignalExternalCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutions + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.SignalExternalCount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipExecutions(dAtA[iNdEx:]) diff --git a/common/metrics/metric_defs.go b/common/metrics/metric_defs.go index d538af7efee..5ec5fc94cc5 100644 --- a/common/metrics/metric_defs.go +++ b/common/metrics/metric_defs.go @@ -1403,14 +1403,22 @@ var ( ChildInfoSize = NewBytesHistogramDef("child_info_size") RequestCancelInfoSize = NewBytesHistogramDef("request_cancel_info_size") SignalInfoSize = NewBytesHistogramDef("signal_info_size") + SignalRequestIDSize = NewBytesHistogramDef("signal_request_id_size") BufferedEventsSize = NewBytesHistogramDef("buffered_events_size") ActivityInfoCount = NewDimensionlessHistogramDef("activity_info_count") TimerInfoCount = NewDimensionlessHistogramDef("timer_info_count") ChildInfoCount = NewDimensionlessHistogramDef("child_info_count") SignalInfoCount = NewDimensionlessHistogramDef("signal_info_count") RequestCancelInfoCount = NewDimensionlessHistogramDef("request_cancel_info_count") + SignalRequestIDCount = NewDimensionlessHistogramDef("signal_request_id_count") BufferedEventsCount = NewDimensionlessHistogramDef("buffered_events_count") TaskCount = NewDimensionlessHistogramDef("task_count") + TotalActivityCount = NewDimensionlessHistogramDef("total_activity_count") + TotalUserTimerCount = NewDimensionlessHistogramDef("total_user_timer_count") + TotalChildExecutionCount = NewDimensionlessHistogramDef("total_child_execution_count") + TotalRequestCancelExternalCount = NewDimensionlessHistogramDef("total_request_cancel_external_count") + TotalSignalExternalCount = NewDimensionlessHistogramDef("total_signal_external_count") + TotalSignalCount = NewDimensionlessHistogramDef("total_signal_count") WorkflowRetryBackoffTimerCount = NewCounterDef("workflow_retry_backoff_timer") WorkflowCronBackoffTimerCount = NewCounterDef("workflow_cron_backoff_timer") WorkflowCleanupDeleteCount = NewCounterDef("workflow_cleanup_delete") diff --git a/common/persistence/dataInterfaces.go b/common/persistence/dataInterfaces.go index 6c54d995014..940551f93b8 100644 --- a/common/persistence/dataInterfaces.go +++ b/common/persistence/dataInterfaces.go @@ -692,6 +692,14 @@ type ( SignalRequestIDCount int BufferedEventsCount int TaskCountByCategory map[string]int + + // Total item count for various information captured within mutable state + TotalActivityCount int64 + TotalUserTimerCount int64 + TotalChildExecutionCount int64 + TotalRequestCancelExternalCount int64 + TotalSignalExternalCount int64 + TotalSignalCount int64 } HistoryStatistics struct { diff --git a/common/persistence/execution_manager.go b/common/persistence/execution_manager.go index dbefac767ec..08fed32b767 100644 --- a/common/persistence/execution_manager.go +++ b/common/persistence/execution_manager.go @@ -363,7 +363,7 @@ func (m *executionManagerImpl) GetWorkflowExecution( newResponse := &GetWorkflowExecutionResponse{ State: state, DBRecordVersion: response.DBRecordVersion, - MutableStateStats: *statusOfInternalWorkflow(response.State, nil), + MutableStateStats: *statusOfInternalWorkflow(response.State, state, nil), } return newResponse, nil } diff --git a/common/persistence/size.go b/common/persistence/size.go index 99c22ceeab2..f21cbe2ec26 100644 --- a/common/persistence/size.go +++ b/common/persistence/size.go @@ -24,39 +24,49 @@ package persistence -import "go.temporal.io/server/service/history/tasks" +import ( + persistencespb "go.temporal.io/server/api/persistence/v1" + "go.temporal.io/server/service/history/tasks" +) func statusOfInternalWorkflow( - state *InternalWorkflowMutableState, + internalState *InternalWorkflowMutableState, + state *persistencespb.WorkflowMutableState, historyStatistics *HistoryStatistics, ) *MutableStateStatistics { - if state == nil { + if internalState == nil { return nil } - executionInfoSize := sizeOfBlob(state.ExecutionInfo) - executionStateSize := sizeOfBlob(state.ExecutionState) + executionInfoSize := sizeOfBlob(internalState.ExecutionInfo) + executionStateSize := sizeOfBlob(internalState.ExecutionState) - activityInfoCount := len(state.ActivityInfos) - activityInfoSize := sizeOfInt64BlobMap(state.ActivityInfos) + totalActivityCount := state.ExecutionInfo.ActivityCount + activityInfoCount := len(internalState.ActivityInfos) + activityInfoSize := sizeOfInt64BlobMap(internalState.ActivityInfos) - timerInfoCount := len(state.TimerInfos) - timerInfoSize := sizeOfStringBlobMap(state.TimerInfos) + totalUserTimerCount := state.ExecutionInfo.UserTimerCount + timerInfoCount := len(internalState.TimerInfos) + timerInfoSize := sizeOfStringBlobMap(internalState.TimerInfos) - childExecutionInfoCount := len(state.ChildExecutionInfos) - childExecutionInfoSize := sizeOfInt64BlobMap(state.ChildExecutionInfos) + totalChildExecutionCount := state.ExecutionInfo.ChildExecutionCount + childExecutionInfoCount := len(internalState.ChildExecutionInfos) + childExecutionInfoSize := sizeOfInt64BlobMap(internalState.ChildExecutionInfos) - requestCancelInfoCount := len(state.RequestCancelInfos) - requestCancelInfoSize := sizeOfInt64BlobMap(state.RequestCancelInfos) + totalRequestCancelExternalCount := state.ExecutionInfo.RequestCancelExternalCount + requestCancelInfoCount := len(internalState.RequestCancelInfos) + requestCancelInfoSize := sizeOfInt64BlobMap(internalState.RequestCancelInfos) - signalInfoCount := len(state.SignalInfos) - signalInfoSize := sizeOfInt64BlobMap(state.SignalInfos) + totalSignalExternalCount := state.ExecutionInfo.SignalExternalCount + signalInfoCount := len(internalState.SignalInfos) + signalInfoSize := sizeOfInt64BlobMap(internalState.SignalInfos) - signalRequestIDCount := len(state.SignalRequestedIDs) - signalRequestIDSize := sizeOfStringSlice(state.SignalRequestedIDs) + totalSignalCount := state.ExecutionInfo.SignalCount + signalRequestIDCount := len(internalState.SignalRequestedIDs) + signalRequestIDSize := sizeOfStringSlice(internalState.SignalRequestedIDs) - bufferedEventsCount := len(state.BufferedEvents) - bufferedEventsSize := sizeOfBlobSlice(state.BufferedEvents) + bufferedEventsCount := len(internalState.BufferedEvents) + bufferedEventsSize := sizeOfBlobSlice(internalState.BufferedEvents) totalSize := executionInfoSize totalSize += executionStateSize @@ -75,23 +85,29 @@ func statusOfInternalWorkflow( ExecutionInfoSize: executionInfoSize, ExecutionStateSize: executionStateSize, - ActivityInfoSize: activityInfoSize, - ActivityInfoCount: activityInfoCount, + ActivityInfoSize: activityInfoSize, + ActivityInfoCount: activityInfoCount, + TotalActivityCount: totalActivityCount, - TimerInfoSize: timerInfoSize, - TimerInfoCount: timerInfoCount, + TimerInfoSize: timerInfoSize, + TimerInfoCount: timerInfoCount, + TotalUserTimerCount: totalUserTimerCount, - ChildInfoSize: childExecutionInfoSize, - ChildInfoCount: childExecutionInfoCount, + ChildInfoSize: childExecutionInfoSize, + ChildInfoCount: childExecutionInfoCount, + TotalChildExecutionCount: totalChildExecutionCount, - RequestCancelInfoSize: requestCancelInfoSize, - RequestCancelInfoCount: requestCancelInfoCount, + RequestCancelInfoSize: requestCancelInfoSize, + RequestCancelInfoCount: requestCancelInfoCount, + TotalRequestCancelExternalCount: totalRequestCancelExternalCount, - SignalInfoSize: signalInfoSize, - SignalInfoCount: signalInfoCount, + SignalInfoSize: signalInfoSize, + SignalInfoCount: signalInfoCount, + TotalSignalExternalCount: totalSignalExternalCount, SignalRequestIDSize: signalRequestIDSize, SignalRequestIDCount: signalRequestIDCount, + TotalSignalCount: totalSignalCount, BufferedEventsSize: bufferedEventsSize, BufferedEventsCount: bufferedEventsCount, @@ -109,31 +125,37 @@ func statusOfInternalWorkflowMutation( executionInfoSize := sizeOfBlob(mutation.ExecutionInfoBlob) executionStateSize := sizeOfBlob(mutation.ExecutionStateBlob) + totalActivityCount := mutation.ExecutionInfo.ActivityCount activityInfoCount := len(mutation.UpsertActivityInfos) activityInfoCount += len(mutation.DeleteActivityInfos) activityInfoSize := sizeOfInt64BlobMap(mutation.UpsertActivityInfos) activityInfoSize += sizeOfInt64Set(mutation.DeleteActivityInfos) + totalUserTimerCount := mutation.ExecutionInfo.UserTimerCount timerInfoCount := len(mutation.UpsertTimerInfos) timerInfoCount += len(mutation.DeleteTimerInfos) timerInfoSize := sizeOfStringBlobMap(mutation.UpsertTimerInfos) timerInfoSize += sizeOfStringSet(mutation.DeleteTimerInfos) + totalChildExecutionCount := mutation.ExecutionInfo.ChildExecutionCount childExecutionInfoCount := len(mutation.UpsertChildExecutionInfos) childExecutionInfoCount += len(mutation.DeleteChildExecutionInfos) childExecutionInfoSize := sizeOfInt64BlobMap(mutation.UpsertChildExecutionInfos) childExecutionInfoSize += sizeOfInt64Set(mutation.DeleteChildExecutionInfos) + totalRequestCancelExternalCount := mutation.ExecutionInfo.RequestCancelExternalCount requestCancelInfoCount := len(mutation.UpsertRequestCancelInfos) requestCancelInfoCount += len(mutation.DeleteRequestCancelInfos) requestCancelInfoSize := sizeOfInt64BlobMap(mutation.UpsertRequestCancelInfos) requestCancelInfoSize += sizeOfInt64Set(mutation.DeleteRequestCancelInfos) + totalSignalExternalCount := mutation.ExecutionInfo.SignalExternalCount signalInfoCount := len(mutation.UpsertSignalInfos) signalInfoCount += len(mutation.DeleteSignalInfos) signalInfoSize := sizeOfInt64BlobMap(mutation.UpsertSignalInfos) signalInfoSize += sizeOfInt64Set(mutation.DeleteSignalInfos) + totalSignalCount := mutation.ExecutionInfo.SignalCount signalRequestIDCount := len(mutation.UpsertSignalRequestedIDs) signalRequestIDCount += len(mutation.DeleteSignalRequestedIDs) signalRequestIDSize := sizeOfStringSet(mutation.UpsertSignalRequestedIDs) @@ -167,23 +189,29 @@ func statusOfInternalWorkflowMutation( ExecutionInfoSize: executionInfoSize, ExecutionStateSize: executionStateSize, - ActivityInfoSize: activityInfoSize, - ActivityInfoCount: activityInfoCount, + ActivityInfoSize: activityInfoSize, + ActivityInfoCount: activityInfoCount, + TotalActivityCount: totalActivityCount, - TimerInfoSize: timerInfoSize, - TimerInfoCount: timerInfoCount, + TimerInfoSize: timerInfoSize, + TimerInfoCount: timerInfoCount, + TotalUserTimerCount: totalUserTimerCount, - ChildInfoSize: childExecutionInfoSize, - ChildInfoCount: childExecutionInfoCount, + ChildInfoSize: childExecutionInfoSize, + ChildInfoCount: childExecutionInfoCount, + TotalChildExecutionCount: totalChildExecutionCount, - RequestCancelInfoSize: requestCancelInfoSize, - RequestCancelInfoCount: requestCancelInfoCount, + RequestCancelInfoSize: requestCancelInfoSize, + RequestCancelInfoCount: requestCancelInfoCount, + TotalRequestCancelExternalCount: totalRequestCancelExternalCount, - SignalInfoSize: signalInfoSize, - SignalInfoCount: signalInfoCount, + SignalInfoSize: signalInfoSize, + SignalInfoCount: signalInfoCount, + TotalSignalExternalCount: totalSignalExternalCount, SignalRequestIDSize: signalRequestIDSize, SignalRequestIDCount: signalRequestIDCount, + TotalSignalCount: totalSignalCount, BufferedEventsSize: bufferedEventsSize, BufferedEventsCount: bufferedEventsCount, @@ -211,21 +239,27 @@ func statusOfInternalWorkflowSnapshot( executionInfoSize := sizeOfBlob(snapshot.ExecutionInfoBlob) executionStateSize := sizeOfBlob(snapshot.ExecutionStateBlob) + totalActivityCount := snapshot.ExecutionInfo.ActivityCount activityInfoCount := len(snapshot.ActivityInfos) activityInfoSize := sizeOfInt64BlobMap(snapshot.ActivityInfos) + totalUserTimerCount := snapshot.ExecutionInfo.UserTimerCount timerInfoCount := len(snapshot.TimerInfos) timerInfoSize := sizeOfStringBlobMap(snapshot.TimerInfos) + totalChildExecutionCount := snapshot.ExecutionInfo.ChildExecutionCount childExecutionInfoCount := len(snapshot.ChildExecutionInfos) childExecutionInfoSize := sizeOfInt64BlobMap(snapshot.ChildExecutionInfos) + totalRequestCancelExternalCount := snapshot.ExecutionInfo.RequestCancelExternalCount requestCancelInfoCount := len(snapshot.RequestCancelInfos) requestCancelInfoSize := sizeOfInt64BlobMap(snapshot.RequestCancelInfos) + totalSignalExternalCount := snapshot.ExecutionInfo.SignalExternalCount signalInfoCount := len(snapshot.SignalInfos) signalInfoSize := sizeOfInt64BlobMap(snapshot.SignalInfos) + totalSignalCount := snapshot.ExecutionInfo.SignalCount signalRequestIDCount := len(snapshot.SignalRequestedIDs) signalRequestIDSize := sizeOfStringSet(snapshot.SignalRequestedIDs) @@ -251,23 +285,29 @@ func statusOfInternalWorkflowSnapshot( ExecutionInfoSize: executionInfoSize, ExecutionStateSize: executionStateSize, - ActivityInfoSize: activityInfoSize, - ActivityInfoCount: activityInfoCount, + ActivityInfoSize: activityInfoSize, + ActivityInfoCount: activityInfoCount, + TotalActivityCount: totalActivityCount, - TimerInfoSize: timerInfoSize, - TimerInfoCount: timerInfoCount, + TimerInfoSize: timerInfoSize, + TimerInfoCount: timerInfoCount, + TotalUserTimerCount: totalUserTimerCount, - ChildInfoSize: childExecutionInfoSize, - ChildInfoCount: childExecutionInfoCount, + ChildInfoSize: childExecutionInfoSize, + ChildInfoCount: childExecutionInfoCount, + TotalChildExecutionCount: totalChildExecutionCount, - RequestCancelInfoSize: requestCancelInfoSize, - RequestCancelInfoCount: requestCancelInfoCount, + RequestCancelInfoSize: requestCancelInfoSize, + RequestCancelInfoCount: requestCancelInfoCount, + TotalRequestCancelExternalCount: totalRequestCancelExternalCount, - SignalInfoSize: signalInfoSize, - SignalInfoCount: signalInfoCount, + SignalInfoSize: signalInfoSize, + SignalInfoCount: signalInfoCount, + TotalSignalExternalCount: totalSignalExternalCount, SignalRequestIDSize: signalRequestIDSize, SignalRequestIDCount: signalRequestIDCount, + TotalSignalCount: totalSignalCount, BufferedEventsSize: bufferedEventsSize, BufferedEventsCount: bufferedEventsCount, diff --git a/proto/internal/temporal/server/api/checksum/v1/message.proto b/proto/internal/temporal/server/api/checksum/v1/message.proto index 0d12ebe315b..371a743e971 100644 --- a/proto/internal/temporal/server/api/checksum/v1/message.proto +++ b/proto/internal/temporal/server/api/checksum/v1/message.proto @@ -39,7 +39,13 @@ message MutableStateChecksumPayload { int64 last_first_event_id = 6; int64 next_event_id = 7; int64 last_processed_event_id = 8; + int64 signal_count = 9; + int64 activity_count = 21; + int64 child_execution_count = 22; + int64 user_timer_count = 23; + int64 request_cancel_external_count = 24; + int64 signal_external_count = 25; int32 workflow_task_attempt = 10; int64 workflow_task_version = 11; @@ -54,4 +60,5 @@ message MutableStateChecksumPayload { string sticky_task_queue_name = 19; temporal.server.api.history.v1.VersionHistories version_histories = 20; + } diff --git a/proto/internal/temporal/server/api/persistence/v1/executions.proto b/proto/internal/temporal/server/api/persistence/v1/executions.proto index 8235da9260f..50bc2ad3bd6 100644 --- a/proto/internal/temporal/server/api/persistence/v1/executions.proto +++ b/proto/internal/temporal/server/api/persistence/v1/executions.proto @@ -121,6 +121,11 @@ message WorkflowExecutionInfo { reserved 44; reserved 45; int64 signal_count = 46; + int64 activity_count = 71; + int64 child_execution_count = 72; + int64 user_timer_count = 73; + int64 request_cancel_external_count = 74; + int64 signal_external_count = 75; reserved 47; reserved 48; reserved 49; diff --git a/service/history/workflow/checksum.go b/service/history/workflow/checksum.go index 9a55c296058..30ff9ec4e81 100644 --- a/service/history/workflow/checksum.go +++ b/service/history/workflow/checksum.go @@ -67,6 +67,11 @@ func newMutableStateChecksumPayload(ms MutableState) *checksumspb.MutableStateCh LastFirstEventId: executionInfo.LastFirstEventId, NextEventId: ms.GetNextEventID(), LastProcessedEventId: executionInfo.LastWorkflowTaskStartedEventId, + ActivityCount: executionInfo.ActivityCount, + ChildExecutionCount: executionInfo.ChildExecutionCount, + UserTimerCount: executionInfo.UserTimerCount, + RequestCancelExternalCount: executionInfo.RequestCancelExternalCount, + SignalExternalCount: executionInfo.SignalExternalCount, SignalCount: executionInfo.SignalCount, WorkflowTaskAttempt: executionInfo.WorkflowTaskAttempt, WorkflowTaskScheduledEventId: executionInfo.WorkflowTaskScheduledEventId, diff --git a/service/history/workflow/metrics.go b/service/history/workflow/metrics.go index a4e5ffc99bf..890646e481b 100644 --- a/service/history/workflow/metrics.go +++ b/service/history/workflow/metrics.go @@ -57,14 +57,22 @@ func emitMutableStateStatus( metricsHandler.Histogram(metrics.ExecutionStateSize.GetMetricName(), metrics.ExecutionStateSize.GetMetricUnit()).Record(int64(stats.ExecutionStateSize)) metricsHandler.Histogram(metrics.ActivityInfoSize.GetMetricName(), metrics.ActivityInfoSize.GetMetricUnit()).Record(int64(stats.ActivityInfoSize)) metricsHandler.Histogram(metrics.ActivityInfoCount.GetMetricName(), metrics.ActivityInfoCount.GetMetricUnit()).Record(int64(stats.ActivityInfoCount)) + metricsHandler.Histogram(metrics.TotalActivityCount.GetMetricName(), metrics.TotalActivityCount.GetMetricUnit()).Record(stats.TotalActivityCount) metricsHandler.Histogram(metrics.TimerInfoSize.GetMetricName(), metrics.TimerInfoSize.GetMetricUnit()).Record(int64(stats.TimerInfoSize)) metricsHandler.Histogram(metrics.TimerInfoCount.GetMetricName(), metrics.TimerInfoCount.GetMetricUnit()).Record(int64(stats.TimerInfoCount)) + metricsHandler.Histogram(metrics.TotalUserTimerCount.GetMetricName(), metrics.TotalUserTimerCount.GetMetricUnit()).Record(stats.TotalUserTimerCount) metricsHandler.Histogram(metrics.ChildInfoSize.GetMetricName(), metrics.ChildInfoSize.GetMetricUnit()).Record(int64(stats.ChildInfoSize)) metricsHandler.Histogram(metrics.ChildInfoCount.GetMetricName(), metrics.ChildInfoCount.GetMetricUnit()).Record(int64(stats.ChildInfoCount)) + metricsHandler.Histogram(metrics.TotalChildExecutionCount.GetMetricName(), metrics.TotalChildExecutionCount.GetMetricUnit()).Record(stats.TotalChildExecutionCount) metricsHandler.Histogram(metrics.RequestCancelInfoSize.GetMetricName(), metrics.RequestCancelInfoSize.GetMetricUnit()).Record(int64(stats.RequestCancelInfoSize)) metricsHandler.Histogram(metrics.RequestCancelInfoCount.GetMetricName(), metrics.RequestCancelInfoCount.GetMetricUnit()).Record(int64(stats.RequestCancelInfoCount)) + metricsHandler.Histogram(metrics.TotalRequestCancelExternalCount.GetMetricName(), metrics.TotalRequestCancelExternalCount.GetMetricUnit()).Record(stats.TotalRequestCancelExternalCount) metricsHandler.Histogram(metrics.SignalInfoSize.GetMetricName(), metrics.SignalInfoSize.GetMetricUnit()).Record(int64(stats.SignalInfoSize)) metricsHandler.Histogram(metrics.SignalInfoCount.GetMetricName(), metrics.SignalInfoCount.GetMetricUnit()).Record(int64(stats.SignalInfoCount)) + metricsHandler.Histogram(metrics.TotalSignalExternalCount.GetMetricName(), metrics.TotalSignalExternalCount.GetMetricUnit()).Record(stats.TotalSignalExternalCount) + metricsHandler.Histogram(metrics.SignalRequestIDSize.GetMetricName(), metrics.SignalRequestIDSize.GetMetricUnit()).Record(int64(stats.SignalRequestIDSize)) + metricsHandler.Histogram(metrics.SignalRequestIDCount.GetMetricName(), metrics.SignalRequestIDCount.GetMetricUnit()).Record(int64(stats.SignalRequestIDCount)) + metricsHandler.Histogram(metrics.TotalSignalCount.GetMetricName(), metrics.TotalSignalCount.GetMetricUnit()).Record(stats.TotalSignalCount) metricsHandler.Histogram(metrics.BufferedEventsSize.GetMetricName(), metrics.BufferedEventsSize.GetMetricUnit()).Record(int64(stats.BufferedEventsSize)) metricsHandler.Histogram(metrics.BufferedEventsCount.GetMetricName(), metrics.BufferedEventsCount.GetMetricUnit()).Record(int64(stats.BufferedEventsCount)) diff --git a/service/history/workflow/mutable_state_impl.go b/service/history/workflow/mutable_state_impl.go index fb6a39307bc..784ade9a2df 100644 --- a/service/history/workflow/mutable_state_impl.go +++ b/service/history/workflow/mutable_state_impl.go @@ -2056,6 +2056,7 @@ func (ms *MutableStateImpl) ReplicateActivityTaskScheduledEvent( ms.pendingActivityInfoIDs[ai.ScheduledEventId] = ai ms.pendingActivityIDToEventID[ai.ActivityId] = ai.ScheduledEventId ms.updateActivityInfos[ai.ScheduledEventId] = ai + ms.executionInfo.ActivityCount++ ms.writeEventToCache(event) return ai, nil @@ -2688,6 +2689,7 @@ func (ms *MutableStateImpl) ReplicateRequestCancelExternalWorkflowExecutionIniti ms.pendingRequestCancelInfoIDs[rci.InitiatedEventId] = rci ms.updateRequestCancelInfos[rci.InitiatedEventId] = rci + ms.executionInfo.RequestCancelExternalCount++ ms.writeEventToCache(event) return rci, nil @@ -2827,6 +2829,7 @@ func (ms *MutableStateImpl) ReplicateSignalExternalWorkflowExecutionInitiatedEve ms.pendingSignalInfoIDs[si.InitiatedEventId] = si ms.updateSignalInfos[si.InitiatedEventId] = si + ms.executionInfo.SignalExternalCount++ ms.writeEventToCache(event) return si, nil @@ -3031,6 +3034,7 @@ func (ms *MutableStateImpl) ReplicateTimerStartedEvent( ms.pendingTimerInfoIDs[ti.TimerId] = ti ms.pendingTimerEventIDToID[ti.StartedEventId] = ti.TimerId ms.updateTimerInfos[ti.TimerId] = ti + ms.executionInfo.UserTimerCount++ return ti, nil } @@ -3421,6 +3425,7 @@ func (ms *MutableStateImpl) ReplicateStartChildWorkflowExecutionInitiatedEvent( ms.pendingChildExecutionInfoIDs[ci.InitiatedEventId] = ci ms.updateChildExecutionInfos[ci.InitiatedEventId] = ci + ms.executionInfo.ChildExecutionCount++ ms.writeEventToCache(event) return ci, nil diff --git a/service/history/workflow/mutable_state_impl_test.go b/service/history/workflow/mutable_state_impl_test.go index 2df9128b713..e51c340cbce 100644 --- a/service/history/workflow/mutable_state_impl_test.go +++ b/service/history/workflow/mutable_state_impl_test.go @@ -33,6 +33,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" "github.com/uber-go/tally/v4" + commandpb "go.temporal.io/api/command/v1" commonpb "go.temporal.io/api/common/v1" enumspb "go.temporal.io/api/enums/v1" historypb "go.temporal.io/api/history/v1" @@ -834,3 +835,80 @@ func (s *mutableStateSuite) TestReplicateActivityTaskStartedEvent() { s.Assert().Equal(requestID, ai.RequestId) s.Assert().Nil(ai.LastHeartbeatDetails) } + +func (s *mutableStateSuite) TestTotalEntitiesCount() { + mutableState := TestLocalMutableState( + s.mockShard, + s.mockEventsCache, + s.newNamespaceCacheEntry(), + s.logger, + uuid.New(), + ) + s.mockEventsCache.EXPECT().PutEvent(gomock.Any(), gomock.Any()).AnyTimes() + + // scheduling, starting & completing workflow task is omitted here + + workflowTaskCompletedEventID := int64(4) + _, _, err := mutableState.AddActivityTaskScheduledEvent( + workflowTaskCompletedEventID, + &commandpb.ScheduleActivityTaskCommandAttributes{}, + false, + ) + s.NoError(err) + + _, _, err = mutableState.AddStartChildWorkflowExecutionInitiatedEvent( + workflowTaskCompletedEventID, + uuid.New(), + &commandpb.StartChildWorkflowExecutionCommandAttributes{}, + namespace.ID(uuid.New()), + ) + s.NoError(err) + + _, _, err = mutableState.AddTimerStartedEvent( + workflowTaskCompletedEventID, + &commandpb.StartTimerCommandAttributes{}, + ) + s.NoError(err) + + _, _, err = mutableState.AddRequestCancelExternalWorkflowExecutionInitiatedEvent( + workflowTaskCompletedEventID, + uuid.New(), + &commandpb.RequestCancelExternalWorkflowExecutionCommandAttributes{}, + namespace.ID(uuid.New()), + ) + s.NoError(err) + + _, _, err = mutableState.AddSignalExternalWorkflowExecutionInitiatedEvent( + workflowTaskCompletedEventID, + uuid.New(), + &commandpb.SignalExternalWorkflowExecutionCommandAttributes{ + Execution: &commonpb.WorkflowExecution{ + WorkflowId: tests.WorkflowID, + RunId: tests.RunID, + }, + }, + namespace.ID(uuid.New()), + ) + s.NoError(err) + + _, err = mutableState.AddWorkflowExecutionSignaled( + "signalName", + &commonpb.Payloads{}, + "identity", + &commonpb.Header{}, + ) + s.NoError(err) + + mutation, _, err := mutableState.CloseTransactionAsMutation( + s.mockShard.GetTimeSource().Now(), + TransactionPolicyActive, + ) + s.NoError(err) + + s.Equal(int64(1), mutation.ExecutionInfo.ActivityCount) + s.Equal(int64(1), mutation.ExecutionInfo.ChildExecutionCount) + s.Equal(int64(1), mutation.ExecutionInfo.UserTimerCount) + s.Equal(int64(1), mutation.ExecutionInfo.RequestCancelExternalCount) + s.Equal(int64(1), mutation.ExecutionInfo.SignalExternalCount) + s.Equal(int64(1), mutation.ExecutionInfo.SignalCount) +} From 6974ed355e427123042518fe82acb012382f8938 Mon Sep 17 00:00:00 2001 From: Yichao Yang Date: Wed, 22 Mar 2023 11:46:46 -0700 Subject: [PATCH 2/7] Fix namespace handover replication queue notification (#4082) --- service/history/shard/context_impl.go | 9 ++++- service/history/shard/context_test.go | 53 +++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/service/history/shard/context_impl.go b/service/history/shard/context_impl.go index 9ceb0cda712..3509bb17477 100644 --- a/service/history/shard/context_impl.go +++ b/service/history/shard/context_impl.go @@ -576,7 +576,14 @@ func (s *ContextImpl) UpdateHandoverNamespace(ns *namespace.Namespace, deletedFr } s.wUnlock() - s.notifyReplicationQueueProcessor(maxReplicationTaskID) + + if maxReplicationTaskID != pendingMaxReplicationTaskID { + // notification is for making sure replication queue is able to + // ack to the recorded taskID. If the taskID is pending, then + // don't notify. Otherwise, replication queue will think (for a period of time) + // that the max generated taskID is pendingMaxReplicationTaskID which is MaxInt64. + s.notifyReplicationQueueProcessor(maxReplicationTaskID) + } } func (s *ContextImpl) AddTasks( diff --git a/service/history/shard/context_test.go b/service/history/shard/context_test.go index 1f3af63a1c5..ca9608f9616 100644 --- a/service/history/shard/context_test.go +++ b/service/history/shard/context_test.go @@ -35,6 +35,7 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "go.temporal.io/api/enums/v1" persistencespb "go.temporal.io/server/api/persistence/v1" "go.temporal.io/server/common/backoff" @@ -393,3 +394,55 @@ func (s *contextSuite) TestAcquireShardNoError() { s.Assert().Equal(contextStateAcquired, s.mockShard.state) } + +func (s *contextSuite) TestHandoverNamespace() { + s.mockHistoryEngine.EXPECT().NotifyNewTasks(gomock.Any()).Times(1) + + namespaceEntry := namespace.NewGlobalNamespaceForTest( + &persistencespb.NamespaceInfo{Id: tests.NamespaceID.String(), Name: tests.Namespace.String()}, + &persistencespb.NamespaceConfig{ + Retention: timestamp.DurationFromDays(1), + }, + &persistencespb.NamespaceReplicationConfig{ + ActiveClusterName: cluster.TestCurrentClusterName, + Clusters: []string{ + cluster.TestCurrentClusterName, + cluster.TestAlternativeClusterName, + }, + State: enums.REPLICATION_STATE_HANDOVER, + }, + tests.Version, + ) + s.mockShard.UpdateHandoverNamespace(namespaceEntry, false) + _, handoverNS, err := s.mockShard.GetReplicationStatus([]string{}) + s.NoError(err) + + handoverInfo, ok := handoverNS[namespaceEntry.Name().String()] + s.True(ok) + s.Equal(s.mockShard.immediateTaskExclusiveMaxReadLevel-1, handoverInfo.HandoverReplicationTaskId) + + // make shard status invalid + // ideally we should use s.mockShard.transition() method + // but that will cause shard trying to re-acquire the shard in the background + s.mockShard.stateLock.Lock() + s.mockShard.state = contextStateAcquiring + s.mockShard.stateLock.Unlock() + + // note: no mock for NotifyNewTasks + + s.mockShard.UpdateHandoverNamespace(namespaceEntry, false) + _, handoverNS, err = s.mockShard.GetReplicationStatus([]string{}) + s.NoError(err) + + handoverInfo, ok = handoverNS[namespaceEntry.Name().String()] + s.True(ok) + s.Equal(s.mockShard.immediateTaskExclusiveMaxReadLevel-1, handoverInfo.HandoverReplicationTaskId) + + // delete namespace + s.mockShard.UpdateHandoverNamespace(namespaceEntry, true) + _, handoverNS, err = s.mockShard.GetReplicationStatus([]string{}) + s.NoError(err) + + _, ok = handoverNS[namespaceEntry.Name().String()] + s.False(ok) +} From 22522bf9549432d13e39488e72179ae505a3b224 Mon Sep 17 00:00:00 2001 From: wxing1292 Date: Wed, 22 Mar 2023 12:14:45 -0700 Subject: [PATCH 3/7] Use more reliable workflow mutation check (#4076) * Make workflow mutation check more reliable Namespace migration breaks one of the assumption of XDC XDC assumes there will be no case which a namespace has only one cluster & the cluster is not itself, apparently namespace migration can break this assumption --- service/history/historyEngine2_test.go | 2 +- .../history/workflow/mutable_state_impl.go | 111 +++++++++--------- service/history/workflow/task_generator.go | 6 +- .../history/workflow/task_generator_mock.go | 8 +- 4 files changed, 67 insertions(+), 60 deletions(-) diff --git a/service/history/historyEngine2_test.go b/service/history/historyEngine2_test.go index 2bf20fe1aa8..ebf08e3485c 100644 --- a/service/history/historyEngine2_test.go +++ b/service/history/historyEngine2_test.go @@ -149,7 +149,7 @@ func (s *engine2Suite) SetupTest() { s.mockClusterMetadata = s.mockShard.Resource.ClusterMetadata s.mockEventsCache = s.mockShard.MockEventsCache - s.mockNamespaceCache.EXPECT().GetNamespaceByID(tests.NamespaceID).Return(tests.LocalNamespaceEntry, nil).AnyTimes() + s.mockNamespaceCache.EXPECT().GetNamespaceByID(tests.NamespaceID).Return(tests.GlobalNamespaceEntry, nil).AnyTimes() s.mockNamespaceCache.EXPECT().GetNamespaceByID(tests.ParentNamespaceID).Return(tests.GlobalParentNamespaceEntry, nil).AnyTimes() s.mockNamespaceCache.EXPECT().GetNamespace(tests.ChildNamespace).Return(tests.GlobalChildNamespaceEntry, nil).AnyTimes() s.mockEventsCache.EXPECT().PutEvent(gomock.Any(), gomock.Any()).AnyTimes() diff --git a/service/history/workflow/mutable_state_impl.go b/service/history/workflow/mutable_state_impl.go index 784ade9a2df..6ac6bc6d953 100644 --- a/service/history/workflow/mutable_state_impl.go +++ b/service/history/workflow/mutable_state_impl.go @@ -4230,21 +4230,17 @@ func (ms *MutableStateImpl) eventsToReplicationTask( transactionPolicy TransactionPolicy, events []*historypb.HistoryEvent, ) error { - - if transactionPolicy == TransactionPolicyPassive || - !ms.canReplicateEvents() || - len(events) == 0 { + switch transactionPolicy { + case TransactionPolicyActive: + if ms.generateReplicationTask() { + return ms.taskGenerator.GenerateHistoryReplicationTasks(events) + } return nil + case TransactionPolicyPassive: + return nil + default: + panic(fmt.Sprintf("unknown transaction policy: %v", transactionPolicy)) } - - currentBranchToken, err := ms.GetCurrentBranchToken() - if err != nil { - return err - } - return ms.taskGenerator.GenerateHistoryReplicationTasks( - currentBranchToken, - events, - ) } func (ms *MutableStateImpl) syncActivityToReplicationTask( @@ -4252,21 +4248,26 @@ func (ms *MutableStateImpl) syncActivityToReplicationTask( transactionPolicy TransactionPolicy, ) []tasks.Task { - if transactionPolicy == TransactionPolicyPassive || - !ms.canReplicateEvents() { + switch transactionPolicy { + case TransactionPolicyActive: + if ms.generateReplicationTask() { + return convertSyncActivityInfos( + now, + definition.NewWorkflowKey( + ms.executionInfo.NamespaceId, + ms.executionInfo.WorkflowId, + ms.executionState.RunId, + ), + ms.pendingActivityInfoIDs, + ms.syncActivityTasks, + ) + } + return nil + case TransactionPolicyPassive: return emptyTasks + default: + panic(fmt.Sprintf("unknown transaction policy: %v", transactionPolicy)) } - - return convertSyncActivityInfos( - now, - definition.NewWorkflowKey( - ms.executionInfo.NamespaceId, - ms.executionInfo.WorkflowId, - ms.executionState.RunId, - ), - ms.pendingActivityInfoIDs, - ms.syncActivityTasks, - ) } func (ms *MutableStateImpl) updatePendingEventIDs( @@ -4310,10 +4311,6 @@ func (ms *MutableStateImpl) updateWithLastWriteEvent( return nil } -func (ms *MutableStateImpl) canReplicateEvents() bool { - return ms.namespaceEntry.ReplicationPolicy() == namespace.ReplicationPolicyMultiCluster -} - // validateNoEventsAfterWorkflowFinish perform check on history event batch // NOTE: do not apply this check on every batch, since transient // workflow task && workflow finish will be broken (the first batch) @@ -4469,23 +4466,24 @@ func (ms *MutableStateImpl) startTransactionHandleWorkflowTaskFailover() (bool, func (ms *MutableStateImpl) closeTransactionWithPolicyCheck( transactionPolicy TransactionPolicy, ) error { - - if transactionPolicy == TransactionPolicyPassive || - !ms.canReplicateEvents() { + switch transactionPolicy { + case TransactionPolicyActive: + // Cannot use ms.namespaceEntry.ActiveClusterName() because currentVersion may be updated during this transaction in + // passive cluster. For example: if passive cluster sees conflict and decided to terminate this workflow. The + // currentVersion on mutable state would be updated to point to last write version which is current (passive) cluster. + activeCluster := ms.clusterMetadata.ClusterNameForFailoverVersion(ms.namespaceEntry.IsGlobalNamespace(), ms.GetCurrentVersion()) + currentCluster := ms.clusterMetadata.GetCurrentClusterName() + + if activeCluster != currentCluster { + namespaceID := ms.GetExecutionInfo().NamespaceId + return serviceerror.NewNamespaceNotActive(namespaceID, currentCluster, activeCluster) + } return nil + case TransactionPolicyPassive: + return nil + default: + panic(fmt.Sprintf("unknown transaction policy: %v", transactionPolicy)) } - - // Cannot use ms.namespaceEntry.ActiveClusterName() because currentVersion may be updated during this transaction in - // passive cluster. For example: if passive cluster sees conflict and decided to terminate this workflow. The - // currentVersion on mutable state would be updated to point to last write version which is current (passive) cluster. - activeCluster := ms.clusterMetadata.ClusterNameForFailoverVersion(ms.namespaceEntry.IsGlobalNamespace(), ms.GetCurrentVersion()) - currentCluster := ms.clusterMetadata.GetCurrentClusterName() - - if activeCluster != currentCluster { - namespaceID := ms.GetExecutionInfo().NamespaceId - return serviceerror.NewNamespaceNotActive(namespaceID, currentCluster, activeCluster) - } - return nil } func (ms *MutableStateImpl) closeTransactionHandleBufferedEventsLimit( @@ -4564,17 +4562,24 @@ func (ms *MutableStateImpl) closeTransactionHandleWorkflowReset( func (ms *MutableStateImpl) closeTransactionHandleActivityUserTimerTasks( transactionPolicy TransactionPolicy, ) error { - - if transactionPolicy == TransactionPolicyPassive || - !ms.IsWorkflowExecutionRunning() { + switch transactionPolicy { + case TransactionPolicyActive: + if !ms.IsWorkflowExecutionRunning() { + return nil + } + if err := ms.taskGenerator.GenerateActivityTimerTasks(); err != nil { + return err + } + return ms.taskGenerator.GenerateUserTimerTasks() + case TransactionPolicyPassive: return nil + default: + panic(fmt.Sprintf("unknown transaction policy: %v", transactionPolicy)) } +} - if err := ms.taskGenerator.GenerateActivityTimerTasks(); err != nil { - return err - } - - return ms.taskGenerator.GenerateUserTimerTasks() +func (ms *MutableStateImpl) generateReplicationTask() bool { + return len(ms.namespaceEntry.ClusterNames()) > 1 } func (ms *MutableStateImpl) checkMutability( diff --git a/service/history/workflow/task_generator.go b/service/history/workflow/task_generator.go index 86b59b40def..5084bf821ba 100644 --- a/service/history/workflow/task_generator.go +++ b/service/history/workflow/task_generator.go @@ -99,7 +99,6 @@ type ( // replication tasks GenerateHistoryReplicationTasks( - branchToken []byte, events []*historypb.HistoryEvent, ) error GenerateMigrationTasks() (tasks.Task, error) @@ -569,9 +568,12 @@ func (r *TaskGeneratorImpl) GenerateUserTimerTasks() error { } func (r *TaskGeneratorImpl) GenerateHistoryReplicationTasks( - branchToken []byte, events []*historypb.HistoryEvent, ) error { + if len(events) == 0 { + return nil + } + firstEvent := events[0] lastEvent := events[len(events)-1] if firstEvent.GetVersion() != lastEvent.GetVersion() { diff --git a/service/history/workflow/task_generator_mock.go b/service/history/workflow/task_generator_mock.go index f528ee3acf8..9af984d5df4 100644 --- a/service/history/workflow/task_generator_mock.go +++ b/service/history/workflow/task_generator_mock.go @@ -160,17 +160,17 @@ func (mr *MockTaskGeneratorMockRecorder) GenerateDeleteHistoryEventTask(closeTim } // GenerateHistoryReplicationTasks mocks base method. -func (m *MockTaskGenerator) GenerateHistoryReplicationTasks(branchToken []byte, events []*history.HistoryEvent) error { +func (m *MockTaskGenerator) GenerateHistoryReplicationTasks(events []*history.HistoryEvent) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GenerateHistoryReplicationTasks", branchToken, events) + ret := m.ctrl.Call(m, "GenerateHistoryReplicationTasks", events) ret0, _ := ret[0].(error) return ret0 } // GenerateHistoryReplicationTasks indicates an expected call of GenerateHistoryReplicationTasks. -func (mr *MockTaskGeneratorMockRecorder) GenerateHistoryReplicationTasks(branchToken, events interface{}) *gomock.Call { +func (mr *MockTaskGeneratorMockRecorder) GenerateHistoryReplicationTasks(events interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GenerateHistoryReplicationTasks", reflect.TypeOf((*MockTaskGenerator)(nil).GenerateHistoryReplicationTasks), branchToken, events) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GenerateHistoryReplicationTasks", reflect.TypeOf((*MockTaskGenerator)(nil).GenerateHistoryReplicationTasks), events) } // GenerateMigrationTasks mocks base method. From cc2eb80b204fdf8b4f3993148e137eae7695a567 Mon Sep 17 00:00:00 2001 From: Yichao Yang Date: Wed, 22 Mar 2023 15:56:20 -0700 Subject: [PATCH 4/7] Fix test failure from merge conflict (#4087) --- service/history/workflow/mutable_state_impl_test.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/service/history/workflow/mutable_state_impl_test.go b/service/history/workflow/mutable_state_impl_test.go index e51c340cbce..e84ab181112 100644 --- a/service/history/workflow/mutable_state_impl_test.go +++ b/service/history/workflow/mutable_state_impl_test.go @@ -44,6 +44,7 @@ import ( historyspb "go.temporal.io/server/api/history/v1" persistencespb "go.temporal.io/server/api/persistence/v1" "go.temporal.io/server/common" + "go.temporal.io/server/common/cluster" "go.temporal.io/server/common/definition" "go.temporal.io/server/common/failure" "go.temporal.io/server/common/log" @@ -837,10 +838,11 @@ func (s *mutableStateSuite) TestReplicateActivityTaskStartedEvent() { } func (s *mutableStateSuite) TestTotalEntitiesCount() { + namespaceEntry := s.newNamespaceCacheEntry() mutableState := TestLocalMutableState( s.mockShard, s.mockEventsCache, - s.newNamespaceCacheEntry(), + namespaceEntry, s.logger, uuid.New(), ) @@ -899,6 +901,12 @@ func (s *mutableStateSuite) TestTotalEntitiesCount() { ) s.NoError(err) + s.mockShard.Resource.ClusterMetadata.EXPECT().ClusterNameForFailoverVersion( + namespaceEntry.IsGlobalNamespace(), + mutableState.GetCurrentVersion(), + ).Return(cluster.TestCurrentClusterName) + s.mockShard.Resource.ClusterMetadata.EXPECT().GetCurrentClusterName().Return(cluster.TestCurrentClusterName) + mutation, _, err := mutableState.CloseTransactionAsMutation( s.mockShard.GetTimeSource().Now(), TransactionPolicyActive, From 832f4e6da00151d614b159ca7c311105bfc3362a Mon Sep 17 00:00:00 2001 From: wxing1292 Date: Wed, 22 Mar 2023 17:21:13 -0700 Subject: [PATCH 5/7] Break replication ack manager into smaller component (#4088) * Isolate replication task conversion to dedicated util & UT --- service/history/replication/ack_manager.go | 341 +------- .../history/replication/ack_manager_test.go | 324 +------- .../history/replication/raw_task_converter.go | 384 +++++++++ .../replication/raw_task_converter_test.go | 768 ++++++++++++++++++ 4 files changed, 1165 insertions(+), 652 deletions(-) create mode 100644 service/history/replication/raw_task_converter.go create mode 100644 service/history/replication/raw_task_converter_test.go diff --git a/service/history/replication/ack_manager.go b/service/history/replication/ack_manager.go index 669e734c5cb..2683b809cbe 100644 --- a/service/history/replication/ack_manager.go +++ b/service/history/replication/ack_manager.go @@ -33,11 +33,9 @@ import ( "sync" "time" - commonpb "go.temporal.io/api/common/v1" "go.temporal.io/api/serviceerror" enumsspb "go.temporal.io/server/api/enums/v1" - historyspb "go.temporal.io/server/api/history/v1" replicationspb "go.temporal.io/server/api/replication/v1" "go.temporal.io/server/common" "go.temporal.io/server/common/backoff" @@ -51,12 +49,10 @@ import ( "go.temporal.io/server/common/metrics" "go.temporal.io/server/common/namespace" "go.temporal.io/server/common/persistence" - "go.temporal.io/server/common/persistence/versionhistory" "go.temporal.io/server/common/primitives/timestamp" "go.temporal.io/server/service/history/configs" "go.temporal.io/server/service/history/shard" "go.temporal.io/server/service/history/tasks" - "go.temporal.io/server/service/history/workflow" wcache "go.temporal.io/server/service/history/workflow/cache" ) @@ -445,58 +441,10 @@ func (p *ackMgrImpl) generateSyncActivityTask( ctx context.Context, taskInfo *tasks.SyncActivityTask, ) (*replicationspb.ReplicationTask, error) { - namespaceID := namespace.ID(taskInfo.NamespaceID) - workflowID := taskInfo.WorkflowID - runID := taskInfo.RunID - taskID := taskInfo.TaskID - return p.processReplication( + return convertActivityStateReplicationTask( ctx, - false, // not necessary to send out sync activity task if workflow closed - namespaceID, - workflowID, - runID, - func(mutableState workflow.MutableState) (*replicationspb.ReplicationTask, error) { - activityInfo, ok := mutableState.GetActivityInfo(taskInfo.ScheduledEventID) - if !ok { - return nil, nil - } - - // The activity may be in a scheduled state - var startedTime *time.Time - if activityInfo.StartedEventId != common.EmptyEventID { - startedTime = activityInfo.StartedTime - } - - // Version history uses when replicate the sync activity task - versionHistories := mutableState.GetExecutionInfo().GetVersionHistories() - currentVersionHistory, err := versionhistory.GetCurrentVersionHistory(versionHistories) - if err != nil { - return nil, err - } - return &replicationspb.ReplicationTask{ - TaskType: enumsspb.REPLICATION_TASK_TYPE_SYNC_ACTIVITY_TASK, - SourceTaskId: taskID, - Attributes: &replicationspb.ReplicationTask_SyncActivityTaskAttributes{ - SyncActivityTaskAttributes: &replicationspb.SyncActivityTaskAttributes{ - NamespaceId: namespaceID.String(), - WorkflowId: workflowID, - RunId: runID, - Version: activityInfo.Version, - ScheduledEventId: activityInfo.ScheduledEventId, - ScheduledTime: activityInfo.ScheduledTime, - StartedEventId: activityInfo.StartedEventId, - StartedTime: startedTime, - LastHeartbeatTime: activityInfo.LastHeartbeatUpdateTime, - Details: activityInfo.LastHeartbeatDetails, - Attempt: activityInfo.Attempt, - LastFailure: activityInfo.RetryLastFailure, - LastWorkerIdentity: activityInfo.RetryLastWorkerIdentity, - VersionHistory: versionhistory.CopyVersionHistory(currentVersionHistory), - }, - }, - VisibilityTime: &taskInfo.VisibilityTimestamp, - }, nil - }, + taskInfo, + p.workflowCache, ) } @@ -504,65 +452,13 @@ func (p *ackMgrImpl) generateHistoryReplicationTask( ctx context.Context, taskInfo *tasks.HistoryReplicationTask, ) (*replicationspb.ReplicationTask, error) { - namespaceID := namespace.ID(taskInfo.NamespaceID) - workflowID := taskInfo.WorkflowID - runID := taskInfo.RunID - taskID := taskInfo.TaskID - replicationTask, err := p.processReplication( - ctx, - true, // still necessary to send out history replication message if workflow closed - namespaceID, - workflowID, - runID, - func(mutableState workflow.MutableState) (*replicationspb.ReplicationTask, error) { - versionHistoryItems, branchToken, err := getVersionHistoryItems( - mutableState, - taskInfo.FirstEventID, - taskInfo.Version, - ) - if err != nil { - return nil, err - } - - eventsBlob, err := p.getEventsBlob( - ctx, - branchToken, - taskInfo.FirstEventID, - taskInfo.NextEventID, - ) - if err != nil { - return nil, p.handleReadHistoryError(namespaceID, workflowID, runID, err) - } - - replicationTask := &replicationspb.ReplicationTask{ - TaskType: enumsspb.REPLICATION_TASK_TYPE_HISTORY_V2_TASK, - SourceTaskId: taskID, - Attributes: &replicationspb.ReplicationTask_HistoryTaskAttributes{ - HistoryTaskAttributes: &replicationspb.HistoryTaskAttributes{ - NamespaceId: namespaceID.String(), - WorkflowId: workflowID, - RunId: runID, - VersionHistoryItems: versionHistoryItems, - Events: eventsBlob, - // NewRunEvents will be set in processNewRunReplication - }, - }, - VisibilityTime: &taskInfo.VisibilityTimestamp, - } - return replicationTask, nil - }, - ) - if err != nil { - return replicationTask, err - } - return p.processNewRunReplication( + return convertHistoryReplicationTask( ctx, - namespaceID, - workflowID, - taskInfo.NewRunID, - taskInfo.NewRunBranchToken, - taskInfo.Version, - replicationTask, + taskInfo, + p.shard.GetShardID(), + p.workflowCache, + p.executionMgr, + p.logger, ) } @@ -570,226 +466,13 @@ func (p *ackMgrImpl) generateSyncWorkflowStateTask( ctx context.Context, taskInfo *tasks.SyncWorkflowStateTask, ) (*replicationspb.ReplicationTask, error) { - namespaceID := namespace.ID(taskInfo.NamespaceID) - workflowID := taskInfo.WorkflowID - runID := taskInfo.RunID - taskID := taskInfo.TaskID - return p.processReplication( + return convertWorkflowStateReplicationTask( ctx, - true, - namespaceID, - workflowID, - runID, - func(mutableState workflow.MutableState) (*replicationspb.ReplicationTask, error) { - return &replicationspb.ReplicationTask{ - TaskType: enumsspb.REPLICATION_TASK_TYPE_SYNC_WORKFLOW_STATE_TASK, - SourceTaskId: taskID, - Attributes: &replicationspb.ReplicationTask_SyncWorkflowStateTaskAttributes{ - SyncWorkflowStateTaskAttributes: &replicationspb.SyncWorkflowStateTaskAttributes{ - WorkflowState: mutableState.CloneToProto(), - }, - }, - VisibilityTime: &taskInfo.VisibilityTimestamp, - }, nil - }, + taskInfo, + p.workflowCache, ) } -func (p *ackMgrImpl) getEventsBlob( - ctx context.Context, - branchToken []byte, - firstEventID int64, - nextEventID int64, -) (*commonpb.DataBlob, error) { - - var eventBatchBlobs []*commonpb.DataBlob - var pageToken []byte - req := &persistence.ReadHistoryBranchRequest{ - BranchToken: branchToken, - MinEventID: firstEventID, - MaxEventID: nextEventID, - PageSize: 1, - NextPageToken: pageToken, - ShardID: p.shard.GetShardID(), - } - - for { - resp, err := p.executionMgr.ReadRawHistoryBranch(ctx, req) - if err != nil { - return nil, err - } - - req.NextPageToken = resp.NextPageToken - eventBatchBlobs = append(eventBatchBlobs, resp.HistoryEventBlobs...) - - if len(req.NextPageToken) == 0 { - break - } - } - - if len(eventBatchBlobs) != 1 { - return nil, serviceerror.NewInternal("replicatorQueueProcessor encountered more than 1 NDC raw event batch") - } - - return eventBatchBlobs[0], nil -} - -func (p *ackMgrImpl) processReplication( - ctx context.Context, - processTaskIfClosed bool, - namespaceID namespace.ID, - workflowID string, - runID string, - action func(workflow.MutableState) (*replicationspb.ReplicationTask, error), -) (retReplicationTask *replicationspb.ReplicationTask, retError error) { - - execution := commonpb.WorkflowExecution{ - WorkflowId: workflowID, - RunId: runID, - } - - context, release, err := p.workflowCache.GetOrCreateWorkflowExecution( - ctx, - namespaceID, - execution, - workflow.CallerTypeTask, - ) - if err != nil { - return nil, err - } - defer func() { release(retError) }() - - ms, err := context.LoadMutableState(ctx) - switch err.(type) { - case nil: - if !processTaskIfClosed && !ms.IsWorkflowExecutionRunning() { - // workflow already finished, no need to process the replication task - return nil, nil - } - return action(ms) - case *serviceerror.NotFound, *serviceerror.NamespaceNotFound: - return nil, nil - default: - return nil, err - } -} - -func (p *ackMgrImpl) processNewRunReplication( - ctx context.Context, - namespaceID namespace.ID, - workflowID string, - newRunID string, - branchToken []byte, - taskVersion int64, - task *replicationspb.ReplicationTask, -) (retReplicationTask *replicationspb.ReplicationTask, retError error) { - - if task == nil { - return nil, nil - } - attr, ok := task.Attributes.(*replicationspb.ReplicationTask_HistoryTaskAttributes) - if !ok { - return nil, serviceerror.NewInternal("Wrong replication task to process new run replication.") - } - - var newRunBranchToken []byte - if len(newRunID) > 0 { - newRunContext, releaseFn, err := p.workflowCache.GetOrCreateWorkflowExecution( - ctx, - namespaceID, - commonpb.WorkflowExecution{ - WorkflowId: workflowID, - RunId: newRunID, - }, - workflow.CallerTypeTask, - ) - if err != nil { - return nil, err - } - defer func() { releaseFn(retError) }() - - newRunMutableState, err := newRunContext.LoadMutableState(ctx) - if err != nil { - return nil, err - } - _, newRunBranchToken, err = getVersionHistoryItems( - newRunMutableState, - common.FirstEventID, - taskVersion, - ) - if err != nil { - return nil, err - } - } else if len(branchToken) != 0 { - newRunBranchToken = branchToken - } - - var newRunEventsBlob *commonpb.DataBlob - if len(newRunBranchToken) > 0 { - // only get the first batch - var err error - newRunEventsBlob, err = p.getEventsBlob( - ctx, - newRunBranchToken, - common.FirstEventID, - common.FirstEventID+1, - ) - if err != nil { - return nil, p.handleReadHistoryError(namespaceID, workflowID, newRunID, err) - } - } - attr.HistoryTaskAttributes.NewRunEvents = newRunEventsBlob - return task, nil -} - -func getVersionHistoryItems( - mutableState workflow.MutableState, - eventID int64, - version int64, -) ([]*historyspb.VersionHistoryItem, []byte, error) { - - versionHistories := mutableState.GetExecutionInfo().GetVersionHistories() - versionHistoryIndex, err := versionhistory.FindFirstVersionHistoryIndexByVersionHistoryItem( - versionHistories, - versionhistory.NewVersionHistoryItem( - eventID, - version, - ), - ) - if err != nil { - return nil, nil, err - } - - versionHistoryBranch, err := versionhistory.GetVersionHistory(versionHistories, versionHistoryIndex) - if err != nil { - return nil, nil, err - } - return versionhistory.CopyVersionHistory(versionHistoryBranch).GetItems(), versionHistoryBranch.GetBranchToken(), nil -} - -func (p *ackMgrImpl) handleReadHistoryError( - namespaceID namespace.ID, - workflowID string, - runID string, - err error, -) error { - switch err.(type) { - case *serviceerror.NotFound, *serviceerror.DataLoss: - if p.config.ReplicationBypassCorruptedData(namespaceID.String()) { - // bypass this corrupted workflow to unblock the replication queue. - p.logger.Error("Cannot get history from corrupted workflow", - tag.WorkflowNamespaceID(namespaceID.String()), - tag.WorkflowID(workflowID), - tag.WorkflowRunID(runID), - tag.Error(err)) - return nil - } - return err - default: - return err - } -} - func (p *ackMgrImpl) clusterToReaderID( ctx context.Context, pollingCluster string, diff --git a/service/history/replication/ack_manager_test.go b/service/history/replication/ack_manager_test.go index 929a9c918c3..fa97608aee1 100644 --- a/service/history/replication/ack_manager_test.go +++ b/service/history/replication/ack_manager_test.go @@ -36,20 +36,16 @@ import ( "github.com/stretchr/testify/suite" commonpb "go.temporal.io/api/common/v1" "go.temporal.io/api/serviceerror" - enumsspb "go.temporal.io/server/api/enums/v1" + historyspb "go.temporal.io/server/api/history/v1" persistencespb "go.temporal.io/server/api/persistence/v1" - replicationspb "go.temporal.io/server/api/replication/v1" "go.temporal.io/server/common" "go.temporal.io/server/common/cluster" "go.temporal.io/server/common/convert" "go.temporal.io/server/common/definition" - "go.temporal.io/server/common/failure" "go.temporal.io/server/common/log" "go.temporal.io/server/common/namespace" - "go.temporal.io/server/common/payloads" "go.temporal.io/server/common/persistence" - "go.temporal.io/server/common/primitives/timestamp" "go.temporal.io/server/service/history/events" "go.temporal.io/server/service/history/shard" "go.temporal.io/server/service/history/tasks" @@ -218,324 +214,6 @@ func (s *ackManagerSuite) TestTaskIDRange_Initialized_UseHighestTransferTaskID() s.Equal(expectMaxTaskID, *s.replicationAckManager.maxTaskID) } -func (s *ackManagerSuite) TestSyncActivity_WorkflowMissing() { - ctx := context.Background() - namespaceID := tests.NamespaceID - workflowID := "some random workflow ID" - runID := uuid.New() - scheduledEventID := int64(144) - version := int64(288) - taskID := int64(1444) - task := &tasks.SyncActivityTask{ - WorkflowKey: definition.NewWorkflowKey( - namespaceID.String(), - workflowID, - runID, - ), - VisibilityTimestamp: time.Now().UTC(), - TaskID: taskID, - Version: version, - ScheduledEventID: scheduledEventID, - } - s.mockExecutionMgr.EXPECT().GetWorkflowExecution(gomock.Any(), &persistence.GetWorkflowExecutionRequest{ - ShardID: s.mockShard.GetShardID(), - NamespaceID: namespaceID.String(), - WorkflowID: workflowID, - RunID: runID, - }).Return(nil, serviceerror.NewNotFound("")) - s.mockNamespaceRegistry.EXPECT().GetNamespaceByID(namespaceID).Return(tests.GlobalNamespaceEntry, nil).AnyTimes() - - result, err := s.replicationAckManager.generateSyncActivityTask(ctx, task) - s.NoError(err) - s.Nil(result) -} - -func (s *ackManagerSuite) TestSyncActivity_WorkflowCompleted() { - ctx := context.Background() - namespaceID := tests.NamespaceID - workflowID := "some random workflow ID" - runID := uuid.New() - scheduledEventID := int64(144) - taskID := int64(1444) - version := int64(2333) - task := &tasks.SyncActivityTask{ - WorkflowKey: definition.NewWorkflowKey( - namespaceID.String(), - workflowID, - runID, - ), - VisibilityTimestamp: time.Now().UTC(), - TaskID: taskID, - Version: version, - ScheduledEventID: scheduledEventID, - } - - context, release, _ := s.replicationAckManager.workflowCache.GetOrCreateWorkflowExecution( - ctx, - namespaceID, - commonpb.WorkflowExecution{ - WorkflowId: workflowID, - RunId: runID, - }, - workflow.CallerTypeTask, - ) - context.(*workflow.ContextImpl).MutableState = s.mockMutableState - release(nil) - s.mockMutableState.EXPECT().StartTransaction(gomock.Any()).Return(false, nil) - s.mockMutableState.EXPECT().IsWorkflowExecutionRunning().Return(false).AnyTimes() - s.mockNamespaceRegistry.EXPECT().GetNamespaceByID(namespaceID).Return(tests.GlobalNamespaceEntry, nil).AnyTimes() - - result, err := s.replicationAckManager.generateSyncActivityTask(ctx, task) - s.NoError(err) - s.Nil(result) -} - -func (s *ackManagerSuite) TestSyncActivity_ActivityCompleted() { - ctx := context.Background() - namespaceID := tests.NamespaceID - workflowID := "some random workflow ID" - runID := uuid.New() - scheduledEventID := int64(144) - taskID := int64(1444) - version := int64(2333) - task := &tasks.SyncActivityTask{ - WorkflowKey: definition.NewWorkflowKey( - namespaceID.String(), - workflowID, - runID, - ), - VisibilityTimestamp: time.Now().UTC(), - TaskID: taskID, - Version: version, - ScheduledEventID: scheduledEventID, - } - - context, release, _ := s.replicationAckManager.workflowCache.GetOrCreateWorkflowExecution( - ctx, - namespaceID, - commonpb.WorkflowExecution{ - WorkflowId: workflowID, - RunId: runID, - }, - workflow.CallerTypeTask, - ) - - context.(*workflow.ContextImpl).MutableState = s.mockMutableState - release(nil) - s.mockMutableState.EXPECT().StartTransaction(gomock.Any()).Return(false, nil) - s.mockMutableState.EXPECT().IsWorkflowExecutionRunning().Return(true).AnyTimes() - s.mockMutableState.EXPECT().GetActivityInfo(scheduledEventID).Return(nil, false).AnyTimes() - s.mockNamespaceRegistry.EXPECT().GetNamespaceByID(namespaceID).Return(tests.GlobalNamespaceEntry, nil).AnyTimes() - - result, err := s.replicationAckManager.generateSyncActivityTask(ctx, task) - s.NoError(err) - s.Nil(result) -} - -func (s *ackManagerSuite) TestSyncActivity_ActivityRetry() { - ctx := context.Background() - namespaceID := tests.NamespaceID - workflowID := "some random workflow ID" - runID := uuid.New() - scheduledEventID := int64(144) - taskID := int64(1444) - version := int64(2333) - taskTimestamp := time.Now().UTC() - task := &tasks.SyncActivityTask{ - WorkflowKey: definition.NewWorkflowKey( - namespaceID.String(), - workflowID, - runID, - ), - VisibilityTimestamp: taskTimestamp, - TaskID: taskID, - Version: version, - ScheduledEventID: scheduledEventID, - } - - context, release, _ := s.replicationAckManager.workflowCache.GetOrCreateWorkflowExecution( - ctx, - namespaceID, - commonpb.WorkflowExecution{ - WorkflowId: workflowID, - RunId: runID, - }, - workflow.CallerTypeTask, - ) - - context.(*workflow.ContextImpl).MutableState = s.mockMutableState - release(nil) - - activityVersion := int64(333) - activityScheduledEventID := scheduledEventID - activityScheduledTime := time.Now().UTC() - activityStartedEventID := common.EmptyEventID - activityAttempt := int32(16384) - activityDetails := payloads.EncodeString("some random activity progress") - activityLastFailure := failure.NewServerFailure("some random reason", false) - activityLastWorkerIdentity := "some random worker identity" - s.mockMutableState.EXPECT().StartTransaction(gomock.Any()).Return(false, nil) - s.mockMutableState.EXPECT().IsWorkflowExecutionRunning().Return(true).AnyTimes() - s.mockMutableState.EXPECT().GetActivityInfo(scheduledEventID).Return(&persistencespb.ActivityInfo{ - Version: activityVersion, - ScheduledEventId: activityScheduledEventID, - ScheduledTime: &activityScheduledTime, - StartedEventId: activityStartedEventID, - StartedTime: nil, - LastHeartbeatUpdateTime: nil, - LastHeartbeatDetails: activityDetails, - Attempt: activityAttempt, - RetryLastFailure: activityLastFailure, - RetryLastWorkerIdentity: activityLastWorkerIdentity, - }, true).AnyTimes() - versionHistory := &historyspb.VersionHistory{ - BranchToken: []byte{}, - Items: []*historyspb.VersionHistoryItem{ - { - EventId: scheduledEventID, - Version: 333, - }, - }, - } - versionHistories := &historyspb.VersionHistories{ - CurrentVersionHistoryIndex: 0, - Histories: []*historyspb.VersionHistory{ - versionHistory, - }, - } - s.mockMutableState.EXPECT().GetExecutionInfo().Return(&persistencespb.WorkflowExecutionInfo{VersionHistories: versionHistories}).AnyTimes() - s.mockNamespaceRegistry.EXPECT().GetNamespaceByID(namespaceID).Return(tests.GlobalNamespaceEntry, nil).AnyTimes() - - result, err := s.replicationAckManager.generateSyncActivityTask(ctx, task) - s.NoError(err) - s.Equal(&replicationspb.ReplicationTask{ - SourceTaskId: taskID, - TaskType: enumsspb.REPLICATION_TASK_TYPE_SYNC_ACTIVITY_TASK, - Attributes: &replicationspb.ReplicationTask_SyncActivityTaskAttributes{ - SyncActivityTaskAttributes: &replicationspb.SyncActivityTaskAttributes{ - NamespaceId: namespaceID.String(), - WorkflowId: workflowID, - RunId: runID, - Version: activityVersion, - ScheduledEventId: activityScheduledEventID, - ScheduledTime: &activityScheduledTime, - StartedEventId: activityStartedEventID, - StartedTime: nil, - LastHeartbeatTime: nil, - Details: activityDetails, - Attempt: activityAttempt, - LastFailure: activityLastFailure, - LastWorkerIdentity: activityLastWorkerIdentity, - VersionHistory: versionHistory, - }, - }, - VisibilityTime: timestamp.TimePtr(taskTimestamp), - }, result) -} - -func (s *ackManagerSuite) TestSyncActivity_ActivityRunning() { - ctx := context.Background() - namespaceID := tests.NamespaceID - workflowID := "some random workflow ID" - runID := uuid.New() - scheduledEventID := int64(144) - taskID := int64(1444) - version := int64(2333) - taskTimestamp := time.Now().UTC() - task := &tasks.SyncActivityTask{ - WorkflowKey: definition.NewWorkflowKey( - namespaceID.String(), - workflowID, - runID, - ), - VisibilityTimestamp: taskTimestamp, - TaskID: taskID, - Version: version, - ScheduledEventID: scheduledEventID, - } - - context, release, _ := s.replicationAckManager.workflowCache.GetOrCreateWorkflowExecution( - ctx, - namespaceID, - commonpb.WorkflowExecution{ - WorkflowId: workflowID, - RunId: runID, - }, - workflow.CallerTypeTask, - ) - - context.(*workflow.ContextImpl).MutableState = s.mockMutableState - release(nil) - - activityVersion := int64(333) - activityScheduledEventID := scheduledEventID - activityScheduledTime := timestamp.TimePtr(time.Date(1978, 8, 22, 12, 59, 59, 999999, time.UTC)) - activityStartedEventID := activityScheduledEventID + 1 - activityStartedTime := activityScheduledTime.Add(time.Minute) - activityHeartbeatTime := activityStartedTime.Add(time.Minute) - activityAttempt := int32(16384) - activityDetails := payloads.EncodeString("some random activity progress") - activityLastFailure := failure.NewServerFailure("some random reason", false) - activityLastWorkerIdentity := "some random worker identity" - s.mockMutableState.EXPECT().StartTransaction(gomock.Any()).Return(false, nil) - s.mockMutableState.EXPECT().IsWorkflowExecutionRunning().Return(true).AnyTimes() - s.mockMutableState.EXPECT().GetActivityInfo(scheduledEventID).Return(&persistencespb.ActivityInfo{ - Version: activityVersion, - ScheduledEventId: activityScheduledEventID, - ScheduledTime: activityScheduledTime, - StartedEventId: activityStartedEventID, - StartedTime: &activityStartedTime, - LastHeartbeatUpdateTime: &activityHeartbeatTime, - LastHeartbeatDetails: activityDetails, - Attempt: activityAttempt, - RetryLastFailure: activityLastFailure, - RetryLastWorkerIdentity: activityLastWorkerIdentity, - }, true).AnyTimes() - versionHistory := &historyspb.VersionHistory{ - BranchToken: []byte{}, - Items: []*historyspb.VersionHistoryItem{ - { - EventId: scheduledEventID, - Version: 333, - }, - }, - } - versionHistories := &historyspb.VersionHistories{ - CurrentVersionHistoryIndex: 0, - Histories: []*historyspb.VersionHistory{ - versionHistory, - }, - } - s.mockMutableState.EXPECT().GetExecutionInfo().Return(&persistencespb.WorkflowExecutionInfo{VersionHistories: versionHistories}).AnyTimes() - s.mockNamespaceRegistry.EXPECT().GetNamespaceByID(namespaceID).Return(tests.GlobalNamespaceEntry, nil).AnyTimes() - - result, err := s.replicationAckManager.generateSyncActivityTask(ctx, task) - s.NoError(err) - s.Equal(&replicationspb.ReplicationTask{ - SourceTaskId: taskID, - TaskType: enumsspb.REPLICATION_TASK_TYPE_SYNC_ACTIVITY_TASK, - Attributes: &replicationspb.ReplicationTask_SyncActivityTaskAttributes{ - SyncActivityTaskAttributes: &replicationspb.SyncActivityTaskAttributes{ - NamespaceId: namespaceID.String(), - WorkflowId: workflowID, - RunId: runID, - Version: activityVersion, - ScheduledEventId: activityScheduledEventID, - ScheduledTime: activityScheduledTime, - StartedEventId: activityStartedEventID, - StartedTime: &activityStartedTime, - LastHeartbeatTime: &activityHeartbeatTime, - Details: activityDetails, - Attempt: activityAttempt, - LastFailure: activityLastFailure, - LastWorkerIdentity: activityLastWorkerIdentity, - VersionHistory: versionHistory, - }, - }, - VisibilityTime: timestamp.TimePtr(taskTimestamp), - }, result) -} - func (s *ackManagerSuite) Test_GetMaxTaskInfo() { now := time.Now() taskSet := []tasks.Task{ diff --git a/service/history/replication/raw_task_converter.go b/service/history/replication/raw_task_converter.go new file mode 100644 index 00000000000..8fe0534c02c --- /dev/null +++ b/service/history/replication/raw_task_converter.go @@ -0,0 +1,384 @@ +// 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. + +package replication + +import ( + "context" + "time" + + commonpb "go.temporal.io/api/common/v1" + "go.temporal.io/api/serviceerror" + + enumsspb "go.temporal.io/server/api/enums/v1" + historyspb "go.temporal.io/server/api/history/v1" + replicationspb "go.temporal.io/server/api/replication/v1" + "go.temporal.io/server/common" + "go.temporal.io/server/common/definition" + "go.temporal.io/server/common/log" + "go.temporal.io/server/common/log/tag" + "go.temporal.io/server/common/namespace" + "go.temporal.io/server/common/persistence" + "go.temporal.io/server/common/persistence/versionhistory" + "go.temporal.io/server/service/history/tasks" + "go.temporal.io/server/service/history/workflow" + wcache "go.temporal.io/server/service/history/workflow/cache" +) + +func convertActivityStateReplicationTask( + ctx context.Context, + taskInfo *tasks.SyncActivityTask, + workflowCache wcache.Cache, +) (*replicationspb.ReplicationTask, error) { + return generateStateReplicationTask( + ctx, + definition.NewWorkflowKey(taskInfo.NamespaceID, taskInfo.WorkflowID, taskInfo.RunID), + workflowCache, + func(mutableState workflow.MutableState) (*replicationspb.ReplicationTask, error) { + if !mutableState.IsWorkflowExecutionRunning() { + return nil, nil + } + activityInfo, ok := mutableState.GetActivityInfo(taskInfo.ScheduledEventID) + if !ok { + return nil, nil + } + if activityInfo.Version != taskInfo.Version { + return nil, nil + } + + // The activity may be in a scheduled state + var startedTime *time.Time + if activityInfo.StartedEventId != common.EmptyEventID { + startedTime = activityInfo.StartedTime + } + + // Version history uses when replicate the sync activity task + versionHistories := mutableState.GetExecutionInfo().GetVersionHistories() + currentVersionHistory, err := versionhistory.GetCurrentVersionHistory(versionHistories) + if err != nil { + return nil, err + } + return &replicationspb.ReplicationTask{ + TaskType: enumsspb.REPLICATION_TASK_TYPE_SYNC_ACTIVITY_TASK, + SourceTaskId: taskInfo.TaskID, + Attributes: &replicationspb.ReplicationTask_SyncActivityTaskAttributes{ + SyncActivityTaskAttributes: &replicationspb.SyncActivityTaskAttributes{ + NamespaceId: taskInfo.NamespaceID, + WorkflowId: taskInfo.WorkflowID, + RunId: taskInfo.RunID, + Version: activityInfo.Version, + ScheduledEventId: activityInfo.ScheduledEventId, + ScheduledTime: activityInfo.ScheduledTime, + StartedEventId: activityInfo.StartedEventId, + StartedTime: startedTime, + LastHeartbeatTime: activityInfo.LastHeartbeatUpdateTime, + Details: activityInfo.LastHeartbeatDetails, + Attempt: activityInfo.Attempt, + LastFailure: activityInfo.RetryLastFailure, + LastWorkerIdentity: activityInfo.RetryLastWorkerIdentity, + VersionHistory: versionhistory.CopyVersionHistory(currentVersionHistory), + }, + }, + VisibilityTime: &taskInfo.VisibilityTimestamp, + }, nil + }, + ) +} + +func convertWorkflowStateReplicationTask( + ctx context.Context, + taskInfo *tasks.SyncWorkflowStateTask, + workflowCache wcache.Cache, +) (*replicationspb.ReplicationTask, error) { + return generateStateReplicationTask( + ctx, + definition.NewWorkflowKey(taskInfo.NamespaceID, taskInfo.WorkflowID, taskInfo.RunID), + workflowCache, + func(mutableState workflow.MutableState) (*replicationspb.ReplicationTask, error) { + state, _ := mutableState.GetWorkflowStateStatus() + if state != enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED { + return nil, nil + } + return &replicationspb.ReplicationTask{ + TaskType: enumsspb.REPLICATION_TASK_TYPE_SYNC_WORKFLOW_STATE_TASK, + SourceTaskId: taskInfo.TaskID, + Attributes: &replicationspb.ReplicationTask_SyncWorkflowStateTaskAttributes{ + SyncWorkflowStateTaskAttributes: &replicationspb.SyncWorkflowStateTaskAttributes{ + WorkflowState: mutableState.CloneToProto(), + }, + }, + VisibilityTime: &taskInfo.VisibilityTimestamp, + }, nil + }, + ) +} + +func convertHistoryReplicationTask( + ctx context.Context, + taskInfo *tasks.HistoryReplicationTask, + shardID int32, + workflowCache wcache.Cache, + executionManager persistence.ExecutionManager, + logger log.Logger, +) (*replicationspb.ReplicationTask, error) { + currentVersionHistory, currentEvents, err := getVersionHistoryAndEvents( + ctx, + shardID, + definition.NewWorkflowKey(taskInfo.NamespaceID, taskInfo.WorkflowID, taskInfo.RunID), + taskInfo.Version, + taskInfo.FirstEventID, + taskInfo.NextEventID, + workflowCache, + executionManager, + logger, + ) + if err != nil { + return nil, err + } + if currentVersionHistory == nil { + return nil, nil + } + var newEvents *commonpb.DataBlob + if len(taskInfo.NewRunID) != 0 { + newVersionHistory, newEventBlob, err := getVersionHistoryAndEvents( + ctx, + shardID, + definition.NewWorkflowKey(taskInfo.NamespaceID, taskInfo.WorkflowID, taskInfo.NewRunID), + taskInfo.Version, + common.FirstEventID, + common.FirstEventID+1, + workflowCache, + executionManager, + logger, + ) + if err != nil { + return nil, err + } + if newVersionHistory != nil { + newEvents = newEventBlob + } + } + + return &replicationspb.ReplicationTask{ + TaskType: enumsspb.REPLICATION_TASK_TYPE_HISTORY_V2_TASK, + SourceTaskId: taskInfo.TaskID, + Attributes: &replicationspb.ReplicationTask_HistoryTaskAttributes{ + HistoryTaskAttributes: &replicationspb.HistoryTaskAttributes{ + NamespaceId: taskInfo.NamespaceID, + WorkflowId: taskInfo.WorkflowID, + RunId: taskInfo.RunID, + VersionHistoryItems: currentVersionHistory, + Events: currentEvents, + NewRunEvents: newEvents, + }, + }, + VisibilityTime: &taskInfo.VisibilityTimestamp, + }, nil +} + +func generateStateReplicationTask( + ctx context.Context, + workflowKey definition.WorkflowKey, + workflowCache wcache.Cache, + action func(workflow.MutableState) (*replicationspb.ReplicationTask, error), +) (retReplicationTask *replicationspb.ReplicationTask, retError error) { + wfContext, release, err := workflowCache.GetOrCreateWorkflowExecution( + ctx, + namespace.ID(workflowKey.NamespaceID), + commonpb.WorkflowExecution{ + WorkflowId: workflowKey.WorkflowID, + RunId: workflowKey.RunID, + }, + workflow.CallerTypeTask, + ) + if err != nil { + return nil, err + } + defer func() { release(retError) }() + + ms, err := wfContext.LoadMutableState(ctx) + switch err.(type) { + case nil: + return action(ms) + case *serviceerror.NotFound, *serviceerror.NamespaceNotFound: + return nil, nil + default: + return nil, err + } +} + +func getVersionHistoryAndEvents( + ctx context.Context, + shardID int32, + workflowKey definition.WorkflowKey, + eventVersion int64, + firstEventID int64, + nextEventID int64, + workflowCache wcache.Cache, + executionManager persistence.ExecutionManager, + logger log.Logger, +) ([]*historyspb.VersionHistoryItem, *commonpb.DataBlob, error) { + versionHistory, branchToken, err := getBranchToken( + ctx, + workflowKey, + workflowCache, + firstEventID, + eventVersion, + ) + if err != nil { + return nil, nil, err + } + if versionHistory == nil { + return nil, nil, nil + } + events, err := getEventsBlob(ctx, shardID, branchToken, firstEventID, nextEventID, executionManager) + if err != nil { + return nil, nil, convertGetHistoryError(workflowKey, logger, err) + } + return versionHistory, events, nil +} + +func getBranchToken( + ctx context.Context, + workflowKey definition.WorkflowKey, + workflowCache wcache.Cache, + eventID int64, + eventVersion int64, +) (_ []*historyspb.VersionHistoryItem, _ []byte, retError error) { + wfContext, release, err := workflowCache.GetOrCreateWorkflowExecution( + ctx, + namespace.ID(workflowKey.NamespaceID), + commonpb.WorkflowExecution{ + WorkflowId: workflowKey.WorkflowID, + RunId: workflowKey.RunID, + }, + workflow.CallerTypeTask, + ) + if err != nil { + return nil, nil, err + } + defer func() { release(retError) }() + + ms, err := wfContext.LoadMutableState(ctx) + switch err.(type) { + case nil: + return getVersionHistoryItems(ms, eventID, eventVersion) + case *serviceerror.NotFound, *serviceerror.NamespaceNotFound: + return nil, nil, nil + default: + return nil, nil, err + } +} + +func getEventsBlob( + ctx context.Context, + shardID int32, + branchToken []byte, + firstEventID int64, + nextEventID int64, + executionManager persistence.ExecutionManager, +) (*commonpb.DataBlob, error) { + + var eventBatchBlobs []*commonpb.DataBlob + var pageToken []byte + req := &persistence.ReadHistoryBranchRequest{ + BranchToken: branchToken, + MinEventID: firstEventID, + MaxEventID: nextEventID, + PageSize: 1, + NextPageToken: pageToken, + ShardID: shardID, + } + + for { + resp, err := executionManager.ReadRawHistoryBranch(ctx, req) + if err != nil { + return nil, err + } + + req.NextPageToken = resp.NextPageToken + eventBatchBlobs = append(eventBatchBlobs, resp.HistoryEventBlobs...) + + if len(req.NextPageToken) == 0 { + break + } + } + + if len(eventBatchBlobs) != 1 { + return nil, serviceerror.NewInternal("replicatorQueueProcessor encountered more than 1 NDC raw event batch") + } + + return eventBatchBlobs[0], nil +} + +func getVersionHistoryItems( + mutableState workflow.MutableState, + eventID int64, + version int64, +) ([]*historyspb.VersionHistoryItem, []byte, error) { + versionHistories := mutableState.GetExecutionInfo().GetVersionHistories() + versionHistoryIndex, err := versionhistory.FindFirstVersionHistoryIndexByVersionHistoryItem( + versionHistories, + versionhistory.NewVersionHistoryItem( + eventID, + version, + ), + ) + if err != nil { + return nil, nil, err + } + + versionHistoryBranch, err := versionhistory.GetVersionHistory(versionHistories, versionHistoryIndex) + if err != nil { + return nil, nil, err + } + return versionhistory.CopyVersionHistory(versionHistoryBranch).GetItems(), versionHistoryBranch.GetBranchToken(), nil +} + +func convertGetHistoryError( + workflowKey definition.WorkflowKey, + logger log.Logger, + err error, +) error { + switch err.(type) { + case *serviceerror.NotFound: + // bypass this corrupted workflow to unblock the replication queue. + logger.Error("Cannot get history from missing workflow", + tag.WorkflowNamespaceID(workflowKey.NamespaceID), + tag.WorkflowID(workflowKey.WorkflowID), + tag.WorkflowRunID(workflowKey.RunID), + tag.Error(err)) + return nil + case *serviceerror.DataLoss: + // bypass this corrupted workflow to unblock the replication queue. + logger.Error("Cannot get history from corrupted workflow", + tag.WorkflowNamespaceID(workflowKey.NamespaceID), + tag.WorkflowID(workflowKey.WorkflowID), + tag.WorkflowRunID(workflowKey.RunID), + tag.Error(err)) + return nil + default: + return err + } +} diff --git a/service/history/replication/raw_task_converter_test.go b/service/history/replication/raw_task_converter_test.go new file mode 100644 index 00000000000..a65129f2a33 --- /dev/null +++ b/service/history/replication/raw_task_converter_test.go @@ -0,0 +1,768 @@ +// 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. + +package replication + +import ( + "context" + "testing" + "time" + + "github.com/golang/mock/gomock" + "github.com/pborman/uuid" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + commonpb "go.temporal.io/api/common/v1" + "go.temporal.io/api/enums/v1" + "go.temporal.io/api/serviceerror" + + enumsspb "go.temporal.io/server/api/enums/v1" + historyspb "go.temporal.io/server/api/history/v1" + persistencespb "go.temporal.io/server/api/persistence/v1" + replicationspb "go.temporal.io/server/api/replication/v1" + "go.temporal.io/server/common" + "go.temporal.io/server/common/definition" + "go.temporal.io/server/common/failure" + "go.temporal.io/server/common/log" + "go.temporal.io/server/common/namespace" + "go.temporal.io/server/common/payloads" + "go.temporal.io/server/common/persistence" + "go.temporal.io/server/common/primitives/timestamp" + "go.temporal.io/server/service/history/shard" + "go.temporal.io/server/service/history/tasks" + "go.temporal.io/server/service/history/tests" + "go.temporal.io/server/service/history/workflow" + wcache "go.temporal.io/server/service/history/workflow/cache" +) + +type ( + rawTaskConverterSuite struct { + suite.Suite + *require.Assertions + + controller *gomock.Controller + shardContext *shard.ContextTest + workflowCache *wcache.MockCache + executionManager *persistence.MockExecutionManager + logger log.Logger + + namespaceID string + workflowID string + + runID string + workflowContext *workflow.MockContext + mutableState *workflow.MockMutableState + releaseFn wcache.ReleaseCacheFunc + lockReleased bool + + newRunID string + newWorkflowContext *workflow.MockContext + newMutableState *workflow.MockMutableState + newReleaseFn wcache.ReleaseCacheFunc + newLockReleased bool + } +) + +func TestRawTaskConverterSuite(t *testing.T) { + s := new(rawTaskConverterSuite) + suite.Run(t, s) +} + +func (s *rawTaskConverterSuite) SetupSuite() { + +} + +func (s *rawTaskConverterSuite) TearDownSuite() { + +} + +func (s *rawTaskConverterSuite) SetupTest() { + s.Assertions = require.New(s.T()) + + s.controller = gomock.NewController(s.T()) + s.shardContext = shard.NewTestContext( + s.controller, + &persistencespb.ShardInfo{ + ShardId: 0, + RangeId: 1, + Owner: "test-shard-owner", + }, + tests.NewDynamicConfig(), + ) + s.workflowCache = wcache.NewMockCache(s.controller) + s.executionManager = s.shardContext.Resource.ExecutionMgr + s.logger = s.shardContext.GetLogger() + + s.namespaceID = tests.NamespaceID.String() + s.workflowID = uuid.New() + + s.runID = uuid.New() + s.workflowContext = workflow.NewMockContext(s.controller) + s.mutableState = workflow.NewMockMutableState(s.controller) + s.releaseFn = func(error) { s.lockReleased = true } + + s.newRunID = uuid.New() + s.newWorkflowContext = workflow.NewMockContext(s.controller) + s.newMutableState = workflow.NewMockMutableState(s.controller) + s.newReleaseFn = func(error) { s.lockReleased = true } +} + +func (s *rawTaskConverterSuite) TearDownTest() { + s.controller.Finish() + s.shardContext.StopForTest() +} + +func (s *rawTaskConverterSuite) TestConvertActivityStateReplicationTask_WorkflowMissing() { + ctx := context.Background() + scheduledEventID := int64(144) + version := int64(288) + taskID := int64(1444) + task := &tasks.SyncActivityTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + ScheduledEventID: scheduledEventID, + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(nil, serviceerror.NewNotFound("")) + + result, err := convertActivityStateReplicationTask(ctx, task, s.workflowCache) + s.NoError(err) + s.Nil(result) + s.True(s.lockReleased) +} + +func (s *rawTaskConverterSuite) TestConvertActivityStateReplicationTask_WorkflowCompleted() { + ctx := context.Background() + scheduledEventID := int64(144) + version := int64(288) + taskID := int64(1444) + task := &tasks.SyncActivityTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + ScheduledEventID: scheduledEventID, + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(s.mutableState, nil) + s.mutableState.EXPECT().IsWorkflowExecutionRunning().Return(false).AnyTimes() + + result, err := convertActivityStateReplicationTask(ctx, task, s.workflowCache) + s.NoError(err) + s.Nil(result) + s.True(s.lockReleased) +} + +func (s *rawTaskConverterSuite) TestConvertActivityStateReplicationTask_ActivityCompleted() { + ctx := context.Background() + scheduledEventID := int64(144) + version := int64(288) + taskID := int64(1444) + task := &tasks.SyncActivityTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + ScheduledEventID: scheduledEventID, + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(s.mutableState, nil) + s.mutableState.EXPECT().IsWorkflowExecutionRunning().Return(true).AnyTimes() + s.mutableState.EXPECT().GetActivityInfo(scheduledEventID).Return(nil, false).AnyTimes() + + result, err := convertActivityStateReplicationTask(ctx, task, s.workflowCache) + s.NoError(err) + s.Nil(result) + s.True(s.lockReleased) +} + +func (s *rawTaskConverterSuite) TestConvertActivityStateReplicationTask_ActivityScheduled() { + ctx := context.Background() + scheduledEventID := int64(144) + version := int64(333) + taskID := int64(1444) + task := &tasks.SyncActivityTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + ScheduledEventID: scheduledEventID, + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + + activityVersion := version + activityScheduledEventID := scheduledEventID + activityScheduledTime := time.Now().UTC() + activityStartedEventID := common.EmptyEventID + activityAttempt := int32(16384) + activityDetails := payloads.EncodeString("some random activity progress") + activityLastFailure := failure.NewServerFailure("some random reason", false) + activityLastWorkerIdentity := "some random worker identity" + versionHistory := &historyspb.VersionHistory{ + BranchToken: []byte{}, + Items: []*historyspb.VersionHistoryItem{ + { + EventId: scheduledEventID, + Version: version, + }, + }, + } + versionHistories := &historyspb.VersionHistories{ + CurrentVersionHistoryIndex: 0, + Histories: []*historyspb.VersionHistory{ + versionHistory, + }, + } + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(s.mutableState, nil) + s.mutableState.EXPECT().IsWorkflowExecutionRunning().Return(true).AnyTimes() + s.mutableState.EXPECT().GetActivityInfo(scheduledEventID).Return(&persistencespb.ActivityInfo{ + Version: activityVersion, + ScheduledEventId: activityScheduledEventID, + ScheduledTime: &activityScheduledTime, + StartedEventId: activityStartedEventID, + StartedTime: nil, + LastHeartbeatUpdateTime: nil, + LastHeartbeatDetails: activityDetails, + Attempt: activityAttempt, + RetryLastFailure: activityLastFailure, + RetryLastWorkerIdentity: activityLastWorkerIdentity, + }, true).AnyTimes() + s.mutableState.EXPECT().GetExecutionInfo().Return(&persistencespb.WorkflowExecutionInfo{ + VersionHistories: versionHistories, + }).AnyTimes() + + result, err := convertActivityStateReplicationTask(ctx, task, s.workflowCache) + s.NoError(err) + s.Equal(&replicationspb.ReplicationTask{ + SourceTaskId: taskID, + TaskType: enumsspb.REPLICATION_TASK_TYPE_SYNC_ACTIVITY_TASK, + Attributes: &replicationspb.ReplicationTask_SyncActivityTaskAttributes{ + SyncActivityTaskAttributes: &replicationspb.SyncActivityTaskAttributes{ + NamespaceId: s.namespaceID, + WorkflowId: s.workflowID, + RunId: s.runID, + Version: activityVersion, + ScheduledEventId: activityScheduledEventID, + ScheduledTime: &activityScheduledTime, + StartedEventId: activityStartedEventID, + StartedTime: nil, + LastHeartbeatTime: nil, + Details: activityDetails, + Attempt: activityAttempt, + LastFailure: activityLastFailure, + LastWorkerIdentity: activityLastWorkerIdentity, + VersionHistory: versionHistory, + }, + }, + VisibilityTime: timestamp.TimePtr(task.VisibilityTimestamp), + }, result) + s.True(s.lockReleased) +} + +func (s *rawTaskConverterSuite) TestConvertActivityStateReplicationTask_ActivityStarted() { + ctx := context.Background() + scheduledEventID := int64(144) + version := int64(333) + taskID := int64(1444) + task := &tasks.SyncActivityTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + ScheduledEventID: scheduledEventID, + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + + activityVersion := version + activityScheduledEventID := scheduledEventID + activityScheduledTime := time.Now().UTC() + activityStartedEventID := activityScheduledEventID + 1 + activityStartedTime := activityScheduledTime.Add(time.Minute) + activityHeartbeatTime := activityStartedTime.Add(time.Minute) + activityAttempt := int32(16384) + activityDetails := payloads.EncodeString("some random activity progress") + activityLastFailure := failure.NewServerFailure("some random reason", false) + activityLastWorkerIdentity := "some random worker identity" + versionHistory := &historyspb.VersionHistory{ + BranchToken: []byte{}, + Items: []*historyspb.VersionHistoryItem{ + { + EventId: scheduledEventID, + Version: version, + }, + }, + } + versionHistories := &historyspb.VersionHistories{ + CurrentVersionHistoryIndex: 0, + Histories: []*historyspb.VersionHistory{ + versionHistory, + }, + } + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(s.mutableState, nil) + s.mutableState.EXPECT().IsWorkflowExecutionRunning().Return(true).AnyTimes() + s.mutableState.EXPECT().GetActivityInfo(scheduledEventID).Return(&persistencespb.ActivityInfo{ + Version: activityVersion, + ScheduledEventId: activityScheduledEventID, + ScheduledTime: &activityScheduledTime, + StartedEventId: activityStartedEventID, + StartedTime: &activityStartedTime, + LastHeartbeatUpdateTime: &activityHeartbeatTime, + LastHeartbeatDetails: activityDetails, + Attempt: activityAttempt, + RetryLastFailure: activityLastFailure, + RetryLastWorkerIdentity: activityLastWorkerIdentity, + }, true).AnyTimes() + s.mutableState.EXPECT().GetExecutionInfo().Return(&persistencespb.WorkflowExecutionInfo{ + VersionHistories: versionHistories, + }).AnyTimes() + + result, err := convertActivityStateReplicationTask(ctx, task, s.workflowCache) + s.NoError(err) + s.Equal(&replicationspb.ReplicationTask{ + SourceTaskId: taskID, + TaskType: enumsspb.REPLICATION_TASK_TYPE_SYNC_ACTIVITY_TASK, + Attributes: &replicationspb.ReplicationTask_SyncActivityTaskAttributes{ + SyncActivityTaskAttributes: &replicationspb.SyncActivityTaskAttributes{ + NamespaceId: s.namespaceID, + WorkflowId: s.workflowID, + RunId: s.runID, + Version: activityVersion, + ScheduledEventId: activityScheduledEventID, + ScheduledTime: &activityScheduledTime, + StartedEventId: activityStartedEventID, + StartedTime: &activityStartedTime, + LastHeartbeatTime: &activityHeartbeatTime, + Details: activityDetails, + Attempt: activityAttempt, + LastFailure: activityLastFailure, + LastWorkerIdentity: activityLastWorkerIdentity, + VersionHistory: versionHistory, + }, + }, + VisibilityTime: timestamp.TimePtr(task.VisibilityTimestamp), + }, result) + s.True(s.lockReleased) +} + +func (s *rawTaskConverterSuite) TestConvertWorkflowStateReplicationTask_WorkflowOpen() { + ctx := context.Background() + version := int64(288) + taskID := int64(1444) + task := &tasks.SyncWorkflowStateTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(s.mutableState, nil) + s.mutableState.EXPECT().GetWorkflowStateStatus().Return(enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING, enums.WORKFLOW_EXECUTION_STATUS_RUNNING).AnyTimes() + + result, err := convertWorkflowStateReplicationTask(ctx, task, s.workflowCache) + s.NoError(err) + s.Nil(result) + s.True(s.lockReleased) +} + +func (s *rawTaskConverterSuite) TestConvertWorkflowStateReplicationTask_WorkflowClosed() { + ctx := context.Background() + version := int64(288) + taskID := int64(1444) + task := &tasks.SyncWorkflowStateTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(s.mutableState, nil) + s.mutableState.EXPECT().CloneToProto().Return(&persistencespb.WorkflowMutableState{ + ExecutionInfo: &persistencespb.WorkflowExecutionInfo{ + NamespaceId: s.namespaceID, + WorkflowId: s.workflowID, + }, + ExecutionState: &persistencespb.WorkflowExecutionState{ + RunId: s.runID, + }, + }) + s.mutableState.EXPECT().GetWorkflowStateStatus().Return(enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED, enums.WORKFLOW_EXECUTION_STATUS_COMPLETED).AnyTimes() + + result, err := convertWorkflowStateReplicationTask(ctx, task, s.workflowCache) + s.NoError(err) + s.Equal(&replicationspb.ReplicationTask{ + TaskType: enumsspb.REPLICATION_TASK_TYPE_SYNC_WORKFLOW_STATE_TASK, + SourceTaskId: task.TaskID, + Attributes: &replicationspb.ReplicationTask_SyncWorkflowStateTaskAttributes{ + SyncWorkflowStateTaskAttributes: &replicationspb.SyncWorkflowStateTaskAttributes{ + WorkflowState: &persistencespb.WorkflowMutableState{ + ExecutionInfo: &persistencespb.WorkflowExecutionInfo{ + NamespaceId: s.namespaceID, + WorkflowId: s.workflowID, + }, + ExecutionState: &persistencespb.WorkflowExecutionState{ + RunId: s.runID, + }, + }, + }, + }, + VisibilityTime: &task.VisibilityTimestamp, + }, result) + s.True(s.lockReleased) +} + +func (s *rawTaskConverterSuite) TestConvertHistoryReplicationTask_WorkflowMissing() { + ctx := context.Background() + shardID := int32(12) + firstEventID := int64(999) + nextEventID := int64(1911) + version := int64(288) + taskID := int64(1444) + task := &tasks.HistoryReplicationTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + FirstEventID: firstEventID, + NextEventID: nextEventID, + NewRunID: s.newRunID, + } + + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(nil, serviceerror.NewNotFound("")) + + result, err := convertHistoryReplicationTask(ctx, task, shardID, s.workflowCache, s.executionManager, s.logger) + s.NoError(err) + s.Nil(result) + s.True(s.lockReleased) +} + +func (s *rawTaskConverterSuite) TestConvertHistoryReplicationTask_WithNewRun() { + ctx := context.Background() + shardID := int32(12) + firstEventID := int64(999) + nextEventID := int64(1911) + version := int64(288) + taskID := int64(1444) + task := &tasks.HistoryReplicationTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + FirstEventID: firstEventID, + NextEventID: nextEventID, + NewRunID: s.newRunID, + } + versionHistory := &historyspb.VersionHistory{ + BranchToken: []byte("branch token"), + Items: []*historyspb.VersionHistoryItem{ + { + EventId: nextEventID - 1, + Version: version, + }, + }, + } + versionHistories := &historyspb.VersionHistories{ + CurrentVersionHistoryIndex: 0, + Histories: []*historyspb.VersionHistory{ + versionHistory, + }, + } + events := &commonpb.DataBlob{ + EncodingType: enums.ENCODING_TYPE_PROTO3, + Data: []byte("data"), + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(s.mutableState, nil) + s.mutableState.EXPECT().GetExecutionInfo().Return(&persistencespb.WorkflowExecutionInfo{ + VersionHistories: versionHistories, + }).AnyTimes() + s.executionManager.EXPECT().ReadRawHistoryBranch(gomock.Any(), &persistence.ReadHistoryBranchRequest{ + BranchToken: versionHistory.BranchToken, + MinEventID: firstEventID, + MaxEventID: nextEventID, + PageSize: 1, + NextPageToken: nil, + ShardID: shardID, + }).Return(&persistence.ReadRawHistoryBranchResponse{ + HistoryEventBlobs: []*commonpb.DataBlob{events}, + NextPageToken: nil, + }, nil) + + newVersionHistory := &historyspb.VersionHistory{ + BranchToken: []byte("new branch token"), + Items: []*historyspb.VersionHistoryItem{ + { + EventId: 3, + Version: version, + }, + }, + } + newVersionHistories := &historyspb.VersionHistories{ + CurrentVersionHistoryIndex: 0, + Histories: []*historyspb.VersionHistory{ + newVersionHistory, + }, + } + newEvents := &commonpb.DataBlob{ + EncodingType: enums.ENCODING_TYPE_PROTO3, + Data: []byte("new data"), + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.newRunID, + }, + workflow.CallerTypeTask, + ).Return(s.newWorkflowContext, s.releaseFn, nil) + s.newWorkflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(s.newMutableState, nil) + s.newMutableState.EXPECT().GetExecutionInfo().Return(&persistencespb.WorkflowExecutionInfo{ + VersionHistories: newVersionHistories, + }).AnyTimes() + s.executionManager.EXPECT().ReadRawHistoryBranch(gomock.Any(), &persistence.ReadHistoryBranchRequest{ + BranchToken: newVersionHistory.BranchToken, + MinEventID: common.FirstEventID, + MaxEventID: common.FirstEventID + 1, + PageSize: 1, + NextPageToken: nil, + ShardID: shardID, + }).Return(&persistence.ReadRawHistoryBranchResponse{ + HistoryEventBlobs: []*commonpb.DataBlob{newEvents}, + NextPageToken: nil, + }, nil) + + result, err := convertHistoryReplicationTask(ctx, task, shardID, s.workflowCache, s.executionManager, s.logger) + s.NoError(err) + s.Equal(&replicationspb.ReplicationTask{ + TaskType: enumsspb.REPLICATION_TASK_TYPE_HISTORY_V2_TASK, + SourceTaskId: task.TaskID, + Attributes: &replicationspb.ReplicationTask_HistoryTaskAttributes{ + HistoryTaskAttributes: &replicationspb.HistoryTaskAttributes{ + NamespaceId: task.NamespaceID, + WorkflowId: task.WorkflowID, + RunId: task.RunID, + VersionHistoryItems: versionHistory.Items, + Events: events, + NewRunEvents: newEvents, + }, + }, + VisibilityTime: &task.VisibilityTimestamp, + }, result) + s.True(s.lockReleased) +} + +func (s *rawTaskConverterSuite) TestConvertHistoryReplicationTask_WithoutNewRun() { + ctx := context.Background() + shardID := int32(12) + firstEventID := int64(999) + nextEventID := int64(1911) + version := int64(288) + taskID := int64(1444) + task := &tasks.HistoryReplicationTask{ + WorkflowKey: definition.NewWorkflowKey( + s.namespaceID, + s.workflowID, + s.runID, + ), + VisibilityTimestamp: time.Now().UTC(), + TaskID: taskID, + Version: version, + FirstEventID: firstEventID, + NextEventID: nextEventID, + NewRunID: "", + } + versionHistory := &historyspb.VersionHistory{ + BranchToken: []byte("branch token"), + Items: []*historyspb.VersionHistoryItem{ + { + EventId: nextEventID - 1, + Version: version, + }, + }, + } + versionHistories := &historyspb.VersionHistories{ + CurrentVersionHistoryIndex: 0, + Histories: []*historyspb.VersionHistory{ + versionHistory, + }, + } + events := &commonpb.DataBlob{ + EncodingType: enums.ENCODING_TYPE_PROTO3, + Data: []byte("data"), + } + s.workflowCache.EXPECT().GetOrCreateWorkflowExecution( + gomock.Any(), + namespace.ID(s.namespaceID), + commonpb.WorkflowExecution{ + WorkflowId: s.workflowID, + RunId: s.runID, + }, + workflow.CallerTypeTask, + ).Return(s.workflowContext, s.releaseFn, nil) + s.workflowContext.EXPECT().LoadMutableState(gomock.Any()).Return(s.mutableState, nil) + s.mutableState.EXPECT().GetExecutionInfo().Return(&persistencespb.WorkflowExecutionInfo{ + VersionHistories: versionHistories, + }).AnyTimes() + s.executionManager.EXPECT().ReadRawHistoryBranch(gomock.Any(), &persistence.ReadHistoryBranchRequest{ + BranchToken: versionHistory.BranchToken, + MinEventID: firstEventID, + MaxEventID: nextEventID, + PageSize: 1, + NextPageToken: nil, + ShardID: shardID, + }).Return(&persistence.ReadRawHistoryBranchResponse{ + HistoryEventBlobs: []*commonpb.DataBlob{events}, + NextPageToken: nil, + }, nil) + + result, err := convertHistoryReplicationTask(ctx, task, shardID, s.workflowCache, s.executionManager, s.logger) + s.NoError(err) + s.Equal(&replicationspb.ReplicationTask{ + TaskType: enumsspb.REPLICATION_TASK_TYPE_HISTORY_V2_TASK, + SourceTaskId: task.TaskID, + Attributes: &replicationspb.ReplicationTask_HistoryTaskAttributes{ + HistoryTaskAttributes: &replicationspb.HistoryTaskAttributes{ + NamespaceId: task.NamespaceID, + WorkflowId: task.WorkflowID, + RunId: task.RunID, + VersionHistoryItems: versionHistory.Items, + Events: events, + NewRunEvents: nil, + }, + }, + VisibilityTime: &task.VisibilityTimestamp, + }, result) + s.True(s.lockReleased) +} From e67a1ce17538856b79f9dfdf92c433a854b501fc Mon Sep 17 00:00:00 2001 From: David Reiss Date: Thu, 23 Mar 2023 09:40:51 -0700 Subject: [PATCH 6/7] Account for local activity run time in schedule sleep (#4079) --- service/worker/scheduler/workflow.go | 40 ++++++++++++++++------------ 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/service/worker/scheduler/workflow.go b/service/worker/scheduler/workflow.go index c3073174592..85567d05fde 100644 --- a/service/worker/scheduler/workflow.go +++ b/service/worker/scheduler/workflow.go @@ -76,8 +76,6 @@ const ( // query so it can be changed without breaking history.) maxListMatchingTimesCount = 1000 - invalidDuration time.Duration = -1 - rateLimitedErrorType = "RateLimited" ) @@ -118,7 +116,8 @@ type ( SleepWhilePaused bool // If true, don't set timers while paused/out of actions // MaxBufferSize limits the number of buffered starts. This also limits the number of // workflows that can be backfilled at once (since they all have to fit in the buffer). - MaxBufferSize int + MaxBufferSize int + AllowZeroSleep bool // Whether to allow a zero-length timer. Used for workflow compatibility. } ) @@ -150,6 +149,7 @@ var ( IterationsBeforeContinueAsNew: 500, SleepWhilePaused: true, MaxBufferSize: 1000, + AllowZeroSleep: true, } errUpdateConflict = errors.New("conflicting concurrent update") @@ -204,7 +204,7 @@ func (s *scheduler) run() error { s.logger.Warn("Time went backwards", "from", t1, "to", t2) t2 = t1 } - nextSleep := s.processTimeRange( + nextWakeup := s.processTimeRange( t1, t2, // resolve this to the schedule's policy as late as possible enumspb.SCHEDULE_OVERLAP_POLICY_UNSPECIFIED, @@ -215,7 +215,7 @@ func (s *scheduler) run() error { scheduleChanged := s.processSignals() if scheduleChanged { // need to calculate sleep again - nextSleep = s.processTimeRange(t2, t2, enumspb.SCHEDULE_OVERLAP_POLICY_UNSPECIFIED, false) + nextWakeup = s.processTimeRange(t2, t2, enumspb.SCHEDULE_OVERLAP_POLICY_UNSPECIFIED, false) } // try starting workflows in the buffer //nolint:revive @@ -226,7 +226,7 @@ func (s *scheduler) run() error { // 1. requested time elapsed // 2. we got a signal (update, request, refresh) // 3. a workflow that we were watching finished - s.sleep(nextSleep) + s.sleep(nextWakeup) s.updateTweakables() } @@ -333,11 +333,11 @@ func (s *scheduler) processTimeRange( t1, t2 time.Time, overlapPolicy enumspb.ScheduleOverlapPolicy, manual bool, -) time.Duration { +) time.Time { s.logger.Debug("processTimeRange", "t1", t1, "t2", t2, "overlap-policy", overlapPolicy, "manual", manual) if s.cspec == nil { - return invalidDuration + return time.Time{} } catchupWindow := s.getCatchupWindow() @@ -350,10 +350,8 @@ func (s *scheduler) processTimeRange( return s.cspec.getNextTime(t1) }).Get(&next)) t1 = next.Next - if t1.IsZero() { - return invalidDuration - } else if t1.After(t2) { - return t1.Sub(t2) + if t1.IsZero() || t1.After(t2) { + return t1 } if !manual && t2.Sub(t1) > catchupWindow { s.logger.Warn("Schedule missed catchup window", "now", t2, "time", t1) @@ -395,7 +393,7 @@ func (s *scheduler) canTakeScheduledAction(manual, decrement bool) bool { return false } -func (s *scheduler) sleep(nextSleep time.Duration) { +func (s *scheduler) sleep(nextWakeup time.Time) { sel := workflow.NewSelector(s.ctx) upCh := workflow.GetSignalChannel(s.ctx, SignalNameUpdate) @@ -413,11 +411,19 @@ func (s *scheduler) sleep(nextSleep time.Duration) { // if we're paused or out of actions, we don't need to wake up until we get an update if s.tweakables.SleepWhilePaused && !s.canTakeScheduledAction(false, false) { - nextSleep = invalidDuration + nextWakeup = time.Time{} } - if nextSleep != invalidDuration { - tmr := workflow.NewTimer(s.ctx, nextSleep) + if !nextWakeup.IsZero() { + sleepTime := nextWakeup.Sub(s.now()) + // A previous version of this workflow passed around sleep duration instead of wakeup time, + // which means it always set a timer even in cases where sleepTime comes out negative. For + // compatibility, we have to continue setting a positive timer in those cases. The value + // doesn't have to match, though. + if !s.tweakables.AllowZeroSleep && sleepTime <= 0 { + sleepTime = time.Second + } + tmr := workflow.NewTimer(s.ctx, sleepTime) sel.AddFuture(tmr, func(_ workflow.Future) {}) } @@ -425,7 +431,7 @@ func (s *scheduler) sleep(nextSleep time.Duration) { sel.AddFuture(s.watchingFuture, s.wfWatcherReturned) } - s.logger.Debug("sleeping", "next-sleep", nextSleep, "watching", s.watchingFuture != nil) + s.logger.Debug("sleeping", "next-wakeup", nextWakeup, "watching", s.watchingFuture != nil) sel.Select(s.ctx) for sel.HasPending() { sel.Select(s.ctx) From 5210ad4c2957d1e9804b259384196402d849e742 Mon Sep 17 00:00:00 2001 From: wxing1292 Date: Thu, 23 Mar 2023 10:42:03 -0700 Subject: [PATCH 7/7] Add gRPC replication stream (#4057) * Add gRPC replication stream --- api/adminservice/v1/request_response.pb.go | 1182 +++++++++++--- api/adminservice/v1/service.pb.go | 183 ++- api/adminservicemock/v1/service.pb.mock.go | 306 ++++ api/historyservice/v1/request_response.pb.go | 1355 +++++++++++++---- api/historyservice/v1/service.pb.go | 233 ++- api/historyservicemock/v1/service.pb.mock.go | 306 ++++ api/replication/v1/message.pb.go | 513 +++++-- client/admin/client.go | 11 + client/admin/metric_client.go | 14 + client/admin/retryable_client.go | 18 + client/history/client.go | 20 + client/history/metadata.go | 116 ++ client/history/metadata_test.go | 134 ++ client/history/metric_client.go | 14 + client/history/retryable_client.go | 18 + cmd/tools/rpcwrappers/main.go | 8 + common/metrics/metric_defs.go | 8 +- go.mod | 1 + .../adminservice/v1/request_response.proto | 14 + .../server/api/adminservice/v1/service.proto | 3 + .../historyservice/v1/request_response.proto | 14 + .../api/historyservice/v1/service.proto | 3 + .../server/api/replication/v1/message.proto | 5 + service/frontend/adminHandler.go | 65 + service/history/configs/quotas.go | 1 + service/history/handler.go | 35 + service/history/ndc/stream.go | 111 ++ 27 files changed, 3917 insertions(+), 774 deletions(-) create mode 100644 client/history/metadata.go create mode 100644 client/history/metadata_test.go create mode 100644 service/history/ndc/stream.go diff --git a/api/adminservice/v1/request_response.pb.go b/api/adminservice/v1/request_response.pb.go index fc7255d07e5..0d3130fb3ed 100644 --- a/api/adminservice/v1/request_response.pb.go +++ b/api/adminservice/v1/request_response.pb.go @@ -3182,6 +3182,172 @@ func (m *DeleteWorkflowExecutionResponse) GetWarnings() []string { return nil } +type StreamWorkflowReplicationMessagesRequest struct { + ShardId int32 `protobuf:"varint,1,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"` + // Types that are valid to be assigned to Attributes: + // *StreamWorkflowReplicationMessagesRequest_SyncReplicationState + Attributes isStreamWorkflowReplicationMessagesRequest_Attributes `protobuf_oneof:"attributes"` +} + +func (m *StreamWorkflowReplicationMessagesRequest) Reset() { + *m = StreamWorkflowReplicationMessagesRequest{} +} +func (*StreamWorkflowReplicationMessagesRequest) ProtoMessage() {} +func (*StreamWorkflowReplicationMessagesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_cc07c1a2abe7cb51, []int{55} +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_StreamWorkflowReplicationMessagesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_StreamWorkflowReplicationMessagesRequest.Merge(m, src) +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_Size() int { + return m.Size() +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_StreamWorkflowReplicationMessagesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_StreamWorkflowReplicationMessagesRequest proto.InternalMessageInfo + +type isStreamWorkflowReplicationMessagesRequest_Attributes interface { + isStreamWorkflowReplicationMessagesRequest_Attributes() + Equal(interface{}) bool + MarshalTo([]byte) (int, error) + Size() int +} + +type StreamWorkflowReplicationMessagesRequest_SyncReplicationState struct { + SyncReplicationState *v15.SyncReplicationState `protobuf:"bytes,2,opt,name=sync_replication_state,json=syncReplicationState,proto3,oneof" json:"sync_replication_state,omitempty"` +} + +func (*StreamWorkflowReplicationMessagesRequest_SyncReplicationState) isStreamWorkflowReplicationMessagesRequest_Attributes() { +} + +func (m *StreamWorkflowReplicationMessagesRequest) GetAttributes() isStreamWorkflowReplicationMessagesRequest_Attributes { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *StreamWorkflowReplicationMessagesRequest) GetShardId() int32 { + if m != nil { + return m.ShardId + } + return 0 +} + +func (m *StreamWorkflowReplicationMessagesRequest) GetSyncReplicationState() *v15.SyncReplicationState { + if x, ok := m.GetAttributes().(*StreamWorkflowReplicationMessagesRequest_SyncReplicationState); ok { + return x.SyncReplicationState + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*StreamWorkflowReplicationMessagesRequest) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*StreamWorkflowReplicationMessagesRequest_SyncReplicationState)(nil), + } +} + +type StreamWorkflowReplicationMessagesResponse struct { + ShardId int32 `protobuf:"varint,1,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"` + // Types that are valid to be assigned to Attributes: + // *StreamWorkflowReplicationMessagesResponse_ReplicationMessages + Attributes isStreamWorkflowReplicationMessagesResponse_Attributes `protobuf_oneof:"attributes"` +} + +func (m *StreamWorkflowReplicationMessagesResponse) Reset() { + *m = StreamWorkflowReplicationMessagesResponse{} +} +func (*StreamWorkflowReplicationMessagesResponse) ProtoMessage() {} +func (*StreamWorkflowReplicationMessagesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cc07c1a2abe7cb51, []int{56} +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_StreamWorkflowReplicationMessagesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_StreamWorkflowReplicationMessagesResponse.Merge(m, src) +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_Size() int { + return m.Size() +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_StreamWorkflowReplicationMessagesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_StreamWorkflowReplicationMessagesResponse proto.InternalMessageInfo + +type isStreamWorkflowReplicationMessagesResponse_Attributes interface { + isStreamWorkflowReplicationMessagesResponse_Attributes() + Equal(interface{}) bool + MarshalTo([]byte) (int, error) + Size() int +} + +type StreamWorkflowReplicationMessagesResponse_ReplicationMessages struct { + ReplicationMessages *v15.ReplicationMessages `protobuf:"bytes,2,opt,name=replication_messages,json=replicationMessages,proto3,oneof" json:"replication_messages,omitempty"` +} + +func (*StreamWorkflowReplicationMessagesResponse_ReplicationMessages) isStreamWorkflowReplicationMessagesResponse_Attributes() { +} + +func (m *StreamWorkflowReplicationMessagesResponse) GetAttributes() isStreamWorkflowReplicationMessagesResponse_Attributes { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *StreamWorkflowReplicationMessagesResponse) GetShardId() int32 { + if m != nil { + return m.ShardId + } + return 0 +} + +func (m *StreamWorkflowReplicationMessagesResponse) GetReplicationMessages() *v15.ReplicationMessages { + if x, ok := m.GetAttributes().(*StreamWorkflowReplicationMessagesResponse_ReplicationMessages); ok { + return x.ReplicationMessages + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*StreamWorkflowReplicationMessagesResponse) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*StreamWorkflowReplicationMessagesResponse_ReplicationMessages)(nil), + } +} + func init() { proto.RegisterType((*RebuildMutableStateRequest)(nil), "temporal.server.api.adminservice.v1.RebuildMutableStateRequest") proto.RegisterType((*RebuildMutableStateResponse)(nil), "temporal.server.api.adminservice.v1.RebuildMutableStateResponse") @@ -3244,6 +3410,8 @@ func init() { proto.RegisterType((*GetTaskQueueTasksResponse)(nil), "temporal.server.api.adminservice.v1.GetTaskQueueTasksResponse") proto.RegisterType((*DeleteWorkflowExecutionRequest)(nil), "temporal.server.api.adminservice.v1.DeleteWorkflowExecutionRequest") proto.RegisterType((*DeleteWorkflowExecutionResponse)(nil), "temporal.server.api.adminservice.v1.DeleteWorkflowExecutionResponse") + proto.RegisterType((*StreamWorkflowReplicationMessagesRequest)(nil), "temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesRequest") + proto.RegisterType((*StreamWorkflowReplicationMessagesResponse)(nil), "temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesResponse") } func init() { @@ -3251,196 +3419,201 @@ func init() { } var fileDescriptor_cc07c1a2abe7cb51 = []byte{ - // 3013 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1a, 0x4b, 0x6c, 0x1b, 0xc7, - 0xd5, 0xcb, 0x8f, 0x44, 0x3e, 0xfd, 0xd7, 0x96, 0x45, 0x53, 0x11, 0xa5, 0x30, 0x8e, 0x63, 0xbb, - 0x09, 0x55, 0x2b, 0x6d, 0xe3, 0x24, 0x35, 0x02, 0x59, 0x76, 0x64, 0xa5, 0x52, 0x3e, 0x2b, 0xc7, - 0x6e, 0x03, 0x04, 0x9b, 0xe1, 0xee, 0x88, 0x5a, 0x78, 0x7f, 0xd9, 0x19, 0xd2, 0x56, 0x80, 0x7e, - 0xd0, 0xb4, 0x28, 0x7a, 0x28, 0x6a, 0xa0, 0x28, 0x10, 0xe4, 0xd4, 0x63, 0x0b, 0xb4, 0xe8, 0xad, - 0xf7, 0xde, 0x7a, 0x0c, 0xda, 0x4b, 0xd0, 0x02, 0x4d, 0x23, 0x5f, 0x7a, 0xcc, 0xb9, 0xa7, 0x62, - 0x7e, 0xcb, 0x5d, 0x72, 0x49, 0x51, 0xb5, 0x9d, 0x02, 0xb9, 0x71, 0xdf, 0xbc, 0xf7, 0xe6, 0xcd, - 0xfb, 0xcd, 0x7b, 0x6f, 0x08, 0x2f, 0x51, 0xec, 0x85, 0x41, 0x84, 0xdc, 0x55, 0x82, 0xa3, 0x0e, - 0x8e, 0x56, 0x51, 0xe8, 0xac, 0x22, 0xdb, 0x73, 0x7c, 0xf6, 0xed, 0x58, 0x78, 0xb5, 0x73, 0x69, - 0x35, 0xc2, 0xef, 0xb7, 0x31, 0xa1, 0x66, 0x84, 0x49, 0x18, 0xf8, 0x04, 0x37, 0xc2, 0x28, 0xa0, - 0x81, 0xfe, 0x94, 0xa2, 0x6d, 0x08, 0xda, 0x06, 0x0a, 0x9d, 0x46, 0x92, 0xb6, 0xd1, 0xb9, 0x54, - 0x5d, 0x6e, 0x05, 0x41, 0xcb, 0xc5, 0xab, 0x9c, 0xa4, 0xd9, 0xde, 0x5b, 0xa5, 0x8e, 0x87, 0x09, - 0x45, 0x5e, 0x28, 0xb8, 0x54, 0x6b, 0xbd, 0x08, 0x76, 0x3b, 0x42, 0xd4, 0x09, 0x7c, 0xb9, 0xfe, - 0xa4, 0x8d, 0x43, 0xec, 0xdb, 0xd8, 0xb7, 0x1c, 0x4c, 0x56, 0x5b, 0x41, 0x2b, 0xe0, 0x70, 0xfe, - 0x4b, 0xa2, 0xd4, 0xe3, 0x43, 0x30, 0xe9, 0xb1, 0xdf, 0xf6, 0x08, 0x13, 0xdb, 0x0a, 0x3c, 0x2f, - 0x66, 0x73, 0x2e, 0x1b, 0x87, 0x22, 0x72, 0xc7, 0x7c, 0xbf, 0x8d, 0xdb, 0xf2, 0x50, 0xd5, 0xb3, - 0x29, 0x3c, 0xc1, 0x82, 0x21, 0x7a, 0x98, 0x10, 0xd4, 0x52, 0x58, 0x4f, 0xa7, 0xb0, 0x3a, 0x38, - 0x22, 0x4e, 0x16, 0x5a, 0x7a, 0xd3, 0xbb, 0x41, 0x74, 0x67, 0xcf, 0x0d, 0xee, 0xf6, 0xe3, 0x3d, - 0x9b, 0x65, 0x05, 0xcb, 0x6d, 0x13, 0x8a, 0xa3, 0x7e, 0xec, 0x0b, 0x59, 0xd8, 0xd9, 0xa7, 0xbe, - 0x38, 0x1c, 0x55, 0xec, 0x20, 0x71, 0x9f, 0x19, 0x8a, 0xcb, 0x14, 0x35, 0x4c, 0xda, 0x7d, 0x87, - 0xd0, 0x20, 0x3a, 0xe8, 0x97, 0xb6, 0x91, 0x85, 0xed, 0x23, 0x0f, 0x93, 0x10, 0x09, 0xf7, 0x4a, - 0xe3, 0x7f, 0x3d, 0x0b, 0x3f, 0xc2, 0xa1, 0xeb, 0x58, 0xdc, 0x2d, 0xfa, 0x29, 0x5e, 0xcc, 0xa2, - 0x08, 0x99, 0x4d, 0x08, 0xc5, 0xbe, 0xd8, 0x43, 0x1e, 0xd5, 0xf4, 0x30, 0x45, 0x36, 0xa2, 0x48, - 0x92, 0x3e, 0x3f, 0x02, 0x29, 0xbe, 0x87, 0xad, 0x36, 0xdb, 0x99, 0x48, 0xa2, 0x57, 0x46, 0x20, - 0x52, 0xb6, 0x36, 0xbd, 0x36, 0x45, 0x4d, 0x17, 0x9b, 0x84, 0x22, 0x3a, 0x54, 0x25, 0x3d, 0x0c, - 0x98, 0xbe, 0xe5, 0x86, 0xf5, 0x0f, 0x35, 0xa8, 0x1a, 0xb8, 0xd9, 0x76, 0x5c, 0x7b, 0x47, 0xb0, - 0xdb, 0x65, 0xdc, 0x0c, 0x11, 0x96, 0xfa, 0x13, 0x50, 0x8e, 0xf5, 0x59, 0xd1, 0x56, 0xb4, 0xf3, - 0x65, 0xa3, 0x0b, 0xd0, 0x37, 0xa1, 0x1c, 0x9f, 0xa0, 0x92, 0x5b, 0xd1, 0xce, 0x4f, 0xac, 0x5d, - 0x88, 0x05, 0xe0, 0x21, 0x2b, 0x3d, 0xa6, 0x73, 0xa9, 0x71, 0x5b, 0x4a, 0x7d, 0x5d, 0x11, 0x18, - 0x5d, 0xda, 0xfa, 0x12, 0x2c, 0x66, 0x0a, 0x21, 0x72, 0x42, 0xfd, 0x27, 0x1a, 0x2c, 0x5e, 0xc3, - 0xc4, 0x8a, 0x9c, 0x26, 0xfe, 0x3f, 0x4a, 0xf9, 0xa7, 0x1c, 0x3c, 0x91, 0x2d, 0x86, 0x90, 0x53, - 0x3f, 0x03, 0x25, 0xb2, 0x8f, 0x22, 0xdb, 0x74, 0x6c, 0x29, 0xc6, 0x38, 0xff, 0xde, 0xb2, 0xf5, - 0x27, 0x61, 0x52, 0xba, 0xb1, 0x89, 0x6c, 0x3b, 0xe2, 0x72, 0x94, 0x8d, 0x09, 0x09, 0x5b, 0xb7, - 0xed, 0x48, 0xdf, 0x87, 0x93, 0x16, 0xb2, 0xf6, 0x71, 0xda, 0xae, 0x95, 0x3c, 0x97, 0xf8, 0x72, - 0x23, 0x2b, 0x23, 0x26, 0x0c, 0x9b, 0x94, 0x3e, 0x25, 0xdc, 0x1c, 0x67, 0x9a, 0x04, 0xe9, 0x3e, - 0x9c, 0x66, 0x8e, 0xda, 0x44, 0xa4, 0x77, 0xb3, 0xc2, 0x43, 0x6e, 0x76, 0x4a, 0xf1, 0x4d, 0x42, - 0xeb, 0x7f, 0xd5, 0xa0, 0xaa, 0x14, 0x77, 0x43, 0x9c, 0xf8, 0x46, 0x40, 0xa8, 0x32, 0x1f, 0xd3, - 0x4d, 0x40, 0x28, 0x57, 0x0c, 0x26, 0x44, 0xaa, 0x6e, 0x82, 0xc1, 0xd6, 0x05, 0x28, 0xa5, 0x59, - 0xa6, 0xba, 0x62, 0x57, 0xb3, 0x29, 0xe3, 0xe7, 0x7b, 0x8d, 0xff, 0x5d, 0xd0, 0xe3, 0x78, 0xe9, - 0x7a, 0x41, 0xe1, 0xb8, 0x5e, 0x30, 0x77, 0xb7, 0x17, 0x54, 0xff, 0x67, 0xc2, 0x29, 0x53, 0x87, - 0x92, 0xce, 0xf0, 0x14, 0x4c, 0x71, 0x11, 0x89, 0xe9, 0xb7, 0xbd, 0x26, 0x8e, 0xf8, 0xb1, 0x8a, - 0xc6, 0xa4, 0x00, 0xbe, 0xce, 0x61, 0xfa, 0x22, 0x94, 0xd5, 0xb9, 0x48, 0x25, 0xb7, 0x92, 0x3f, - 0x5f, 0x34, 0x4a, 0xf2, 0x60, 0x44, 0x7f, 0x17, 0x66, 0xe2, 0x83, 0x98, 0xdc, 0x8a, 0xd2, 0x19, - 0xbe, 0x91, 0x69, 0x9f, 0x18, 0x97, 0x1d, 0xe1, 0x75, 0xf5, 0xb1, 0xc1, 0xe8, 0xb6, 0xfc, 0xbd, - 0xc0, 0x98, 0xf6, 0x53, 0x30, 0xbd, 0x02, 0xe3, 0x4a, 0xe3, 0x45, 0xe1, 0xac, 0xf2, 0xf3, 0xb5, - 0x42, 0xa9, 0x30, 0x5b, 0xac, 0x37, 0x60, 0x6e, 0xc3, 0x0d, 0x08, 0xde, 0x65, 0xf2, 0x28, 0x5b, - 0xf5, 0xba, 0x78, 0xd7, 0x10, 0xf5, 0x53, 0xa0, 0x27, 0xf1, 0x65, 0xec, 0x3e, 0x0b, 0x33, 0x9b, - 0x98, 0x8e, 0xca, 0xe3, 0x3d, 0x98, 0xed, 0x62, 0x4b, 0x45, 0x6e, 0x03, 0x48, 0x74, 0x7f, 0x2f, - 0xe0, 0x04, 0x13, 0x6b, 0xcf, 0x8d, 0xe2, 0xa1, 0x9c, 0x0d, 0x3f, 0xba, 0x50, 0x32, 0xfb, 0x59, - 0xff, 0x45, 0x0e, 0x16, 0xb6, 0x1d, 0x42, 0xa5, 0xc9, 0x6e, 0xb2, 0x5c, 0x78, 0xb4, 0x60, 0xfa, - 0xab, 0x50, 0xb2, 0x10, 0xc5, 0xad, 0x20, 0x3a, 0xe0, 0x0e, 0x38, 0xbd, 0x76, 0x31, 0x53, 0x04, - 0x7e, 0xa9, 0xb1, 0xcd, 0x19, 0xe3, 0x0d, 0x49, 0x61, 0xc4, 0xb4, 0xfa, 0x0d, 0x00, 0x5e, 0x17, - 0x44, 0xc8, 0x6f, 0x29, 0x73, 0x5e, 0xc8, 0xe4, 0x24, 0x53, 0x83, 0xe2, 0x65, 0x30, 0x02, 0xa3, - 0x4c, 0xd5, 0x4f, 0x7d, 0x09, 0xa0, 0x89, 0xa8, 0xb5, 0x6f, 0x12, 0xe7, 0x03, 0x11, 0xb8, 0x45, - 0xa3, 0xcc, 0x21, 0xbb, 0xce, 0x07, 0x58, 0x3f, 0x07, 0x33, 0x3e, 0xbe, 0x47, 0xcd, 0x10, 0xb5, - 0xb0, 0x49, 0x83, 0x3b, 0xd8, 0xe7, 0x56, 0x9e, 0x34, 0xa6, 0x18, 0xf8, 0x4d, 0xd4, 0xc2, 0x37, - 0x19, 0x90, 0x5d, 0x00, 0x95, 0x7e, 0x7d, 0x48, 0xd5, 0xbf, 0x02, 0x45, 0x7e, 0x59, 0x54, 0xb4, - 0x95, 0xfc, 0x40, 0x41, 0x7b, 0xca, 0x32, 0x21, 0xad, 0xa0, 0xcb, 0x92, 0x22, 0x97, 0x25, 0xc5, - 0x47, 0x39, 0x28, 0x30, 0x3a, 0x96, 0x0b, 0xba, 0x3e, 0x1f, 0xa7, 0xd1, 0x89, 0x18, 0xb6, 0x65, - 0xeb, 0xcb, 0x30, 0x11, 0x87, 0xb4, 0x4c, 0x07, 0x65, 0x03, 0x14, 0x68, 0xcb, 0xd6, 0xe7, 0x61, - 0x2c, 0x6a, 0xfb, 0x6c, 0x4d, 0xa4, 0x83, 0x62, 0xd4, 0xf6, 0xb7, 0x6c, 0x7d, 0x01, 0xc6, 0xb9, - 0xea, 0x1d, 0x9b, 0x6b, 0x2b, 0x6f, 0x8c, 0xb1, 0xcf, 0x2d, 0x5b, 0xdf, 0x00, 0xae, 0x56, 0x93, - 0x1e, 0x84, 0x98, 0x2b, 0x69, 0x7a, 0xed, 0xdc, 0xd1, 0xc6, 0xbd, 0x79, 0x10, 0x62, 0xa3, 0x44, - 0xe5, 0x2f, 0xfd, 0x0a, 0x94, 0xf7, 0x9c, 0x08, 0x9b, 0xac, 0x06, 0xad, 0x8c, 0x71, 0xbb, 0x56, - 0x1b, 0xa2, 0xfe, 0x6c, 0xa8, 0xfa, 0xb3, 0x71, 0x53, 0x15, 0xa8, 0x57, 0x0b, 0xf7, 0x3f, 0x5b, - 0xd6, 0x8c, 0x12, 0x23, 0x61, 0x40, 0x16, 0x8c, 0xb2, 0xd4, 0xab, 0x8c, 0x73, 0xe1, 0xd4, 0x67, - 0xfd, 0xef, 0x1a, 0xcc, 0x19, 0xd8, 0x0b, 0x3a, 0x98, 0x2b, 0xf6, 0xcb, 0x73, 0xd5, 0x84, 0xbe, - 0xf2, 0x29, 0x7d, 0x6d, 0xc1, 0x4c, 0xc7, 0x21, 0x4e, 0xd3, 0x71, 0x1d, 0x7a, 0x20, 0x0e, 0x5c, - 0x18, 0xf1, 0xc0, 0xd3, 0x5d, 0x42, 0xb6, 0xc4, 0x72, 0x46, 0xf2, 0x6c, 0x32, 0x67, 0xfc, 0x2a, - 0x0f, 0xcf, 0x6c, 0x62, 0xda, 0x9f, 0x86, 0xd1, 0x5d, 0xe9, 0xa6, 0xb7, 0xd6, 0x12, 0x97, 0x47, - 0xca, 0x61, 0xca, 0xfd, 0x0e, 0xf3, 0xa8, 0x0a, 0x00, 0xfd, 0x2c, 0x4c, 0x13, 0x8a, 0x22, 0x6a, - 0xe2, 0x0e, 0xf6, 0x69, 0x57, 0x31, 0x93, 0x1c, 0x7a, 0x9d, 0x01, 0xb7, 0x6c, 0xbd, 0x01, 0x27, - 0x93, 0x58, 0xca, 0xac, 0xc2, 0xe7, 0xe6, 0xba, 0xa8, 0xb7, 0xc4, 0x82, 0xbe, 0x02, 0x93, 0xd8, - 0xb7, 0xbb, 0x3c, 0x8b, 0x1c, 0x11, 0xb0, 0x6f, 0x2b, 0x8e, 0x17, 0x61, 0xae, 0x8b, 0xa1, 0xf8, - 0x8d, 0x71, 0xb4, 0x19, 0x85, 0xa6, 0xb8, 0x5d, 0x84, 0x39, 0x0f, 0xdd, 0x73, 0xbc, 0xb6, 0x27, - 0x82, 0x8e, 0x67, 0x87, 0x71, 0xee, 0x21, 0x33, 0x72, 0x81, 0x85, 0xdd, 0xa0, 0x1c, 0x51, 0xca, - 0x88, 0xce, 0xd7, 0x0a, 0x25, 0x6d, 0x36, 0x57, 0xff, 0x4d, 0x0e, 0xce, 0x1f, 0x6d, 0x15, 0x99, - 0x39, 0x32, 0x58, 0x6b, 0x19, 0xac, 0x99, 0x2f, 0xa9, 0xba, 0x88, 0xe7, 0x2e, 0x2c, 0xae, 0xc1, - 0x89, 0xb5, 0x95, 0x41, 0x16, 0xba, 0x86, 0x28, 0xba, 0xea, 0x06, 0x4d, 0x63, 0x5a, 0x12, 0x5e, - 0x15, 0x74, 0xfa, 0x6d, 0x98, 0x91, 0xba, 0x31, 0xe5, 0x8a, 0xcc, 0xaf, 0x8d, 0xa3, 0xf2, 0xab, - 0xd4, 0x9d, 0x3c, 0x85, 0x31, 0xdd, 0x49, 0x7d, 0xeb, 0xe7, 0x61, 0x56, 0xc9, 0xe8, 0x07, 0x36, - 0xe6, 0x77, 0x75, 0x61, 0x25, 0x7f, 0x3e, 0x1f, 0x8b, 0xf0, 0x7a, 0x60, 0xe3, 0x2d, 0x9b, 0xd4, - 0xef, 0x6b, 0xb0, 0xb4, 0x89, 0xa9, 0xd1, 0x6d, 0x29, 0x76, 0x44, 0x3b, 0x11, 0x5f, 0x31, 0xdb, - 0x30, 0xc6, 0xb5, 0xa1, 0x52, 0x6a, 0xf6, 0x55, 0x9e, 0xe8, 0x49, 0x98, 0x7c, 0x09, 0x7e, 0x5c, - 0x6b, 0x86, 0xe4, 0xc1, 0x9c, 0x5f, 0x75, 0x1f, 0xcc, 0xe1, 0x55, 0x55, 0x29, 0x61, 0xac, 0x06, - 0xa8, 0x7f, 0x9c, 0x83, 0xda, 0x20, 0x91, 0xa4, 0xad, 0xbe, 0x0f, 0xd3, 0x22, 0x97, 0xc8, 0xde, - 0x47, 0xc9, 0x76, 0x6b, 0xa4, 0x74, 0x3f, 0x9c, 0xb9, 0xb8, 0x84, 0x15, 0xf4, 0xba, 0x4f, 0xa3, - 0x03, 0x43, 0xd4, 0x45, 0x0a, 0x56, 0x3d, 0x00, 0xbd, 0x1f, 0x49, 0x9f, 0x85, 0xfc, 0x1d, 0x7c, - 0x20, 0x73, 0x1b, 0xfb, 0xa9, 0xef, 0x40, 0xb1, 0x83, 0xdc, 0x36, 0x96, 0x21, 0xfc, 0xc2, 0x31, - 0x35, 0x17, 0x4b, 0x26, 0xb8, 0xbc, 0x94, 0xbb, 0xac, 0xd5, 0xff, 0xac, 0xc1, 0xb9, 0x4d, 0x4c, - 0xe3, 0x62, 0x69, 0x88, 0xe1, 0x5e, 0x84, 0x33, 0x2e, 0xe2, 0x83, 0x0a, 0x1a, 0x39, 0xb8, 0x83, - 0x63, 0x6d, 0xa9, 0x0c, 0x9c, 0x37, 0x4e, 0x33, 0x04, 0x43, 0xad, 0x4b, 0x06, 0x5b, 0x76, 0x4c, - 0x1a, 0x46, 0x81, 0x85, 0x09, 0x49, 0x93, 0xe6, 0xba, 0xa4, 0x6f, 0xaa, 0xf5, 0x2e, 0x69, 0xaf, - 0x81, 0xf3, 0xfd, 0x06, 0xfe, 0x01, 0xcf, 0x95, 0xc3, 0x8f, 0x20, 0x0d, 0xbd, 0x0b, 0xa5, 0x84, - 0x89, 0x1f, 0x4a, 0x89, 0x31, 0xa3, 0xfa, 0x07, 0xb0, 0xb2, 0x89, 0xe9, 0xb5, 0xed, 0xb7, 0x86, - 0x28, 0xef, 0x96, 0xac, 0x7a, 0x58, 0x05, 0xa7, 0xbc, 0xeb, 0xb8, 0x5b, 0xb3, 0x1b, 0x42, 0x14, - 0x73, 0x54, 0xfe, 0x22, 0xf5, 0x9f, 0x6a, 0xf0, 0xe4, 0x90, 0xcd, 0xe5, 0xb1, 0xdf, 0x83, 0xb9, - 0x04, 0x5b, 0x33, 0x59, 0xd1, 0x3c, 0xff, 0x3f, 0x08, 0x61, 0xcc, 0x46, 0x69, 0x00, 0xa9, 0xff, - 0x4d, 0x83, 0x53, 0x06, 0x46, 0x61, 0xe8, 0x1e, 0xf0, 0x64, 0x4c, 0x06, 0xdd, 0x4e, 0x85, 0xfe, - 0xdb, 0x29, 0xbb, 0x43, 0xc9, 0x3d, 0x7c, 0x87, 0xa2, 0x5f, 0x86, 0x31, 0x7e, 0x65, 0x10, 0x99, - 0x07, 0x8f, 0x4e, 0xa9, 0x12, 0x5f, 0x26, 0xfc, 0x05, 0x98, 0xef, 0x39, 0x94, 0xbc, 0x9f, 0xff, - 0x93, 0x83, 0xea, 0xba, 0x6d, 0xef, 0x62, 0x14, 0x59, 0xfb, 0xeb, 0x94, 0x46, 0x4e, 0xb3, 0x4d, - 0xbb, 0xd6, 0xfe, 0xb1, 0x06, 0x73, 0x84, 0xaf, 0x99, 0x28, 0x5e, 0x94, 0x0a, 0x7f, 0x7b, 0xa4, - 0x9c, 0x32, 0x98, 0x79, 0xa3, 0x17, 0x2e, 0x52, 0xca, 0x2c, 0xe9, 0x01, 0xb3, 0xf2, 0xd8, 0xf1, - 0x6d, 0x7c, 0x2f, 0x99, 0x18, 0xcb, 0x1c, 0xc2, 0x42, 0x45, 0x7f, 0x16, 0x74, 0x72, 0xc7, 0x09, - 0x4d, 0x62, 0xed, 0x63, 0x0f, 0x99, 0xed, 0xd0, 0x56, 0xbd, 0x76, 0xc9, 0x98, 0x65, 0x2b, 0xbb, - 0x7c, 0xe1, 0x6d, 0x0e, 0x4f, 0xf7, 0x98, 0x85, 0x9e, 0x1e, 0xb3, 0xea, 0xc2, 0x7c, 0xa6, 0x54, - 0xc9, 0x1c, 0x56, 0x16, 0x39, 0xec, 0x4a, 0x32, 0x87, 0x4d, 0xaf, 0x3d, 0x93, 0xb6, 0x48, 0x5c, - 0x91, 0x6d, 0x31, 0x39, 0xb1, 0x7d, 0x8b, 0xa1, 0xf2, 0x3a, 0x33, 0x91, 0xb3, 0x96, 0x60, 0x31, - 0x53, 0x3d, 0xd2, 0x36, 0x3f, 0xd7, 0x60, 0x49, 0x94, 0x54, 0x83, 0xcc, 0xf3, 0xb5, 0x41, 0xd6, - 0x29, 0x1f, 0x5f, 0x8d, 0x43, 0x9b, 0xef, 0xfa, 0x0a, 0xd4, 0x06, 0x89, 0x22, 0xa5, 0xfd, 0x1e, - 0x54, 0x59, 0xbf, 0x37, 0x40, 0xd2, 0xf4, 0xe6, 0xda, 0xd0, 0xcd, 0x73, 0xbd, 0x9b, 0x7f, 0x3c, - 0x06, 0x8b, 0x99, 0xbc, 0x65, 0x56, 0xf8, 0x50, 0x83, 0x39, 0xab, 0x4d, 0x68, 0xe0, 0xf5, 0x7b, - 0xe9, 0xc8, 0x37, 0xdf, 0x20, 0xee, 0x8d, 0x0d, 0xce, 0xb9, 0xcf, 0x4d, 0xad, 0x1e, 0x30, 0x97, - 0x82, 0x1c, 0x10, 0x8a, 0x53, 0x52, 0xe4, 0x1e, 0x91, 0x14, 0xbb, 0x9c, 0x73, 0x7f, 0xb0, 0xf4, - 0x80, 0xf5, 0x16, 0x8c, 0x7b, 0x28, 0x0c, 0x1d, 0xbf, 0x55, 0xc9, 0xf3, 0xad, 0x77, 0x1e, 0x7a, - 0xeb, 0x1d, 0xc1, 0x4f, 0xec, 0xa8, 0xb8, 0xeb, 0x3e, 0x2c, 0x22, 0xdb, 0x36, 0xfb, 0x13, 0x9e, - 0x68, 0xee, 0x45, 0x1b, 0xb1, 0x9a, 0x8e, 0x0a, 0x85, 0x9c, 0x99, 0xf7, 0xf8, 0x8d, 0x50, 0x41, - 0xb6, 0x9d, 0xb9, 0xc2, 0x42, 0x33, 0xd3, 0x12, 0x8f, 0x25, 0x34, 0x79, 0x22, 0xc8, 0xd2, 0xf8, - 0xe3, 0xd9, 0xed, 0x25, 0x98, 0x4c, 0x2a, 0x39, 0x63, 0x93, 0x53, 0xc9, 0x4d, 0xca, 0xc9, 0x24, - 0xf2, 0x32, 0x9c, 0x56, 0xb3, 0xab, 0x0d, 0x51, 0x4b, 0x24, 0x6e, 0xac, 0x54, 0xc5, 0xa1, 0xf5, - 0x57, 0x1c, 0xbf, 0x1b, 0x83, 0x85, 0x3e, 0x6a, 0x19, 0x55, 0x3f, 0x84, 0x39, 0xd2, 0x0e, 0xc3, - 0x20, 0xa2, 0xd8, 0x36, 0x2d, 0xd7, 0xe1, 0xd7, 0x8f, 0x08, 0x2a, 0x63, 0x24, 0x9f, 0x1a, 0xc0, - 0xb8, 0xb1, 0xab, 0xb8, 0x6e, 0x08, 0xa6, 0xca, 0x95, 0x7b, 0xc0, 0xfa, 0xd3, 0x30, 0x2d, 0xb8, - 0xc7, 0x8d, 0x92, 0x38, 0xfc, 0x94, 0x80, 0xaa, 0x36, 0xe9, 0x36, 0xcc, 0x78, 0xd8, 0x6b, 0xe2, - 0x88, 0xec, 0x3b, 0xa1, 0x70, 0xbe, 0x61, 0xcd, 0x82, 0x7a, 0xce, 0xe8, 0x5c, 0x6a, 0xec, 0xc4, - 0x64, 0x62, 0xaa, 0xe6, 0xa5, 0xbe, 0x59, 0xce, 0x52, 0xfa, 0x8b, 0xef, 0xfb, 0xb2, 0x84, 0x64, - 0x14, 0x74, 0xc5, 0x3e, 0xf5, 0xb2, 0xfe, 0x51, 0xb5, 0x1b, 0xa2, 0x2c, 0xb7, 0x82, 0xb6, 0x4f, - 0x79, 0xbf, 0x57, 0x34, 0xe6, 0xe4, 0x12, 0xaf, 0x98, 0x37, 0xd8, 0x02, 0xcb, 0xe7, 0x89, 0xc1, - 0x97, 0xc9, 0x96, 0x45, 0xc7, 0x57, 0x36, 0x66, 0x13, 0x0b, 0xbb, 0x0c, 0xae, 0x5f, 0x80, 0xd9, - 0x44, 0xef, 0x2e, 0x70, 0x4b, 0x1c, 0x37, 0xd1, 0xd3, 0x0b, 0xd4, 0x4d, 0x98, 0x54, 0xfd, 0x14, - 0xd7, 0x4f, 0x99, 0xeb, 0xe7, 0x6c, 0xda, 0x53, 0x25, 0x46, 0xa2, 0x8b, 0xe2, 0x5a, 0x99, 0xe8, - 0x74, 0x3f, 0xf4, 0x6f, 0x43, 0x75, 0x0f, 0x39, 0x6e, 0x90, 0x30, 0x8a, 0xe9, 0xf8, 0x56, 0x84, - 0x3d, 0xec, 0xd3, 0x0a, 0xf0, 0x02, 0xb8, 0xa2, 0x30, 0x62, 0x2e, 0x72, 0x5d, 0xbf, 0x0c, 0x15, - 0xc7, 0x77, 0xa8, 0x83, 0x5c, 0xb3, 0x97, 0x4b, 0x65, 0x42, 0x14, 0xcf, 0x72, 0xfd, 0xd5, 0x34, - 0x0b, 0xfd, 0x0a, 0x2c, 0x3a, 0xc4, 0x6c, 0xb9, 0x41, 0x13, 0xb9, 0x66, 0xb7, 0x0c, 0xc3, 0x3e, - 0x6a, 0xba, 0xd8, 0xae, 0x4c, 0xf2, 0xcb, 0xbe, 0xe2, 0x90, 0x4d, 0x8e, 0x11, 0x57, 0xd0, 0xd7, - 0xc5, 0x7a, 0x75, 0x03, 0xe6, 0x33, 0x9d, 0xee, 0x58, 0x81, 0xf6, 0x0e, 0x9c, 0xdc, 0x76, 0x08, - 0x95, 0xde, 0x1c, 0xdf, 0x6c, 0x8b, 0x50, 0xee, 0x76, 0xe7, 0xa2, 0xc7, 0x29, 0x85, 0x43, 0xda, - 0xf2, 0xcc, 0xa1, 0xd9, 0x2f, 0x35, 0x38, 0x95, 0x66, 0x2e, 0x83, 0xf0, 0x0d, 0x28, 0x49, 0x87, - 0x1a, 0x5e, 0xe7, 0xf6, 0xcc, 0x4b, 0x25, 0x9f, 0x1d, 0xf9, 0x8e, 0x65, 0xc4, 0x4c, 0x46, 0x96, - 0xe8, 0xd7, 0x1a, 0x2c, 0xaf, 0xdb, 0xf6, 0x1b, 0x91, 0xa8, 0x9b, 0xd8, 0xe5, 0x4f, 0x7b, 0x13, - 0xcc, 0x05, 0x98, 0xdd, 0x8b, 0x02, 0x9f, 0x62, 0xdf, 0xee, 0x99, 0xf8, 0xcf, 0x28, 0xb8, 0x9a, - 0xfa, 0x6f, 0xc2, 0x8a, 0x30, 0x96, 0x19, 0x71, 0x4e, 0xa6, 0x0a, 0x1d, 0x2b, 0xf0, 0x7d, 0x6c, - 0xc5, 0x85, 0x72, 0xc9, 0x58, 0x12, 0x78, 0xa9, 0x0d, 0x37, 0x62, 0xa4, 0x7a, 0x1d, 0x56, 0x06, - 0x8b, 0x25, 0x4b, 0x91, 0x57, 0xa0, 0x2a, 0x8a, 0x95, 0x4c, 0xa9, 0x47, 0x48, 0x8b, 0xfc, 0x11, - 0x2b, 0x83, 0x41, 0x77, 0xa8, 0x75, 0x26, 0x61, 0x2d, 0x99, 0x46, 0x14, 0xff, 0x5d, 0x98, 0xe7, - 0x3d, 0xe2, 0x3e, 0x46, 0x11, 0x6d, 0x62, 0x44, 0xcd, 0xbb, 0x0e, 0xdd, 0x77, 0x7c, 0xd9, 0xa7, - 0x9d, 0xe9, 0x9b, 0xac, 0x5d, 0x93, 0x4f, 0xd9, 0x57, 0x0b, 0x1f, 0x7d, 0xb6, 0xac, 0x19, 0x27, - 0x19, 0xf5, 0x0d, 0x45, 0x7c, 0x9b, 0xd3, 0xea, 0xcb, 0x30, 0x11, 0x85, 0x56, 0xac, 0x65, 0x39, - 0x29, 0x8d, 0x42, 0x4b, 0x29, 0x78, 0x01, 0xc6, 0xf9, 0xcb, 0x4b, 0x3c, 0x2a, 0x1d, 0x63, 0x9f, - 0x7c, 0x24, 0x5a, 0x88, 0x02, 0x57, 0xd4, 0xba, 0xd3, 0xc9, 0x0b, 0x39, 0x6b, 0x7e, 0x98, 0x3a, - 0x91, 0x11, 0xb8, 0xd8, 0xe0, 0xc4, 0xfa, 0xbb, 0x50, 0x25, 0x98, 0xf0, 0x70, 0xe7, 0x53, 0x2f, - 0x6c, 0x9b, 0x68, 0x8f, 0x69, 0x90, 0x8f, 0x0c, 0x8b, 0x23, 0x8e, 0x0c, 0x17, 0x24, 0x8f, 0x5d, - 0xc1, 0x62, 0x9d, 0x71, 0xe0, 0x23, 0xd3, 0x54, 0x0c, 0x8d, 0x1d, 0x1d, 0x43, 0xe3, 0x59, 0x1e, - 0xfb, 0xb1, 0x06, 0xd5, 0x2c, 0xab, 0xc8, 0x48, 0xba, 0x09, 0xd3, 0xc8, 0xa2, 0x4e, 0x07, 0x9b, - 0x32, 0xcd, 0xcb, 0x78, 0x7a, 0xee, 0xa8, 0x5b, 0x22, 0xad, 0x93, 0x29, 0xc1, 0x44, 0x72, 0x1f, - 0x39, 0x9c, 0xfe, 0x90, 0x83, 0x79, 0xd1, 0xde, 0xf6, 0x36, 0xd4, 0xd7, 0xa1, 0xc0, 0xa7, 0xd5, - 0x1a, 0xb7, 0xcf, 0xa5, 0xe1, 0xf6, 0xb9, 0x86, 0x91, 0xbd, 0x8d, 0x29, 0xc5, 0xd1, 0x5b, 0x6d, - 0x2c, 0xeb, 0x08, 0x4e, 0x3e, 0xec, 0x59, 0x8d, 0xdd, 0xa3, 0x41, 0x3b, 0xb2, 0xe2, 0xa0, 0x93, - 0x1e, 0x32, 0x25, 0xa0, 0xf2, 0x7c, 0xfa, 0x0b, 0x2c, 0x3b, 0x33, 0x0c, 0xa6, 0x23, 0x16, 0xd2, - 0x89, 0xd1, 0x86, 0x98, 0x78, 0xce, 0xc7, 0xeb, 0xd7, 0xfd, 0xc4, 0x64, 0x23, 0x73, 0x4e, 0x59, - 0x1c, 0x79, 0x4e, 0x39, 0x96, 0xa5, 0xaf, 0x4f, 0x73, 0x70, 0xba, 0x57, 0x5f, 0xd2, 0x90, 0x8f, - 0x48, 0x61, 0x99, 0xa3, 0x84, 0xdc, 0x23, 0x1c, 0x25, 0x64, 0x9d, 0x35, 0x9f, 0x35, 0x38, 0xf5, - 0xe0, 0x74, 0x9f, 0x24, 0xaa, 0x88, 0x7e, 0xa8, 0xf1, 0xca, 0xa9, 0x5e, 0x91, 0xf8, 0xb3, 0xd9, - 0x3f, 0x34, 0x58, 0x78, 0xb3, 0x1d, 0xb5, 0xf0, 0x57, 0xd1, 0x19, 0xeb, 0x55, 0xa8, 0xf4, 0x1f, - 0x4e, 0xe6, 0xed, 0x3f, 0xe6, 0x60, 0x61, 0x07, 0x7f, 0x45, 0x4f, 0xfe, 0x58, 0xc2, 0xf0, 0x2a, - 0x54, 0xfa, 0x15, 0x76, 0xbc, 0x77, 0x01, 0x56, 0xdb, 0x2c, 0x1a, 0x78, 0x2f, 0xc2, 0x64, 0x5f, - 0x75, 0x76, 0xa9, 0xa7, 0xda, 0xde, 0xc1, 0x5a, 0xfe, 0xf1, 0x3d, 0xfb, 0xc8, 0x69, 0x58, 0x0d, - 0x9e, 0xc8, 0x16, 0xa8, 0xeb, 0x27, 0x4b, 0x06, 0x26, 0xd8, 0xb7, 0x7b, 0xa2, 0x6a, 0xa0, 0xcc, - 0x8f, 0xf0, 0x6d, 0xf3, 0x69, 0x98, 0x4e, 0x97, 0x48, 0xb2, 0xf3, 0x98, 0x8a, 0x92, 0xb5, 0x48, - 0xc6, 0x03, 0x56, 0x31, 0xe3, 0x01, 0xeb, 0x29, 0x98, 0x12, 0x58, 0xe9, 0xa7, 0x26, 0x81, 0x34, - 0xe8, 0xd5, 0x6a, 0xbc, 0xef, 0xd5, 0x6a, 0x19, 0x26, 0x18, 0x86, 0x62, 0x52, 0x8a, 0x11, 0x24, - 0x0b, 0x31, 0x1e, 0xca, 0x56, 0x98, 0xd4, 0xe9, 0xef, 0x73, 0x50, 0xd9, 0xc4, 0x94, 0x01, 0x45, - 0xcc, 0x24, 0xd5, 0x39, 0xfc, 0x5f, 0x3f, 0x4b, 0x72, 0xe4, 0xcc, 0xff, 0x80, 0xa7, 0xa6, 0x43, - 0x54, 0x31, 0xd2, 0xb7, 0x61, 0xa6, 0xbb, 0x2c, 0x5e, 0x7e, 0xf3, 0x3c, 0x88, 0xcf, 0x0e, 0xe8, - 0xc4, 0xbb, 0x32, 0xb0, 0xb8, 0x9d, 0xa2, 0xc9, 0x4f, 0xbd, 0x06, 0x13, 0x9e, 0x23, 0x92, 0x70, - 0x37, 0xe2, 0xca, 0x9e, 0x23, 0xb2, 0xaa, 0xcd, 0xd7, 0xd1, 0xbd, 0x78, 0xbd, 0x28, 0xd7, 0xd1, - 0x3d, 0xb9, 0x9e, 0x7e, 0xcb, 0x1f, 0x1b, 0xe1, 0x2d, 0x3f, 0xb3, 0x98, 0xb9, 0xaf, 0xc1, 0x99, - 0x0c, 0x75, 0xc9, 0xd0, 0xfb, 0x4e, 0xfa, 0x31, 0xff, 0x9b, 0xa3, 0xb4, 0x04, 0xeb, 0xae, 0x1b, - 0x58, 0x88, 0x62, 0x3b, 0xbe, 0x1e, 0x8e, 0xf9, 0xb0, 0xff, 0x33, 0x0d, 0x6a, 0xd7, 0xb0, 0x8b, - 0x29, 0xee, 0x0f, 0xb1, 0x2f, 0xf7, 0xdf, 0x5b, 0x57, 0x60, 0x79, 0xa0, 0x20, 0x52, 0x43, 0x55, - 0x28, 0xdd, 0x45, 0x91, 0xef, 0xf8, 0x2d, 0x35, 0x10, 0x8d, 0xbf, 0xaf, 0xba, 0x9f, 0x7c, 0x5e, - 0x3b, 0xf1, 0xe9, 0xe7, 0xb5, 0x13, 0x5f, 0x7c, 0x5e, 0xd3, 0x7e, 0x74, 0x58, 0xd3, 0x7e, 0x7b, - 0x58, 0xd3, 0xfe, 0x72, 0x58, 0xd3, 0x3e, 0x39, 0xac, 0x69, 0xff, 0x3a, 0xac, 0x69, 0xff, 0x3e, - 0xac, 0x9d, 0xf8, 0xe2, 0xb0, 0xa6, 0xdd, 0x7f, 0x50, 0x3b, 0xf1, 0xc9, 0x83, 0xda, 0x89, 0x4f, - 0x1f, 0xd4, 0x4e, 0xbc, 0xf3, 0xad, 0x56, 0xd0, 0x15, 0xd6, 0x09, 0x86, 0xfc, 0x13, 0xf6, 0xe5, - 0xe4, 0x77, 0x73, 0x8c, 0x97, 0xc3, 0xcf, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x9d, 0x28, - 0xf7, 0x44, 0x2b, 0x00, 0x00, + // 3103 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1a, 0x5b, 0x6c, 0x1c, 0x57, + 0xd5, 0xb3, 0x0f, 0x7b, 0xf7, 0xf8, 0x3d, 0xb1, 0xe3, 0xcd, 0xba, 0x5e, 0xbb, 0xdb, 0x34, 0x75, + 0x42, 0xbb, 0x26, 0x2e, 0xd0, 0xb4, 0x25, 0xaa, 0x6c, 0x27, 0x75, 0x5c, 0xec, 0x3e, 0xc6, 0x69, + 0x02, 0x95, 0xaa, 0xe9, 0xec, 0xcc, 0xf5, 0x7a, 0x94, 0x79, 0x75, 0xee, 0xdd, 0x4d, 0x5c, 0x89, + 0x87, 0x28, 0x08, 0xf1, 0x81, 0x88, 0x84, 0x90, 0xaa, 0x7e, 0xf1, 0x09, 0x12, 0x88, 0x3f, 0xfe, + 0x41, 0x42, 0xe2, 0xb3, 0x82, 0x9f, 0x0a, 0x24, 0x4a, 0xdd, 0x1f, 0x3e, 0xfb, 0xcd, 0x17, 0xba, + 0xaf, 0x79, 0xec, 0xce, 0xae, 0xd7, 0x24, 0x29, 0x52, 0xff, 0x76, 0xce, 0x3d, 0xe7, 0xdc, 0x73, + 0xcf, 0xeb, 0x9e, 0x73, 0xee, 0xc2, 0x0b, 0x04, 0xb9, 0x81, 0x1f, 0x1a, 0xce, 0x1a, 0x46, 0x61, + 0x07, 0x85, 0x6b, 0x46, 0x60, 0xaf, 0x19, 0x96, 0x6b, 0x7b, 0xf4, 0xdb, 0x36, 0xd1, 0x5a, 0xe7, + 0xf2, 0x5a, 0x88, 0xde, 0x6d, 0x23, 0x4c, 0xf4, 0x10, 0xe1, 0xc0, 0xf7, 0x30, 0x6a, 0x04, 0xa1, + 0x4f, 0x7c, 0xf5, 0x09, 0x49, 0xdb, 0xe0, 0xb4, 0x0d, 0x23, 0xb0, 0x1b, 0x49, 0xda, 0x46, 0xe7, + 0x72, 0x75, 0xb9, 0xe5, 0xfb, 0x2d, 0x07, 0xad, 0x31, 0x92, 0x66, 0xfb, 0x60, 0x8d, 0xd8, 0x2e, + 0xc2, 0xc4, 0x70, 0x03, 0xce, 0xa5, 0x5a, 0xeb, 0x46, 0xb0, 0xda, 0xa1, 0x41, 0x6c, 0xdf, 0x13, + 0xeb, 0x8f, 0x5b, 0x28, 0x40, 0x9e, 0x85, 0x3c, 0xd3, 0x46, 0x78, 0xad, 0xe5, 0xb7, 0x7c, 0x06, + 0x67, 0xbf, 0x04, 0x4a, 0x3d, 0x3a, 0x04, 0x95, 0x1e, 0x79, 0x6d, 0x17, 0x53, 0xb1, 0x4d, 0xdf, + 0x75, 0x23, 0x36, 0x17, 0xb2, 0x71, 0x88, 0x81, 0xef, 0xe8, 0xef, 0xb6, 0x51, 0x5b, 0x1c, 0xaa, + 0x7a, 0x3e, 0x85, 0xc7, 0x59, 0x50, 0x44, 0x17, 0x61, 0x6c, 0xb4, 0x24, 0xd6, 0x93, 0x29, 0xac, + 0x0e, 0x0a, 0xb1, 0x9d, 0x85, 0x96, 0xde, 0xf4, 0xae, 0x1f, 0xde, 0x39, 0x70, 0xfc, 0xbb, 0xbd, + 0x78, 0x4f, 0x67, 0x59, 0xc1, 0x74, 0xda, 0x98, 0xa0, 0xb0, 0x17, 0xfb, 0x62, 0x16, 0x76, 0xf6, + 0xa9, 0x2f, 0x0d, 0x46, 0xe5, 0x3b, 0x08, 0xdc, 0xa7, 0x06, 0xe2, 0x52, 0x45, 0x0d, 0x92, 0xf6, + 0xd0, 0xc6, 0xc4, 0x0f, 0x8f, 0x7a, 0xa5, 0x6d, 0x64, 0x61, 0x7b, 0x86, 0x8b, 0x70, 0x60, 0x70, + 0xf7, 0x4a, 0xe3, 0x7f, 0x35, 0x0b, 0x3f, 0x44, 0x81, 0x63, 0x9b, 0xcc, 0x2d, 0x7a, 0x29, 0x9e, + 0xcf, 0xa2, 0x08, 0xa8, 0x4d, 0x30, 0x41, 0x1e, 0xdf, 0x43, 0x1c, 0x55, 0x77, 0x11, 0x31, 0x2c, + 0x83, 0x18, 0x82, 0xf4, 0xd9, 0x21, 0x48, 0xd1, 0x3d, 0x64, 0xb6, 0xe9, 0xce, 0x58, 0x10, 0xbd, + 0x34, 0x04, 0x91, 0xb4, 0xb5, 0xee, 0xb6, 0x89, 0xd1, 0x74, 0x90, 0x8e, 0x89, 0x41, 0x06, 0xaa, + 0xa4, 0x8b, 0x01, 0xd5, 0xb7, 0xd8, 0xb0, 0xfe, 0xbe, 0x02, 0x55, 0x0d, 0x35, 0xdb, 0xb6, 0x63, + 0xed, 0x71, 0x76, 0xfb, 0x94, 0x9b, 0xc6, 0xc3, 0x52, 0x7d, 0x0c, 0xca, 0x91, 0x3e, 0x2b, 0xca, + 0x8a, 0xb2, 0x5a, 0xd6, 0x62, 0x80, 0xba, 0x0d, 0xe5, 0xe8, 0x04, 0x95, 0xdc, 0x8a, 0xb2, 0x3a, + 0xbe, 0x7e, 0x31, 0x12, 0x80, 0x85, 0xac, 0xf0, 0x98, 0xce, 0xe5, 0xc6, 0x6d, 0x21, 0xf5, 0x75, + 0x49, 0xa0, 0xc5, 0xb4, 0xf5, 0x25, 0x58, 0xcc, 0x14, 0x82, 0xe7, 0x84, 0xfa, 0x8f, 0x14, 0x58, + 0xbc, 0x86, 0xb0, 0x19, 0xda, 0x4d, 0xf4, 0x7f, 0x94, 0xf2, 0x0f, 0x39, 0x78, 0x2c, 0x5b, 0x0c, + 0x2e, 0xa7, 0x7a, 0x0e, 0x4a, 0xf8, 0xd0, 0x08, 0x2d, 0xdd, 0xb6, 0x84, 0x18, 0x63, 0xec, 0x7b, + 0xc7, 0x52, 0x1f, 0x87, 0x09, 0xe1, 0xc6, 0xba, 0x61, 0x59, 0x21, 0x93, 0xa3, 0xac, 0x8d, 0x0b, + 0xd8, 0x86, 0x65, 0x85, 0xea, 0x21, 0x9c, 0x31, 0x0d, 0xf3, 0x10, 0xa5, 0xed, 0x5a, 0xc9, 0x33, + 0x89, 0xaf, 0x34, 0xb2, 0x32, 0x62, 0xc2, 0xb0, 0x49, 0xe9, 0x53, 0xc2, 0xcd, 0x32, 0xa6, 0x49, + 0x90, 0xea, 0xc1, 0x59, 0xea, 0xa8, 0x4d, 0x03, 0x77, 0x6f, 0x56, 0x78, 0xc0, 0xcd, 0xe6, 0x24, + 0xdf, 0x24, 0xb4, 0xfe, 0x57, 0x05, 0xaa, 0x52, 0x71, 0x37, 0xf8, 0x89, 0x6f, 0xf8, 0x98, 0x48, + 0xf3, 0x51, 0xdd, 0xf8, 0x98, 0x30, 0xc5, 0x20, 0x8c, 0x85, 0xea, 0xc6, 0x29, 0x6c, 0x83, 0x83, + 0x52, 0x9a, 0xa5, 0xaa, 0x2b, 0xc6, 0x9a, 0x4d, 0x19, 0x3f, 0xdf, 0x6d, 0xfc, 0x6f, 0x83, 0x1a, + 0xc5, 0x4b, 0xec, 0x05, 0x85, 0xd3, 0x7a, 0xc1, 0xec, 0xdd, 0x6e, 0x50, 0xfd, 0x9f, 0x09, 0xa7, + 0x4c, 0x1d, 0x4a, 0x38, 0xc3, 0x13, 0x30, 0xc9, 0x44, 0xc4, 0xba, 0xd7, 0x76, 0x9b, 0x28, 0x64, + 0xc7, 0x2a, 0x6a, 0x13, 0x1c, 0xf8, 0x2a, 0x83, 0xa9, 0x8b, 0x50, 0x96, 0xe7, 0xc2, 0x95, 0xdc, + 0x4a, 0x7e, 0xb5, 0xa8, 0x95, 0xc4, 0xc1, 0xb0, 0xfa, 0x36, 0x4c, 0x47, 0x07, 0xd1, 0x99, 0x15, + 0x85, 0x33, 0x7c, 0x2d, 0xd3, 0x3e, 0x11, 0x2e, 0x3d, 0xc2, 0xab, 0xf2, 0x63, 0x8b, 0xd2, 0xed, + 0x78, 0x07, 0xbe, 0x36, 0xe5, 0xa5, 0x60, 0x6a, 0x05, 0xc6, 0xa4, 0xc6, 0x8b, 0xdc, 0x59, 0xc5, + 0xe7, 0x2b, 0x85, 0x52, 0x61, 0xa6, 0x58, 0x6f, 0xc0, 0xec, 0x96, 0xe3, 0x63, 0xb4, 0x4f, 0xe5, + 0x91, 0xb6, 0xea, 0x76, 0xf1, 0xd8, 0x10, 0xf5, 0x39, 0x50, 0x93, 0xf8, 0x22, 0x76, 0x9f, 0x86, + 0xe9, 0x6d, 0x44, 0x86, 0xe5, 0xf1, 0x0e, 0xcc, 0xc4, 0xd8, 0x42, 0x91, 0xbb, 0x00, 0x02, 0xdd, + 0x3b, 0xf0, 0x19, 0xc1, 0xf8, 0xfa, 0x33, 0xc3, 0x78, 0x28, 0x63, 0xc3, 0x8e, 0xce, 0x95, 0x4c, + 0x7f, 0xd6, 0x7f, 0x96, 0x83, 0x85, 0x5d, 0x1b, 0x13, 0x61, 0xb2, 0x9b, 0x34, 0x17, 0x9e, 0x2c, + 0x98, 0xfa, 0x32, 0x94, 0x4c, 0x83, 0xa0, 0x96, 0x1f, 0x1e, 0x31, 0x07, 0x9c, 0x5a, 0xbf, 0x94, + 0x29, 0x02, 0xbb, 0xd4, 0xe8, 0xe6, 0x94, 0xf1, 0x96, 0xa0, 0xd0, 0x22, 0x5a, 0xf5, 0x06, 0x00, + 0xab, 0x0b, 0x42, 0xc3, 0x6b, 0x49, 0x73, 0x5e, 0xcc, 0xe4, 0x24, 0x52, 0x83, 0xe4, 0xa5, 0x51, + 0x02, 0xad, 0x4c, 0xe4, 0x4f, 0x75, 0x09, 0xa0, 0x69, 0x10, 0xf3, 0x50, 0xc7, 0xf6, 0x7b, 0x3c, + 0x70, 0x8b, 0x5a, 0x99, 0x41, 0xf6, 0xed, 0xf7, 0x90, 0x7a, 0x01, 0xa6, 0x3d, 0x74, 0x8f, 0xe8, + 0x81, 0xd1, 0x42, 0x3a, 0xf1, 0xef, 0x20, 0x8f, 0x59, 0x79, 0x42, 0x9b, 0xa4, 0xe0, 0xd7, 0x8d, + 0x16, 0xba, 0x49, 0x81, 0xf4, 0x02, 0xa8, 0xf4, 0xea, 0x43, 0xa8, 0xfe, 0x25, 0x28, 0xb2, 0xcb, + 0xa2, 0xa2, 0xac, 0xe4, 0xfb, 0x0a, 0xda, 0x55, 0x96, 0x71, 0x69, 0x39, 0x5d, 0x96, 0x14, 0xb9, + 0x2c, 0x29, 0x3e, 0xc8, 0x41, 0x81, 0xd2, 0xd1, 0x5c, 0x10, 0xfb, 0x7c, 0x94, 0x46, 0xc7, 0x23, + 0xd8, 0x8e, 0xa5, 0x2e, 0xc3, 0x78, 0x14, 0xd2, 0x22, 0x1d, 0x94, 0x35, 0x90, 0xa0, 0x1d, 0x4b, + 0x9d, 0x87, 0xd1, 0xb0, 0xed, 0xd1, 0x35, 0x9e, 0x0e, 0x8a, 0x61, 0xdb, 0xdb, 0xb1, 0xd4, 0x05, + 0x18, 0x63, 0xaa, 0xb7, 0x2d, 0xa6, 0xad, 0xbc, 0x36, 0x4a, 0x3f, 0x77, 0x2c, 0x75, 0x0b, 0x98, + 0x5a, 0x75, 0x72, 0x14, 0x20, 0xa6, 0xa4, 0xa9, 0xf5, 0x0b, 0x27, 0x1b, 0xf7, 0xe6, 0x51, 0x80, + 0xb4, 0x12, 0x11, 0xbf, 0xd4, 0xab, 0x50, 0x3e, 0xb0, 0x43, 0xa4, 0xd3, 0x1a, 0xb4, 0x32, 0xca, + 0xec, 0x5a, 0x6d, 0xf0, 0xfa, 0xb3, 0x21, 0xeb, 0xcf, 0xc6, 0x4d, 0x59, 0xa0, 0x6e, 0x16, 0xee, + 0x7f, 0xb2, 0xac, 0x68, 0x25, 0x4a, 0x42, 0x81, 0x34, 0x18, 0x45, 0xa9, 0x57, 0x19, 0x63, 0xc2, + 0xc9, 0xcf, 0xfa, 0xdf, 0x15, 0x98, 0xd5, 0x90, 0xeb, 0x77, 0x10, 0x53, 0xec, 0x17, 0xe7, 0xaa, + 0x09, 0x7d, 0xe5, 0x53, 0xfa, 0xda, 0x81, 0xe9, 0x8e, 0x8d, 0xed, 0xa6, 0xed, 0xd8, 0xe4, 0x88, + 0x1f, 0xb8, 0x30, 0xe4, 0x81, 0xa7, 0x62, 0x42, 0xba, 0x44, 0x73, 0x46, 0xf2, 0x6c, 0x22, 0x67, + 0xfc, 0x22, 0x0f, 0x4f, 0x6d, 0x23, 0xd2, 0x9b, 0x86, 0x8d, 0xbb, 0xc2, 0x4d, 0x6f, 0xad, 0x27, + 0x2e, 0x8f, 0x94, 0xc3, 0x94, 0x7b, 0x1d, 0xe6, 0x61, 0x15, 0x00, 0xea, 0x79, 0x98, 0xc2, 0xc4, + 0x08, 0x89, 0x8e, 0x3a, 0xc8, 0x23, 0xb1, 0x62, 0x26, 0x18, 0xf4, 0x3a, 0x05, 0xee, 0x58, 0x6a, + 0x03, 0xce, 0x24, 0xb1, 0xa4, 0x59, 0xb9, 0xcf, 0xcd, 0xc6, 0xa8, 0xb7, 0xf8, 0x82, 0xba, 0x02, + 0x13, 0xc8, 0xb3, 0x62, 0x9e, 0x45, 0x86, 0x08, 0xc8, 0xb3, 0x24, 0xc7, 0x4b, 0x30, 0x1b, 0x63, + 0x48, 0x7e, 0xa3, 0x0c, 0x6d, 0x5a, 0xa2, 0x49, 0x6e, 0x97, 0x60, 0xd6, 0x35, 0xee, 0xd9, 0x6e, + 0xdb, 0xe5, 0x41, 0xc7, 0xb2, 0xc3, 0x18, 0xf3, 0x90, 0x69, 0xb1, 0x40, 0xc3, 0xae, 0x5f, 0x8e, + 0x28, 0x65, 0x44, 0xe7, 0x2b, 0x85, 0x92, 0x32, 0x93, 0xab, 0xff, 0x2a, 0x07, 0xab, 0x27, 0x5b, + 0x45, 0x64, 0x8e, 0x0c, 0xd6, 0x4a, 0x06, 0x6b, 0xea, 0x4b, 0xb2, 0x2e, 0x62, 0xb9, 0x0b, 0xf1, + 0x6b, 0x70, 0x7c, 0x7d, 0xa5, 0x9f, 0x85, 0xae, 0x19, 0xc4, 0xd8, 0x74, 0xfc, 0xa6, 0x36, 0x25, + 0x08, 0x37, 0x39, 0x9d, 0x7a, 0x1b, 0xa6, 0x85, 0x6e, 0x74, 0xb1, 0x22, 0xf2, 0x6b, 0xe3, 0xa4, + 0xfc, 0x2a, 0x74, 0x27, 0x4e, 0xa1, 0x4d, 0x75, 0x52, 0xdf, 0xea, 0x2a, 0xcc, 0x48, 0x19, 0x3d, + 0xdf, 0x42, 0xec, 0xae, 0x2e, 0xac, 0xe4, 0x57, 0xf3, 0x91, 0x08, 0xaf, 0xfa, 0x16, 0xda, 0xb1, + 0x70, 0xfd, 0xbe, 0x02, 0x4b, 0xdb, 0x88, 0x68, 0x71, 0x4b, 0xb1, 0xc7, 0xdb, 0x89, 0xe8, 0x8a, + 0xd9, 0x85, 0x51, 0xa6, 0x0d, 0x99, 0x52, 0xb3, 0xaf, 0xf2, 0x44, 0x4f, 0x42, 0xe5, 0x4b, 0xf0, + 0x63, 0x5a, 0xd3, 0x04, 0x0f, 0xea, 0xfc, 0xb2, 0xfb, 0xa0, 0x0e, 0x2f, 0xab, 0x4a, 0x01, 0xa3, + 0x35, 0x40, 0xfd, 0xc3, 0x1c, 0xd4, 0xfa, 0x89, 0x24, 0x6c, 0xf5, 0x5d, 0x98, 0xe2, 0xb9, 0x44, + 0xf4, 0x3e, 0x52, 0xb6, 0x5b, 0x43, 0xa5, 0xfb, 0xc1, 0xcc, 0xf9, 0x25, 0x2c, 0xa1, 0xd7, 0x3d, + 0x12, 0x1e, 0x69, 0xbc, 0x2e, 0x92, 0xb0, 0xea, 0x11, 0xa8, 0xbd, 0x48, 0xea, 0x0c, 0xe4, 0xef, + 0xa0, 0x23, 0x91, 0xdb, 0xe8, 0x4f, 0x75, 0x0f, 0x8a, 0x1d, 0xc3, 0x69, 0x23, 0x11, 0xc2, 0xcf, + 0x9d, 0x52, 0x73, 0x91, 0x64, 0x9c, 0xcb, 0x0b, 0xb9, 0x2b, 0x4a, 0xfd, 0x8f, 0x0a, 0x5c, 0xd8, + 0x46, 0x24, 0x2a, 0x96, 0x06, 0x18, 0xee, 0x79, 0x38, 0xe7, 0x18, 0x6c, 0x50, 0x41, 0x42, 0x1b, + 0x75, 0x50, 0xa4, 0x2d, 0x99, 0x81, 0xf3, 0xda, 0x59, 0x8a, 0xa0, 0xc9, 0x75, 0xc1, 0x60, 0xc7, + 0x8a, 0x48, 0x83, 0xd0, 0x37, 0x11, 0xc6, 0x69, 0xd2, 0x5c, 0x4c, 0xfa, 0xba, 0x5c, 0x8f, 0x49, + 0xbb, 0x0d, 0x9c, 0xef, 0x35, 0xf0, 0xf7, 0x58, 0xae, 0x1c, 0x7c, 0x04, 0x61, 0xe8, 0x7d, 0x28, + 0x25, 0x4c, 0xfc, 0x40, 0x4a, 0x8c, 0x18, 0xd5, 0xdf, 0x83, 0x95, 0x6d, 0x44, 0xae, 0xed, 0xbe, + 0x31, 0x40, 0x79, 0xb7, 0x44, 0xd5, 0x43, 0x2b, 0x38, 0xe9, 0x5d, 0xa7, 0xdd, 0x9a, 0xde, 0x10, + 0xbc, 0x98, 0x23, 0xe2, 0x17, 0xae, 0xff, 0x58, 0x81, 0xc7, 0x07, 0x6c, 0x2e, 0x8e, 0xfd, 0x0e, + 0xcc, 0x26, 0xd8, 0xea, 0xc9, 0x8a, 0xe6, 0xd9, 0xff, 0x41, 0x08, 0x6d, 0x26, 0x4c, 0x03, 0x70, + 0xfd, 0x6f, 0x0a, 0xcc, 0x69, 0xc8, 0x08, 0x02, 0xe7, 0x88, 0x25, 0x63, 0xdc, 0xef, 0x76, 0x2a, + 0xf4, 0xde, 0x4e, 0xd9, 0x1d, 0x4a, 0xee, 0xc1, 0x3b, 0x14, 0xf5, 0x0a, 0x8c, 0xb2, 0x2b, 0x03, + 0x8b, 0x3c, 0x78, 0x72, 0x4a, 0x15, 0xf8, 0x22, 0xe1, 0x2f, 0xc0, 0x7c, 0xd7, 0xa1, 0xc4, 0xfd, + 0xfc, 0x9f, 0x1c, 0x54, 0x37, 0x2c, 0x6b, 0x1f, 0x19, 0xa1, 0x79, 0xb8, 0x41, 0x48, 0x68, 0x37, + 0xdb, 0x24, 0xb6, 0xf6, 0x0f, 0x15, 0x98, 0xc5, 0x6c, 0x4d, 0x37, 0xa2, 0x45, 0xa1, 0xf0, 0x37, + 0x87, 0xca, 0x29, 0xfd, 0x99, 0x37, 0xba, 0xe1, 0x3c, 0xa5, 0xcc, 0xe0, 0x2e, 0x30, 0x2d, 0x8f, + 0x6d, 0xcf, 0x42, 0xf7, 0x92, 0x89, 0xb1, 0xcc, 0x20, 0x34, 0x54, 0xd4, 0xa7, 0x41, 0xc5, 0x77, + 0xec, 0x40, 0xc7, 0xe6, 0x21, 0x72, 0x0d, 0xbd, 0x1d, 0x58, 0xb2, 0xd7, 0x2e, 0x69, 0x33, 0x74, + 0x65, 0x9f, 0x2d, 0xbc, 0xc9, 0xe0, 0xe9, 0x1e, 0xb3, 0xd0, 0xd5, 0x63, 0x56, 0x1d, 0x98, 0xcf, + 0x94, 0x2a, 0x99, 0xc3, 0xca, 0x3c, 0x87, 0x5d, 0x4d, 0xe6, 0xb0, 0xa9, 0xf5, 0xa7, 0xd2, 0x16, + 0x89, 0x2a, 0xb2, 0x1d, 0x2a, 0x27, 0xb2, 0x6e, 0x51, 0x54, 0x56, 0x67, 0x26, 0x72, 0xd6, 0x12, + 0x2c, 0x66, 0xaa, 0x47, 0xd8, 0xe6, 0xa7, 0x0a, 0x2c, 0xf1, 0x92, 0xaa, 0x9f, 0x79, 0xbe, 0xd2, + 0xcf, 0x3a, 0xe5, 0xd3, 0xab, 0x71, 0x60, 0xf3, 0x5d, 0x5f, 0x81, 0x5a, 0x3f, 0x51, 0x84, 0xb4, + 0xdf, 0x81, 0x2a, 0xed, 0xf7, 0xfa, 0x48, 0x9a, 0xde, 0x5c, 0x19, 0xb8, 0x79, 0xae, 0x7b, 0xf3, + 0x0f, 0x47, 0x61, 0x31, 0x93, 0xb7, 0xc8, 0x0a, 0xef, 0x2b, 0x30, 0x6b, 0xb6, 0x31, 0xf1, 0xdd, + 0x5e, 0x2f, 0x1d, 0xfa, 0xe6, 0xeb, 0xc7, 0xbd, 0xb1, 0xc5, 0x38, 0xf7, 0xb8, 0xa9, 0xd9, 0x05, + 0x66, 0x52, 0xe0, 0x23, 0x4c, 0x50, 0x4a, 0x8a, 0xdc, 0x43, 0x92, 0x62, 0x9f, 0x71, 0xee, 0x0d, + 0x96, 0x2e, 0xb0, 0xda, 0x82, 0x31, 0xd7, 0x08, 0x02, 0xdb, 0x6b, 0x55, 0xf2, 0x6c, 0xeb, 0xbd, + 0x07, 0xde, 0x7a, 0x8f, 0xf3, 0xe3, 0x3b, 0x4a, 0xee, 0xaa, 0x07, 0x8b, 0x86, 0x65, 0xe9, 0xbd, + 0x09, 0x8f, 0x37, 0xf7, 0xbc, 0x8d, 0x58, 0x4b, 0x47, 0x85, 0x44, 0xce, 0xcc, 0x7b, 0xec, 0x46, + 0xa8, 0x18, 0x96, 0x95, 0xb9, 0x42, 0x43, 0x33, 0xd3, 0x12, 0x8f, 0x24, 0x34, 0x59, 0x22, 0xc8, + 0xd2, 0xf8, 0xa3, 0xd9, 0xed, 0x05, 0x98, 0x48, 0x2a, 0x39, 0x63, 0x93, 0xb9, 0xe4, 0x26, 0xe5, + 0x64, 0x12, 0x79, 0x11, 0xce, 0xca, 0xd9, 0xd5, 0x16, 0xaf, 0x25, 0x12, 0x37, 0x56, 0xaa, 0xe2, + 0x50, 0x7a, 0x2b, 0x8e, 0xdf, 0x8c, 0xc2, 0x42, 0x0f, 0xb5, 0x88, 0xaa, 0xef, 0xc3, 0x2c, 0x6e, + 0x07, 0x81, 0x1f, 0x12, 0x64, 0xe9, 0xa6, 0x63, 0xb3, 0xeb, 0x87, 0x07, 0x95, 0x36, 0x94, 0x4f, + 0xf5, 0x61, 0xdc, 0xd8, 0x97, 0x5c, 0xb7, 0x38, 0x53, 0xe9, 0xca, 0x5d, 0x60, 0xf5, 0x49, 0x98, + 0xe2, 0xdc, 0xa3, 0x46, 0x89, 0x1f, 0x7e, 0x92, 0x43, 0x65, 0x9b, 0x74, 0x1b, 0xa6, 0x5d, 0xe4, + 0x36, 0x51, 0x88, 0x0f, 0xed, 0x80, 0x3b, 0xdf, 0xa0, 0x66, 0x41, 0x3e, 0x67, 0x74, 0x2e, 0x37, + 0xf6, 0x22, 0x32, 0x3e, 0x55, 0x73, 0x53, 0xdf, 0x34, 0x67, 0x49, 0xfd, 0x45, 0xf7, 0x7d, 0x59, + 0x40, 0x32, 0x0a, 0xba, 0x62, 0x8f, 0x7a, 0x69, 0xff, 0x28, 0xdb, 0x0d, 0x5e, 0x96, 0x9b, 0x7e, + 0xdb, 0x23, 0xac, 0xdf, 0x2b, 0x6a, 0xb3, 0x62, 0x89, 0x55, 0xcc, 0x5b, 0x74, 0x81, 0xe6, 0xf3, + 0xc4, 0xe0, 0x4b, 0xa7, 0xcb, 0xbc, 0xe3, 0x2b, 0x6b, 0x33, 0x89, 0x85, 0x7d, 0x0a, 0x57, 0x2f, + 0xc2, 0x4c, 0xa2, 0x77, 0xe7, 0xb8, 0x25, 0x86, 0x9b, 0xe8, 0xe9, 0x39, 0xea, 0x36, 0x4c, 0xc8, + 0x7e, 0x8a, 0xe9, 0xa7, 0xcc, 0xf4, 0x73, 0x3e, 0xed, 0xa9, 0x02, 0x23, 0xd1, 0x45, 0x31, 0xad, + 0x8c, 0x77, 0xe2, 0x0f, 0xf5, 0x9b, 0x50, 0x3d, 0x30, 0x6c, 0xc7, 0x4f, 0x18, 0x45, 0xb7, 0x3d, + 0x33, 0x44, 0x2e, 0xf2, 0x48, 0x05, 0x58, 0x01, 0x5c, 0x91, 0x18, 0x11, 0x17, 0xb1, 0xae, 0x5e, + 0x81, 0x8a, 0xed, 0xd9, 0xc4, 0x36, 0x1c, 0xbd, 0x9b, 0x4b, 0x65, 0x9c, 0x17, 0xcf, 0x62, 0xfd, + 0xe5, 0x34, 0x0b, 0xf5, 0x2a, 0x2c, 0xda, 0x58, 0x6f, 0x39, 0x7e, 0xd3, 0x70, 0xf4, 0xb8, 0x0c, + 0x43, 0x9e, 0xd1, 0x74, 0x90, 0x55, 0x99, 0x60, 0x97, 0x7d, 0xc5, 0xc6, 0xdb, 0x0c, 0x23, 0xaa, + 0xa0, 0xaf, 0xf3, 0xf5, 0xea, 0x16, 0xcc, 0x67, 0x3a, 0xdd, 0xa9, 0x02, 0xed, 0x2d, 0x38, 0xb3, + 0x6b, 0x63, 0x22, 0xbc, 0x39, 0xba, 0xd9, 0x16, 0xa1, 0x1c, 0x77, 0xe7, 0xbc, 0xc7, 0x29, 0x05, + 0x03, 0xda, 0xf2, 0xcc, 0xa1, 0xd9, 0xcf, 0x15, 0x98, 0x4b, 0x33, 0x17, 0x41, 0xf8, 0x1a, 0x94, + 0x84, 0x43, 0x0d, 0xae, 0x73, 0xbb, 0xe6, 0xa5, 0x82, 0xcf, 0x9e, 0x78, 0xc7, 0xd2, 0x22, 0x26, + 0x43, 0x4b, 0xf4, 0x4b, 0x05, 0x96, 0x37, 0x2c, 0xeb, 0xb5, 0x90, 0xd7, 0x4d, 0xf4, 0xf2, 0x27, + 0xdd, 0x09, 0xe6, 0x22, 0xcc, 0x1c, 0x84, 0xbe, 0x47, 0x90, 0x67, 0x75, 0x4d, 0xfc, 0xa7, 0x25, + 0x5c, 0x4e, 0xfd, 0xb7, 0x61, 0x85, 0x1b, 0x4b, 0x0f, 0x19, 0x27, 0x5d, 0x86, 0x8e, 0xe9, 0x7b, + 0x1e, 0x32, 0xa3, 0x42, 0xb9, 0xa4, 0x2d, 0x71, 0xbc, 0xd4, 0x86, 0x5b, 0x11, 0x52, 0xbd, 0x0e, + 0x2b, 0xfd, 0xc5, 0x12, 0xa5, 0xc8, 0x4b, 0x50, 0xe5, 0xc5, 0x4a, 0xa6, 0xd4, 0x43, 0xa4, 0x45, + 0xf6, 0x88, 0x95, 0xc1, 0x20, 0x1e, 0x6a, 0x9d, 0x4b, 0x58, 0x4b, 0xa4, 0x11, 0xc9, 0x7f, 0x1f, + 0xe6, 0x59, 0x8f, 0x78, 0x88, 0x8c, 0x90, 0x34, 0x91, 0x41, 0xf4, 0xbb, 0x36, 0x39, 0xb4, 0x3d, + 0xd1, 0xa7, 0x9d, 0xeb, 0x99, 0xac, 0x5d, 0x13, 0x4f, 0xd9, 0x9b, 0x85, 0x0f, 0x3e, 0x59, 0x56, + 0xb4, 0x33, 0x94, 0xfa, 0x86, 0x24, 0xbe, 0xcd, 0x68, 0xd5, 0x65, 0x18, 0x0f, 0x03, 0x33, 0xd2, + 0xb2, 0x98, 0x94, 0x86, 0x81, 0x29, 0x15, 0xbc, 0x00, 0x63, 0xec, 0xe5, 0x25, 0x1a, 0x95, 0x8e, + 0xd2, 0x4f, 0x36, 0x12, 0x2d, 0x84, 0xbe, 0xc3, 0x6b, 0xdd, 0xa9, 0xe4, 0x85, 0x9c, 0x35, 0x3f, + 0x4c, 0x9d, 0x48, 0xf3, 0x1d, 0xa4, 0x31, 0x62, 0xf5, 0x6d, 0xa8, 0x62, 0x84, 0x59, 0xb8, 0xb3, + 0xa9, 0x17, 0xb2, 0x74, 0xe3, 0x80, 0x6a, 0x90, 0x8d, 0x0c, 0x8b, 0x43, 0x8e, 0x0c, 0x17, 0x04, + 0x8f, 0x7d, 0xce, 0x62, 0x83, 0x72, 0x60, 0x23, 0xd3, 0x54, 0x0c, 0x8d, 0x9e, 0x1c, 0x43, 0x63, + 0x59, 0x1e, 0xfb, 0xa1, 0x02, 0xd5, 0x2c, 0xab, 0x88, 0x48, 0xba, 0x09, 0x53, 0x86, 0x49, 0xec, + 0x0e, 0xd2, 0x45, 0x9a, 0x17, 0xf1, 0xf4, 0xcc, 0x49, 0xb7, 0x44, 0x5a, 0x27, 0x93, 0x9c, 0x89, + 0xe0, 0x3e, 0x74, 0x38, 0xfd, 0x2e, 0x07, 0xf3, 0xbc, 0xbd, 0xed, 0x6e, 0xa8, 0xaf, 0x43, 0x81, + 0x4d, 0xab, 0x15, 0x66, 0x9f, 0xcb, 0x83, 0xed, 0x73, 0x0d, 0x19, 0xd6, 0x2e, 0x22, 0x04, 0x85, + 0x6f, 0xb4, 0x91, 0xa8, 0x23, 0x18, 0xf9, 0xa0, 0x67, 0x35, 0x7a, 0x8f, 0xfa, 0xed, 0xd0, 0x8c, + 0x82, 0x4e, 0x78, 0xc8, 0x24, 0x87, 0x8a, 0xf3, 0xa9, 0xcf, 0xd1, 0xec, 0x4c, 0x31, 0xa8, 0x8e, + 0x68, 0x48, 0x27, 0x46, 0x1b, 0x7c, 0xe2, 0x39, 0x1f, 0xad, 0x5f, 0xf7, 0x12, 0x93, 0x8d, 0xcc, + 0x39, 0x65, 0x71, 0xe8, 0x39, 0xe5, 0x68, 0x96, 0xbe, 0x3e, 0xce, 0xc1, 0xd9, 0x6e, 0x7d, 0x09, + 0x43, 0x3e, 0x24, 0x85, 0x65, 0x8e, 0x12, 0x72, 0x0f, 0x71, 0x94, 0x90, 0x75, 0xd6, 0x7c, 0xd6, + 0xe0, 0xd4, 0x85, 0xb3, 0x3d, 0x92, 0xc8, 0x22, 0xfa, 0x81, 0xc6, 0x2b, 0x73, 0xdd, 0x22, 0xb1, + 0x67, 0xb3, 0x7f, 0x28, 0xb0, 0xf0, 0x7a, 0x3b, 0x6c, 0xa1, 0x2f, 0xa3, 0x33, 0xd6, 0xab, 0x50, + 0xe9, 0x3d, 0x9c, 0xc8, 0xdb, 0xbf, 0xcf, 0xc1, 0xc2, 0x1e, 0xfa, 0x92, 0x9e, 0xfc, 0x91, 0x84, + 0xe1, 0x26, 0x54, 0x7a, 0x15, 0x76, 0xba, 0x77, 0x01, 0x5a, 0xdb, 0x2c, 0x6a, 0xe8, 0x20, 0x44, + 0xf8, 0x50, 0x76, 0x76, 0xa9, 0xa7, 0xda, 0xee, 0xc1, 0x5a, 0xfe, 0xd1, 0x3d, 0xfb, 0x88, 0x69, + 0x58, 0x0d, 0x1e, 0xcb, 0x16, 0x28, 0xf6, 0x93, 0x25, 0x0d, 0x61, 0xe4, 0x59, 0x5d, 0x51, 0xd5, + 0x57, 0xe6, 0x87, 0xf8, 0xb6, 0xf9, 0x24, 0x4c, 0xa5, 0x4b, 0x24, 0xd1, 0x79, 0x4c, 0x86, 0xc9, + 0x5a, 0x24, 0xe3, 0x01, 0xab, 0x98, 0xf1, 0x80, 0xf5, 0x04, 0x4c, 0x72, 0xac, 0xf4, 0x53, 0x13, + 0x47, 0xea, 0xf7, 0x6a, 0x35, 0xd6, 0xf3, 0x6a, 0xb5, 0x0c, 0xe3, 0x14, 0x43, 0x32, 0x29, 0x45, + 0x08, 0x82, 0x05, 0x1f, 0x0f, 0x65, 0x2b, 0x4c, 0xe8, 0xf4, 0xb7, 0x39, 0xa8, 0x6c, 0x23, 0x42, + 0x81, 0x3c, 0x66, 0x92, 0xea, 0x1c, 0xfc, 0xaf, 0x9f, 0x25, 0x31, 0x72, 0x66, 0x7f, 0xc0, 0x93, + 0xd3, 0x21, 0x22, 0x19, 0xa9, 0xbb, 0x30, 0x1d, 0x2f, 0xf3, 0x97, 0xdf, 0x3c, 0x0b, 0xe2, 0xf3, + 0x7d, 0x3a, 0xf1, 0x58, 0x06, 0x1a, 0xb7, 0x93, 0x24, 0xf9, 0xa9, 0xd6, 0x60, 0xdc, 0xb5, 0x79, + 0x12, 0x8e, 0x23, 0xae, 0xec, 0xda, 0x3c, 0xab, 0x5a, 0x6c, 0xdd, 0xb8, 0x17, 0xad, 0x17, 0xc5, + 0xba, 0x71, 0x4f, 0xac, 0xa7, 0xdf, 0xf2, 0x47, 0x87, 0x78, 0xcb, 0xcf, 0x2c, 0x66, 0xee, 0x2b, + 0x70, 0x2e, 0x43, 0x5d, 0x22, 0xf4, 0xbe, 0x95, 0x7e, 0xcc, 0xff, 0xfa, 0x30, 0x2d, 0xc1, 0x86, + 0xe3, 0xf8, 0xa6, 0x41, 0x90, 0x15, 0x5d, 0x0f, 0xa7, 0x7c, 0xd8, 0xff, 0x89, 0x02, 0xb5, 0x6b, + 0xc8, 0x41, 0x04, 0xf5, 0x86, 0xd8, 0x17, 0xfb, 0xef, 0xad, 0xab, 0xb0, 0xdc, 0x57, 0x10, 0xa1, + 0xa1, 0x2a, 0x94, 0xee, 0x1a, 0xa1, 0x67, 0x7b, 0x2d, 0x39, 0x10, 0x8d, 0xbe, 0xeb, 0x7f, 0x56, + 0x60, 0x75, 0x9f, 0x84, 0xc8, 0x70, 0x25, 0xfd, 0x80, 0xf7, 0x8e, 0x01, 0xaf, 0xf3, 0x01, 0x9c, + 0xc5, 0x47, 0x9e, 0xa9, 0x27, 0x2f, 0x6f, 0xfe, 0xdf, 0xab, 0xdc, 0x80, 0xff, 0x5e, 0x75, 0xdd, + 0xdb, 0xfb, 0x47, 0x9e, 0x99, 0xd8, 0x9e, 0xfd, 0xcb, 0xea, 0xc6, 0x88, 0x36, 0x87, 0x33, 0xe0, + 0x9b, 0x13, 0x00, 0xf1, 0x68, 0xb1, 0xfe, 0x27, 0x05, 0x2e, 0x0e, 0x71, 0x8e, 0x3e, 0xff, 0x68, + 0x4b, 0x1c, 0xc4, 0x81, 0x64, 0xa5, 0x10, 0xbf, 0x1d, 0x3e, 0xd8, 0xeb, 0xdc, 0x8d, 0x11, 0xed, + 0x4c, 0xd8, 0x0b, 0x4e, 0x1f, 0x62, 0xd3, 0xf9, 0xe8, 0xd3, 0xda, 0xc8, 0xc7, 0x9f, 0xd6, 0x46, + 0x3e, 0xff, 0xb4, 0xa6, 0xfc, 0xe0, 0xb8, 0xa6, 0xfc, 0xfa, 0xb8, 0xa6, 0xfc, 0xe5, 0xb8, 0xa6, + 0x7c, 0x74, 0x5c, 0x53, 0xfe, 0x75, 0x5c, 0x53, 0xfe, 0x7d, 0x5c, 0x1b, 0xf9, 0xfc, 0xb8, 0xa6, + 0xdc, 0xff, 0xac, 0x36, 0xf2, 0xd1, 0x67, 0xb5, 0x91, 0x8f, 0x3f, 0xab, 0x8d, 0xbc, 0xf5, 0x8d, + 0x96, 0x1f, 0x4b, 0x65, 0xfb, 0x03, 0xfe, 0x96, 0xfc, 0x62, 0xf2, 0xbb, 0x39, 0xca, 0x7a, 0x93, + 0x67, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x4f, 0x7d, 0x5b, 0x2f, 0xd1, 0x2c, 0x00, 0x00, } func (this *RebuildMutableStateRequest) Equal(that interface{}) bool { @@ -5154,6 +5327,120 @@ func (this *DeleteWorkflowExecutionResponse) Equal(that interface{}) bool { } return true } +func (this *StreamWorkflowReplicationMessagesRequest) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StreamWorkflowReplicationMessagesRequest) + if !ok { + that2, ok := that.(StreamWorkflowReplicationMessagesRequest) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.ShardId != that1.ShardId { + return false + } + if that1.Attributes == nil { + if this.Attributes != nil { + return false + } + } else if this.Attributes == nil { + return false + } else if !this.Attributes.Equal(that1.Attributes) { + return false + } + return true +} +func (this *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StreamWorkflowReplicationMessagesRequest_SyncReplicationState) + if !ok { + that2, ok := that.(StreamWorkflowReplicationMessagesRequest_SyncReplicationState) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.SyncReplicationState.Equal(that1.SyncReplicationState) { + return false + } + return true +} +func (this *StreamWorkflowReplicationMessagesResponse) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StreamWorkflowReplicationMessagesResponse) + if !ok { + that2, ok := that.(StreamWorkflowReplicationMessagesResponse) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.ShardId != that1.ShardId { + return false + } + if that1.Attributes == nil { + if this.Attributes != nil { + return false + } + } else if this.Attributes == nil { + return false + } else if !this.Attributes.Equal(that1.Attributes) { + return false + } + return true +} +func (this *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StreamWorkflowReplicationMessagesResponse_ReplicationMessages) + if !ok { + that2, ok := that.(StreamWorkflowReplicationMessagesResponse_ReplicationMessages) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.ReplicationMessages.Equal(that1.ReplicationMessages) { + return false + } + return true +} func (this *RebuildMutableStateRequest) GoString() string { if this == nil { return "nil" @@ -5923,6 +6210,48 @@ func (this *DeleteWorkflowExecutionResponse) GoString() string { s = append(s, "}") return strings.Join(s, "") } +func (this *StreamWorkflowReplicationMessagesRequest) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&adminservice.StreamWorkflowReplicationMessagesRequest{") + s = append(s, "ShardId: "+fmt.Sprintf("%#v", this.ShardId)+",\n") + if this.Attributes != nil { + s = append(s, "Attributes: "+fmt.Sprintf("%#v", this.Attributes)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&adminservice.StreamWorkflowReplicationMessagesRequest_SyncReplicationState{` + + `SyncReplicationState:` + fmt.Sprintf("%#v", this.SyncReplicationState) + `}`}, ", ") + return s +} +func (this *StreamWorkflowReplicationMessagesResponse) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&adminservice.StreamWorkflowReplicationMessagesResponse{") + s = append(s, "ShardId: "+fmt.Sprintf("%#v", this.ShardId)+",\n") + if this.Attributes != nil { + s = append(s, "Attributes: "+fmt.Sprintf("%#v", this.Attributes)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&adminservice.StreamWorkflowReplicationMessagesResponse_ReplicationMessages{` + + `ReplicationMessages:` + fmt.Sprintf("%#v", this.ReplicationMessages) + `}`}, ", ") + return s +} func valueToGoStringRequestResponse(v interface{}, typ string) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -8406,6 +8735,122 @@ func (m *DeleteWorkflowExecutionResponse) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } +func (m *StreamWorkflowReplicationMessagesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StreamWorkflowReplicationMessagesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StreamWorkflowReplicationMessagesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Attributes != nil { + { + size := m.Attributes.Size() + i -= size + if _, err := m.Attributes.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + if m.ShardId != 0 { + i = encodeVarintRequestResponse(dAtA, i, uint64(m.ShardId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.SyncReplicationState != nil { + { + size, err := m.SyncReplicationState.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRequestResponse(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} +func (m *StreamWorkflowReplicationMessagesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StreamWorkflowReplicationMessagesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StreamWorkflowReplicationMessagesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Attributes != nil { + { + size := m.Attributes.Size() + i -= size + if _, err := m.Attributes.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + if m.ShardId != 0 { + i = encodeVarintRequestResponse(dAtA, i, uint64(m.ShardId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.ReplicationMessages != nil { + { + size, err := m.ReplicationMessages.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRequestResponse(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} func encodeVarintRequestResponse(dAtA []byte, offset int, v uint64) int { offset -= sovRequestResponse(v) base := offset @@ -9455,53 +9900,108 @@ func (m *GetTaskQueueTasksRequest) Size() (n int) { return n } -func (m *GetTaskQueueTasksResponse) Size() (n int) { +func (m *GetTaskQueueTasksResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Tasks) > 0 { + for _, e := range m.Tasks { + l = e.Size() + n += 1 + l + sovRequestResponse(uint64(l)) + } + } + l = len(m.NextPageToken) + if l > 0 { + n += 1 + l + sovRequestResponse(uint64(l)) + } + return n +} + +func (m *DeleteWorkflowExecutionRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + if l > 0 { + n += 1 + l + sovRequestResponse(uint64(l)) + } + if m.Execution != nil { + l = m.Execution.Size() + n += 1 + l + sovRequestResponse(uint64(l)) + } + return n +} + +func (m *DeleteWorkflowExecutionResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Warnings) > 0 { + for _, s := range m.Warnings { + l = len(s) + n += 1 + l + sovRequestResponse(uint64(l)) + } + } + return n +} + +func (m *StreamWorkflowReplicationMessagesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ShardId != 0 { + n += 1 + sovRequestResponse(uint64(m.ShardId)) + } + if m.Attributes != nil { + n += m.Attributes.Size() + } + return n +} + +func (m *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Tasks) > 0 { - for _, e := range m.Tasks { - l = e.Size() - n += 1 + l + sovRequestResponse(uint64(l)) - } - } - l = len(m.NextPageToken) - if l > 0 { + if m.SyncReplicationState != nil { + l = m.SyncReplicationState.Size() n += 1 + l + sovRequestResponse(uint64(l)) } return n } - -func (m *DeleteWorkflowExecutionRequest) Size() (n int) { +func (m *StreamWorkflowReplicationMessagesResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Namespace) - if l > 0 { - n += 1 + l + sovRequestResponse(uint64(l)) + if m.ShardId != 0 { + n += 1 + sovRequestResponse(uint64(m.ShardId)) } - if m.Execution != nil { - l = m.Execution.Size() - n += 1 + l + sovRequestResponse(uint64(l)) + if m.Attributes != nil { + n += m.Attributes.Size() } return n } -func (m *DeleteWorkflowExecutionResponse) Size() (n int) { +func (m *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Warnings) > 0 { - for _, s := range m.Warnings { - l = len(s) - n += 1 + l + sovRequestResponse(uint64(l)) - } + if m.ReplicationMessages != nil { + l = m.ReplicationMessages.Size() + n += 1 + l + sovRequestResponse(uint64(l)) } return n } @@ -10263,6 +10763,48 @@ func (this *DeleteWorkflowExecutionResponse) String() string { }, "") return s } +func (this *StreamWorkflowReplicationMessagesRequest) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StreamWorkflowReplicationMessagesRequest{`, + `ShardId:` + fmt.Sprintf("%v", this.ShardId) + `,`, + `Attributes:` + fmt.Sprintf("%v", this.Attributes) + `,`, + `}`, + }, "") + return s +} +func (this *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StreamWorkflowReplicationMessagesRequest_SyncReplicationState{`, + `SyncReplicationState:` + strings.Replace(fmt.Sprintf("%v", this.SyncReplicationState), "SyncReplicationState", "v15.SyncReplicationState", 1) + `,`, + `}`, + }, "") + return s +} +func (this *StreamWorkflowReplicationMessagesResponse) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StreamWorkflowReplicationMessagesResponse{`, + `ShardId:` + fmt.Sprintf("%v", this.ShardId) + `,`, + `Attributes:` + fmt.Sprintf("%v", this.Attributes) + `,`, + `}`, + }, "") + return s +} +func (this *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StreamWorkflowReplicationMessagesResponse_ReplicationMessages{`, + `ReplicationMessages:` + strings.Replace(fmt.Sprintf("%v", this.ReplicationMessages), "ReplicationMessages", "v15.ReplicationMessages", 1) + `,`, + `}`, + }, "") + return s +} func valueToStringRequestResponse(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -17964,6 +18506,220 @@ func (m *DeleteWorkflowExecutionResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *StreamWorkflowReplicationMessagesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StreamWorkflowReplicationMessagesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StreamWorkflowReplicationMessagesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ShardId", wireType) + } + m.ShardId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ShardId |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SyncReplicationState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRequestResponse + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRequestResponse + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &v15.SyncReplicationState{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Attributes = &StreamWorkflowReplicationMessagesRequest_SyncReplicationState{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRequestResponse(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRequestResponse + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthRequestResponse + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StreamWorkflowReplicationMessagesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StreamWorkflowReplicationMessagesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StreamWorkflowReplicationMessagesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ShardId", wireType) + } + m.ShardId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ShardId |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReplicationMessages", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRequestResponse + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRequestResponse + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &v15.ReplicationMessages{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Attributes = &StreamWorkflowReplicationMessagesResponse_ReplicationMessages{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRequestResponse(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRequestResponse + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthRequestResponse + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipRequestResponse(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/api/adminservice/v1/service.pb.go b/api/adminservice/v1/service.pb.go index 17991fd327f..04d76fb31ed 100644 --- a/api/adminservice/v1/service.pb.go +++ b/api/adminservice/v1/service.pb.go @@ -54,61 +54,63 @@ func init() { } var fileDescriptor_cf5ca5e0c737570d = []byte{ - // 862 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x98, 0xcd, 0x6b, 0x13, 0x4f, - 0x18, 0xc7, 0x33, 0x97, 0x1f, 0x3f, 0x86, 0xfe, 0x5e, 0x5c, 0xc5, 0x97, 0x1e, 0xd6, 0xa2, 0xf7, - 0x84, 0x56, 0xad, 0xf6, 0xbd, 0x69, 0x12, 0x53, 0x30, 0x51, 0x9b, 0xf8, 0x02, 0x5e, 0x64, 0x93, - 0x7d, 0xda, 0x2e, 0xdd, 0x64, 0xd7, 0x99, 0xd9, 0xd4, 0x9e, 0xf4, 0x22, 0x08, 0x82, 0x28, 0x08, - 0x82, 0xe0, 0x49, 0x10, 0x05, 0xff, 0x06, 0xc1, 0x9b, 0xc7, 0x1e, 0x7b, 0xb4, 0xe9, 0xc5, 0x63, - 0x4f, 0x9e, 0x65, 0xbb, 0x99, 0xe9, 0x6e, 0x32, 0x96, 0x99, 0x4d, 0x6f, 0x4d, 0x77, 0x3f, 0xdf, - 0xe7, 0x93, 0x27, 0x3b, 0xf3, 0x4c, 0x82, 0xc7, 0x19, 0xb4, 0x7c, 0x8f, 0x58, 0x6e, 0x8e, 0x02, - 0xe9, 0x00, 0xc9, 0x59, 0xbe, 0x93, 0xb3, 0xec, 0x96, 0xd3, 0x0e, 0x5f, 0x3b, 0x4d, 0xc8, 0x75, - 0xc6, 0x73, 0xbd, 0x3f, 0xb3, 0x3e, 0xf1, 0x98, 0x67, 0x5c, 0xe4, 0x48, 0x36, 0x42, 0xb2, 0x96, - 0xef, 0x64, 0xe3, 0x48, 0xb6, 0x33, 0x3e, 0x3a, 0xad, 0x92, 0x4b, 0xe0, 0x51, 0x00, 0x94, 0x3d, - 0x24, 0x40, 0x7d, 0xaf, 0x4d, 0x7b, 0x05, 0x26, 0x7e, 0x8d, 0xe1, 0x91, 0x7c, 0x78, 0x6b, 0x3d, - 0xba, 0xd5, 0x78, 0x87, 0xf0, 0xc9, 0x1a, 0x34, 0x02, 0xc7, 0xb5, 0xab, 0x01, 0xb3, 0x1a, 0x2e, - 0xd4, 0x99, 0xc5, 0xc0, 0x58, 0xc8, 0x2a, 0xa8, 0x64, 0x25, 0x64, 0x2d, 0x2a, 0x3c, 0xba, 0x98, - 0x3e, 0x20, 0x32, 0xbe, 0x90, 0x31, 0xde, 0x23, 0x7c, 0xaa, 0x08, 0xb4, 0x49, 0x9c, 0x06, 0x24, - 0xec, 0xd4, 0xc2, 0x65, 0x28, 0xd7, 0xcb, 0x0f, 0x91, 0x20, 0xfc, 0xc2, 0xe6, 0xf1, 0x5b, 0x96, - 0x1d, 0xca, 0x3c, 0xb2, 0xb5, 0xec, 0x51, 0xa6, 0xd8, 0x3c, 0x09, 0xa9, 0xd7, 0x3c, 0x69, 0x80, - 0x90, 0xdb, 0xc2, 0x7f, 0x97, 0x81, 0xd5, 0xd7, 0x2d, 0x62, 0x1b, 0x97, 0x95, 0xf2, 0xf8, 0xed, - 0xdc, 0xe2, 0x8a, 0x26, 0x25, 0x4a, 0x3f, 0xc1, 0xb8, 0xe0, 0x7a, 0x14, 0xa2, 0xe2, 0x93, 0x4a, - 0x31, 0x87, 0x00, 0x2f, 0x7f, 0x55, 0x9b, 0x13, 0x02, 0xaf, 0x11, 0xfe, 0xbf, 0xe2, 0x50, 0xd6, - 0xeb, 0xcc, 0x1d, 0x8b, 0x6e, 0x50, 0x63, 0x56, 0x29, 0xaf, 0x1f, 0xe3, 0x36, 0x73, 0x29, 0xe9, - 0x78, 0x53, 0x6a, 0xd0, 0xf2, 0x3a, 0x10, 0x5e, 0x50, 0x6c, 0xca, 0x21, 0xa0, 0xd7, 0x94, 0x38, - 0x27, 0x04, 0xbe, 0x21, 0x3c, 0x56, 0x06, 0x76, 0xdf, 0x23, 0x1b, 0xab, 0xae, 0xb7, 0x59, 0x7a, - 0x0c, 0xcd, 0x80, 0x39, 0x5e, 0xbb, 0x66, 0x6d, 0xf6, 0x94, 0xef, 0x4d, 0x18, 0x15, 0xd5, 0xcf, - 0xfc, 0xc8, 0x18, 0x6e, 0x5b, 0x3d, 0xa6, 0x34, 0xf1, 0x1e, 0x3e, 0x20, 0x7c, 0xba, 0x0c, 0xac, - 0x06, 0xbe, 0xeb, 0x34, 0xad, 0xf0, 0xc6, 0x2a, 0x50, 0x6a, 0xad, 0x01, 0x35, 0x96, 0x54, 0x6b, - 0x49, 0x60, 0xee, 0x5b, 0x18, 0x2a, 0x43, 0x58, 0x7e, 0x45, 0xf8, 0x7c, 0x19, 0xd8, 0x4d, 0xab, - 0x05, 0xd4, 0xb7, 0x9a, 0x20, 0xd3, 0xbd, 0xa1, 0x5a, 0xea, 0xa8, 0x14, 0xee, 0x5d, 0x39, 0x9e, - 0x30, 0xf1, 0x06, 0xbe, 0x20, 0x7c, 0xae, 0x0c, 0xac, 0x58, 0x59, 0x91, 0xa9, 0x97, 0x54, 0xab, - 0xc9, 0x79, 0x2e, 0x7d, 0x7d, 0xd8, 0x18, 0xa1, 0xfb, 0x1c, 0xe1, 0x7f, 0x6a, 0x60, 0xf9, 0xbe, - 0xbb, 0x55, 0xea, 0x40, 0x9b, 0x51, 0x63, 0x4a, 0x71, 0x99, 0xc4, 0x18, 0xae, 0x35, 0x9d, 0x06, - 0x4d, 0x8c, 0x84, 0xbc, 0x6d, 0xd7, 0xc1, 0x22, 0xcd, 0xf5, 0x3c, 0x63, 0xc4, 0x69, 0x04, 0x0c, - 0xa8, 0xe2, 0x48, 0x90, 0x90, 0x7a, 0x23, 0x41, 0x1a, 0x90, 0x58, 0x3d, 0xd1, 0xd6, 0x30, 0xe0, - 0xb7, 0xa4, 0xb1, 0xaf, 0xfc, 0x49, 0xb1, 0x30, 0x54, 0x46, 0xa2, 0x85, 0xe1, 0x50, 0x49, 0xd7, - 0x42, 0x09, 0xa9, 0xd7, 0x42, 0x69, 0x80, 0x90, 0x7b, 0x89, 0xf0, 0x7f, 0x7c, 0xee, 0x16, 0xdc, - 0x80, 0x32, 0x20, 0xc6, 0x8c, 0xd6, 0xb4, 0xee, 0x51, 0x5c, 0x6a, 0x36, 0x1d, 0x2c, 0x84, 0x9e, - 0x21, 0x3c, 0x12, 0x4e, 0x9d, 0xde, 0x15, 0x6a, 0x5c, 0x53, 0x1e, 0x54, 0x1c, 0xe1, 0x2a, 0x53, - 0x29, 0x48, 0xe1, 0xf1, 0x16, 0x61, 0x23, 0x76, 0xa9, 0x0a, 0xad, 0x46, 0x68, 0x33, 0xaf, 0x9b, - 0xd9, 0x03, 0xb9, 0xd3, 0x42, 0x6a, 0x5e, 0x98, 0x7d, 0x46, 0xf8, 0x6c, 0xde, 0xb6, 0x6f, 0x91, - 0xbb, 0xbe, 0x7d, 0x70, 0x7e, 0x6b, 0x79, 0x4c, 0x7c, 0x76, 0x45, 0xd5, 0x65, 0x25, 0xc5, 0xb9, - 0x65, 0x69, 0xc8, 0x94, 0xc4, 0xb3, 0x1f, 0x2d, 0x90, 0xa4, 0xe6, 0x82, 0xc6, 0xd2, 0x92, 0x1a, - 0x2e, 0xa6, 0x0f, 0x10, 0x72, 0x2f, 0x10, 0xfe, 0x37, 0xda, 0x8e, 0xc5, 0x28, 0x98, 0xd6, 0xd8, - 0xc3, 0xfb, 0xf7, 0xff, 0x99, 0x54, 0x6c, 0xe2, 0x8c, 0x77, 0x3b, 0x20, 0x6b, 0x10, 0xf7, 0x51, - 0x5b, 0x4d, 0xfd, 0x98, 0xde, 0x19, 0x6f, 0x90, 0x4e, 0x38, 0x55, 0x21, 0x95, 0x53, 0x3f, 0xa6, - 0xe7, 0x34, 0x48, 0x27, 0xbe, 0x44, 0xd5, 0x60, 0x95, 0x00, 0x5d, 0xe7, 0xa7, 0xac, 0xe8, 0x3c, - 0xac, 0xfa, 0x48, 0x0c, 0xa2, 0x7a, 0x5f, 0xa2, 0xe4, 0x09, 0x7d, 0x43, 0x89, 0x42, 0xdb, 0x8e, - 0x0d, 0xf9, 0xc8, 0x50, 0x75, 0x28, 0xc9, 0x60, 0xdd, 0xa1, 0x24, 0xcf, 0x10, 0x96, 0x6f, 0x10, - 0x3e, 0x51, 0x06, 0x16, 0xfe, 0x7b, 0x25, 0x80, 0x00, 0x22, 0xc1, 0x39, 0xd5, 0x47, 0x38, 0xc9, - 0x71, 0xb7, 0xf9, 0xb4, 0xb8, 0xd0, 0xfa, 0x88, 0xf0, 0x99, 0x22, 0xb8, 0xc0, 0x60, 0xe0, 0x04, - 0x6d, 0x14, 0x14, 0x27, 0x8b, 0x94, 0xe6, 0x8a, 0xc5, 0xe1, 0x42, 0xb8, 0xe8, 0x92, 0xbb, 0xbd, - 0x6b, 0x66, 0x76, 0x76, 0xcd, 0xcc, 0xfe, 0xae, 0x89, 0x9e, 0x76, 0x4d, 0xf4, 0xa9, 0x6b, 0xa2, - 0xef, 0x5d, 0x13, 0x6d, 0x77, 0x4d, 0xf4, 0xa3, 0x6b, 0xa2, 0x9f, 0x5d, 0x33, 0xb3, 0xdf, 0x35, - 0xd1, 0xab, 0x3d, 0x33, 0xb3, 0xbd, 0x67, 0x66, 0x76, 0xf6, 0xcc, 0xcc, 0x83, 0xc9, 0x35, 0xef, - 0xb0, 0xbe, 0xe3, 0x1d, 0xf1, 0x83, 0xc7, 0x4c, 0xfc, 0x75, 0xe3, 0xaf, 0x83, 0x5f, 0x3b, 0x2e, - 0xfd, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x73, 0xcc, 0x7e, 0x83, 0x11, 0x00, 0x00, + // 895 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x98, 0x4d, 0x6f, 0xd3, 0x48, + 0x18, 0xc7, 0x33, 0x97, 0xd5, 0x6a, 0xd4, 0x7d, 0xf3, 0xae, 0xf6, 0xa5, 0x07, 0xef, 0x6e, 0xf7, + 0xb2, 0xa7, 0x84, 0x16, 0x28, 0xf4, 0xbd, 0x69, 0x12, 0x52, 0x89, 0xa4, 0xd0, 0x84, 0x17, 0x89, + 0x0b, 0x9a, 0xc4, 0x4f, 0x5b, 0xab, 0x4e, 0x6c, 0x66, 0xc6, 0x29, 0x3d, 0xc1, 0x05, 0x09, 0x09, + 0x09, 0x81, 0x84, 0x84, 0x84, 0xc4, 0x09, 0x09, 0x81, 0xc4, 0x67, 0x40, 0xea, 0xad, 0xc7, 0x1e, + 0x7b, 0xa4, 0xe9, 0x85, 0x63, 0x3f, 0x02, 0x72, 0x9d, 0x99, 0xda, 0xc9, 0x50, 0xc6, 0x4e, 0x6f, + 0x4d, 0x3d, 0xbf, 0xff, 0xfc, 0xfc, 0xc4, 0x33, 0xcf, 0x38, 0x78, 0x9c, 0x43, 0xcb, 0x73, 0x29, + 0x71, 0x72, 0x0c, 0x68, 0x07, 0x68, 0x8e, 0x78, 0x76, 0x8e, 0x58, 0x2d, 0xbb, 0x1d, 0x7c, 0xb6, + 0x9b, 0x90, 0xeb, 0x8c, 0xe7, 0x7a, 0x7f, 0x66, 0x3d, 0xea, 0x72, 0xd7, 0xf8, 0x4f, 0x20, 0xd9, + 0x10, 0xc9, 0x12, 0xcf, 0xce, 0x46, 0x91, 0x6c, 0x67, 0x7c, 0x74, 0x5a, 0x27, 0x97, 0xc2, 0x3d, + 0x1f, 0x18, 0xbf, 0x4b, 0x81, 0x79, 0x6e, 0x9b, 0xf5, 0x26, 0x98, 0xd8, 0x19, 0xc3, 0x23, 0xf9, + 0x60, 0x68, 0x3d, 0x1c, 0x6a, 0xbc, 0x42, 0xf8, 0xd7, 0x1a, 0x34, 0x7c, 0xdb, 0xb1, 0xaa, 0x3e, + 0x27, 0x0d, 0x07, 0xea, 0x9c, 0x70, 0x30, 0x16, 0xb2, 0x1a, 0x2a, 0x59, 0x05, 0x59, 0x0b, 0x27, + 0x1e, 0x5d, 0x4c, 0x1f, 0x10, 0x1a, 0x8f, 0x65, 0x8c, 0xd7, 0x08, 0xff, 0x56, 0x04, 0xd6, 0xa4, + 0x76, 0x03, 0x62, 0x76, 0x7a, 0xe1, 0x2a, 0x54, 0xe8, 0xe5, 0x87, 0x48, 0x90, 0x7e, 0x41, 0xf1, + 0xc4, 0x90, 0x65, 0x9b, 0x71, 0x97, 0x6e, 0x2f, 0xbb, 0x8c, 0x6b, 0x16, 0x4f, 0x41, 0x26, 0x2b, + 0x9e, 0x32, 0x40, 0xca, 0x6d, 0xe3, 0xef, 0xcb, 0xc0, 0xeb, 0x1b, 0x84, 0x5a, 0xc6, 0x05, 0xad, + 0x3c, 0x31, 0x5c, 0x58, 0x5c, 0x4c, 0x48, 0xc9, 0xa9, 0x1f, 0x60, 0x5c, 0x70, 0x5c, 0x06, 0xe1, + 0xe4, 0x93, 0x5a, 0x31, 0x27, 0x80, 0x98, 0xfe, 0x52, 0x62, 0x4e, 0x0a, 0x3c, 0x47, 0xf8, 0xe7, + 0x8a, 0xcd, 0x78, 0xaf, 0x32, 0x37, 0x08, 0xdb, 0x64, 0xc6, 0xac, 0x56, 0x5e, 0x3f, 0x26, 0x6c, + 0xe6, 0x52, 0xd2, 0xd1, 0xa2, 0xd4, 0xa0, 0xe5, 0x76, 0x20, 0xb8, 0xa0, 0x59, 0x94, 0x13, 0x20, + 0x59, 0x51, 0xa2, 0x9c, 0x14, 0xd8, 0x41, 0xf8, 0x9f, 0x32, 0xf0, 0xdb, 0x2e, 0xdd, 0x5c, 0x73, + 0xdc, 0xad, 0xd2, 0x7d, 0x68, 0xfa, 0xdc, 0x76, 0xdb, 0x35, 0xb2, 0xd5, 0x53, 0xbe, 0x35, 0x61, + 0x54, 0x74, 0xbf, 0xf3, 0x53, 0x63, 0x84, 0x6d, 0xf5, 0x8c, 0xd2, 0xe4, 0x3d, 0xbc, 0x41, 0xf8, + 0xf7, 0x32, 0xf0, 0x1a, 0x78, 0x8e, 0xdd, 0x24, 0xc1, 0xc0, 0x2a, 0x30, 0x46, 0xd6, 0x81, 0x19, + 0x4b, 0xba, 0x73, 0x29, 0x60, 0xe1, 0x5b, 0x18, 0x2a, 0x43, 0x5a, 0x7e, 0x44, 0xf8, 0xef, 0x32, + 0xf0, 0x15, 0xd2, 0x02, 0xe6, 0x91, 0x26, 0xa8, 0x74, 0xaf, 0xea, 0x4e, 0x75, 0x5a, 0x8a, 0xf0, + 0xae, 0x9c, 0x4d, 0x98, 0xbc, 0x81, 0x0f, 0x08, 0xff, 0x55, 0x06, 0x5e, 0xac, 0xac, 0xaa, 0xd4, + 0x4b, 0xba, 0xb3, 0xa9, 0x79, 0x21, 0x7d, 0x65, 0xd8, 0x18, 0xa9, 0xfb, 0x18, 0xe1, 0x1f, 0x6a, + 0x40, 0x3c, 0xcf, 0xd9, 0x2e, 0x75, 0xa0, 0xcd, 0x99, 0x31, 0xa5, 0xb9, 0x4c, 0x22, 0x8c, 0xd0, + 0x9a, 0x4e, 0x83, 0xc6, 0x5a, 0x42, 0xde, 0xb2, 0xea, 0x40, 0x68, 0x73, 0x23, 0xcf, 0x39, 0xb5, + 0x1b, 0x3e, 0x07, 0xa6, 0xd9, 0x12, 0x14, 0x64, 0xb2, 0x96, 0xa0, 0x0c, 0x88, 0xad, 0x9e, 0x70, + 0x6b, 0x18, 0xf0, 0x5b, 0x4a, 0xb0, 0xaf, 0x7c, 0x4d, 0xb1, 0x30, 0x54, 0x46, 0xac, 0x84, 0x41, + 0x53, 0x49, 0x57, 0x42, 0x05, 0x99, 0xac, 0x84, 0xca, 0x00, 0x29, 0xf7, 0x14, 0xe1, 0x9f, 0x44, + 0xdf, 0x2d, 0x38, 0x3e, 0xe3, 0x40, 0x8d, 0x99, 0x44, 0xdd, 0xba, 0x47, 0x09, 0xa9, 0xd9, 0x74, + 0xb0, 0x14, 0x7a, 0x84, 0xf0, 0x48, 0xd0, 0x75, 0x7a, 0x57, 0x98, 0x71, 0x59, 0xbb, 0x51, 0x09, + 0x44, 0xa8, 0x4c, 0xa5, 0x20, 0xa5, 0xc7, 0x4b, 0x84, 0x8d, 0xc8, 0xa5, 0x2a, 0xb4, 0x1a, 0x81, + 0xcd, 0x7c, 0xd2, 0xcc, 0x1e, 0x28, 0x9c, 0x16, 0x52, 0xf3, 0xd2, 0xec, 0x3d, 0xc2, 0x7f, 0xe6, + 0x2d, 0xeb, 0x1a, 0xbd, 0xe9, 0x59, 0xc7, 0xe7, 0xb7, 0x96, 0xcb, 0xe5, 0x77, 0x57, 0xd4, 0x5d, + 0x56, 0x4a, 0x5c, 0x58, 0x96, 0x86, 0x4c, 0x89, 0x3d, 0xfb, 0xe1, 0x02, 0x89, 0x6b, 0x2e, 0x24, + 0x58, 0x5a, 0x4a, 0xc3, 0xc5, 0xf4, 0x01, 0x52, 0xee, 0x09, 0xc2, 0x3f, 0x86, 0xdb, 0xb1, 0x6c, + 0x05, 0xd3, 0x09, 0xf6, 0xf0, 0xfe, 0xfd, 0x7f, 0x26, 0x15, 0x1b, 0x3b, 0xe3, 0x5d, 0xf7, 0xe9, + 0x3a, 0x44, 0x7d, 0xf4, 0x56, 0x53, 0x3f, 0x96, 0xec, 0x8c, 0x37, 0x48, 0xc7, 0x9c, 0xaa, 0x90, + 0xca, 0xa9, 0x1f, 0x4b, 0xe6, 0x34, 0x48, 0xc7, 0x5e, 0xa2, 0x6a, 0xb0, 0x46, 0x81, 0x6d, 0x88, + 0x53, 0x56, 0x78, 0x1e, 0xd6, 0x7d, 0x24, 0x06, 0xd1, 0x64, 0x2f, 0x51, 0xea, 0x84, 0xbe, 0xa6, + 0xc4, 0xa0, 0x6d, 0x45, 0x9a, 0x7c, 0x68, 0xa8, 0xdb, 0x94, 0x54, 0x70, 0xd2, 0xa6, 0xa4, 0xce, + 0x90, 0x96, 0x2f, 0x10, 0xfe, 0xa5, 0x0c, 0x3c, 0xf8, 0xf7, 0xaa, 0x0f, 0x3e, 0x84, 0x82, 0x73, + 0xba, 0x8f, 0x70, 0x9c, 0x13, 0x6e, 0xf3, 0x69, 0x71, 0xa9, 0xf5, 0x16, 0xe1, 0x3f, 0x8a, 0xe0, + 0x00, 0x87, 0x81, 0x13, 0xb4, 0x51, 0xd0, 0xec, 0x2c, 0x4a, 0x5a, 0x28, 0x16, 0x87, 0x0b, 0x91, + 0xa2, 0xbb, 0x08, 0xff, 0x5b, 0xe7, 0x14, 0x48, 0x4b, 0x8c, 0x52, 0x9d, 0x2c, 0xf5, 0xde, 0x17, + 0xbe, 0x99, 0x23, 0xe4, 0x57, 0xce, 0x2a, 0x4e, 0xdc, 0xc6, 0xff, 0xe8, 0x1c, 0x5a, 0x72, 0xf6, + 0x0e, 0xcc, 0xcc, 0xfe, 0x81, 0x99, 0x39, 0x3a, 0x30, 0xd1, 0xc3, 0xae, 0x89, 0xde, 0x75, 0x4d, + 0xb4, 0xdb, 0x35, 0xd1, 0x5e, 0xd7, 0x44, 0x9f, 0xba, 0x26, 0xfa, 0xdc, 0x35, 0x33, 0x47, 0x5d, + 0x13, 0x3d, 0x3b, 0x34, 0x33, 0x7b, 0x87, 0x66, 0x66, 0xff, 0xd0, 0xcc, 0xdc, 0x99, 0x5c, 0x77, + 0x4f, 0x6c, 0x6c, 0xf7, 0x94, 0xdf, 0x6e, 0x66, 0xa2, 0x9f, 0x1b, 0xdf, 0x1d, 0xff, 0x70, 0x73, + 0xfe, 0x4b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0xf7, 0xa0, 0x23, 0x4e, 0x12, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -182,6 +184,7 @@ type AdminServiceClient interface { GetTaskQueueTasks(ctx context.Context, in *GetTaskQueueTasksRequest, opts ...grpc.CallOption) (*GetTaskQueueTasksResponse, error) // DeleteWorkflowExecution force deletes a workflow's visibility record, current & concrete execution record and history if possible DeleteWorkflowExecution(ctx context.Context, in *DeleteWorkflowExecutionRequest, opts ...grpc.CallOption) (*DeleteWorkflowExecutionResponse, error) + StreamWorkflowReplicationMessages(ctx context.Context, opts ...grpc.CallOption) (AdminService_StreamWorkflowReplicationMessagesClient, error) } type adminServiceClient struct { @@ -435,6 +438,37 @@ func (c *adminServiceClient) DeleteWorkflowExecution(ctx context.Context, in *De return out, nil } +func (c *adminServiceClient) StreamWorkflowReplicationMessages(ctx context.Context, opts ...grpc.CallOption) (AdminService_StreamWorkflowReplicationMessagesClient, error) { + stream, err := c.cc.NewStream(ctx, &_AdminService_serviceDesc.Streams[0], "/temporal.server.api.adminservice.v1.AdminService/StreamWorkflowReplicationMessages", opts...) + if err != nil { + return nil, err + } + x := &adminServiceStreamWorkflowReplicationMessagesClient{stream} + return x, nil +} + +type AdminService_StreamWorkflowReplicationMessagesClient interface { + Send(*StreamWorkflowReplicationMessagesRequest) error + Recv() (*StreamWorkflowReplicationMessagesResponse, error) + grpc.ClientStream +} + +type adminServiceStreamWorkflowReplicationMessagesClient struct { + grpc.ClientStream +} + +func (x *adminServiceStreamWorkflowReplicationMessagesClient) Send(m *StreamWorkflowReplicationMessagesRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *adminServiceStreamWorkflowReplicationMessagesClient) Recv() (*StreamWorkflowReplicationMessagesResponse, error) { + m := new(StreamWorkflowReplicationMessagesResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // AdminServiceServer is the server API for AdminService service. type AdminServiceServer interface { // RebuildMutableState attempts to rebuild mutable state according to persisted history events. @@ -496,6 +530,7 @@ type AdminServiceServer interface { GetTaskQueueTasks(context.Context, *GetTaskQueueTasksRequest) (*GetTaskQueueTasksResponse, error) // DeleteWorkflowExecution force deletes a workflow's visibility record, current & concrete execution record and history if possible DeleteWorkflowExecution(context.Context, *DeleteWorkflowExecutionRequest) (*DeleteWorkflowExecutionResponse, error) + StreamWorkflowReplicationMessages(AdminService_StreamWorkflowReplicationMessagesServer) error } // UnimplementedAdminServiceServer can be embedded to have forward compatible implementations. @@ -583,6 +618,9 @@ func (*UnimplementedAdminServiceServer) GetTaskQueueTasks(ctx context.Context, r func (*UnimplementedAdminServiceServer) DeleteWorkflowExecution(ctx context.Context, req *DeleteWorkflowExecutionRequest) (*DeleteWorkflowExecutionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteWorkflowExecution not implemented") } +func (*UnimplementedAdminServiceServer) StreamWorkflowReplicationMessages(srv AdminService_StreamWorkflowReplicationMessagesServer) error { + return status.Errorf(codes.Unimplemented, "method StreamWorkflowReplicationMessages not implemented") +} func RegisterAdminServiceServer(s *grpc.Server, srv AdminServiceServer) { s.RegisterService(&_AdminService_serviceDesc, srv) @@ -1074,6 +1112,32 @@ func _AdminService_DeleteWorkflowExecution_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _AdminService_StreamWorkflowReplicationMessages_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(AdminServiceServer).StreamWorkflowReplicationMessages(&adminServiceStreamWorkflowReplicationMessagesServer{stream}) +} + +type AdminService_StreamWorkflowReplicationMessagesServer interface { + Send(*StreamWorkflowReplicationMessagesResponse) error + Recv() (*StreamWorkflowReplicationMessagesRequest, error) + grpc.ServerStream +} + +type adminServiceStreamWorkflowReplicationMessagesServer struct { + grpc.ServerStream +} + +func (x *adminServiceStreamWorkflowReplicationMessagesServer) Send(m *StreamWorkflowReplicationMessagesResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *adminServiceStreamWorkflowReplicationMessagesServer) Recv() (*StreamWorkflowReplicationMessagesRequest, error) { + m := new(StreamWorkflowReplicationMessagesRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + var _AdminService_serviceDesc = grpc.ServiceDesc{ ServiceName: "temporal.server.api.adminservice.v1.AdminService", HandlerType: (*AdminServiceServer)(nil), @@ -1187,6 +1251,13 @@ var _AdminService_serviceDesc = grpc.ServiceDesc{ Handler: _AdminService_DeleteWorkflowExecution_Handler, }, }, - Streams: []grpc.StreamDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamWorkflowReplicationMessages", + Handler: _AdminService_StreamWorkflowReplicationMessages_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, Metadata: "temporal/server/api/adminservice/v1/service.proto", } diff --git a/api/adminservicemock/v1/service.pb.mock.go b/api/adminservicemock/v1/service.pb.mock.go index ee93667b46e..bb6cf729e16 100644 --- a/api/adminservicemock/v1/service.pb.mock.go +++ b/api/adminservicemock/v1/service.pb.mock.go @@ -35,6 +35,7 @@ import ( gomock "github.com/golang/mock/gomock" adminservice "go.temporal.io/server/api/adminservice/v1" grpc "google.golang.org/grpc" + metadata "google.golang.org/grpc/metadata" ) // MockAdminServiceClient is a mock of AdminServiceClient interface. @@ -600,6 +601,163 @@ func (mr *MockAdminServiceClientMockRecorder) ResendReplicationTasks(ctx, in int return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResendReplicationTasks", reflect.TypeOf((*MockAdminServiceClient)(nil).ResendReplicationTasks), varargs...) } +// StreamWorkflowReplicationMessages mocks base method. +func (m *MockAdminServiceClient) StreamWorkflowReplicationMessages(ctx context.Context, opts ...grpc.CallOption) (adminservice.AdminService_StreamWorkflowReplicationMessagesClient, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StreamWorkflowReplicationMessages", varargs...) + ret0, _ := ret[0].(adminservice.AdminService_StreamWorkflowReplicationMessagesClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StreamWorkflowReplicationMessages indicates an expected call of StreamWorkflowReplicationMessages. +func (mr *MockAdminServiceClientMockRecorder) StreamWorkflowReplicationMessages(ctx interface{}, opts ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StreamWorkflowReplicationMessages", reflect.TypeOf((*MockAdminServiceClient)(nil).StreamWorkflowReplicationMessages), varargs...) +} + +// MockAdminService_StreamWorkflowReplicationMessagesClient is a mock of AdminService_StreamWorkflowReplicationMessagesClient interface. +type MockAdminService_StreamWorkflowReplicationMessagesClient struct { + ctrl *gomock.Controller + recorder *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder +} + +// MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder is the mock recorder for MockAdminService_StreamWorkflowReplicationMessagesClient. +type MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder struct { + mock *MockAdminService_StreamWorkflowReplicationMessagesClient +} + +// NewMockAdminService_StreamWorkflowReplicationMessagesClient creates a new mock instance. +func NewMockAdminService_StreamWorkflowReplicationMessagesClient(ctrl *gomock.Controller) *MockAdminService_StreamWorkflowReplicationMessagesClient { + mock := &MockAdminService_StreamWorkflowReplicationMessagesClient{ctrl: ctrl} + mock.recorder = &MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAdminService_StreamWorkflowReplicationMessagesClient) EXPECT() *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder { + return m.recorder +} + +// CloseSend mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesClient) CloseSend() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CloseSend") + ret0, _ := ret[0].(error) + return ret0 +} + +// CloseSend indicates an expected call of CloseSend. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder) CloseSend() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CloseSend", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesClient)(nil).CloseSend)) +} + +// Context mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesClient) Context() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder) Context() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesClient)(nil).Context)) +} + +// Header mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesClient) Header() (metadata.MD, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Header") + ret0, _ := ret[0].(metadata.MD) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Header indicates an expected call of Header. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder) Header() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Header", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesClient)(nil).Header)) +} + +// Recv mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesClient) Recv() (*adminservice.StreamWorkflowReplicationMessagesResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Recv") + ret0, _ := ret[0].(*adminservice.StreamWorkflowReplicationMessagesResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Recv indicates an expected call of Recv. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder) Recv() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Recv", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesClient)(nil).Recv)) +} + +// RecvMsg mocks base method. +func (m_2 *MockAdminService_StreamWorkflowReplicationMessagesClient) RecvMsg(m interface{}) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "RecvMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecvMsg indicates an expected call of RecvMsg. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder) RecvMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecvMsg", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesClient)(nil).RecvMsg), m) +} + +// Send mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesClient) Send(arg0 *adminservice.StreamWorkflowReplicationMessagesRequest) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Send", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Send indicates an expected call of Send. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder) Send(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Send", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesClient)(nil).Send), arg0) +} + +// SendMsg mocks base method. +func (m_2 *MockAdminService_StreamWorkflowReplicationMessagesClient) SendMsg(m interface{}) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "SendMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendMsg indicates an expected call of SendMsg. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder) SendMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMsg", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesClient)(nil).SendMsg), m) +} + +// Trailer mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesClient) Trailer() metadata.MD { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Trailer") + ret0, _ := ret[0].(metadata.MD) + return ret0 +} + +// Trailer indicates an expected call of Trailer. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesClientMockRecorder) Trailer() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Trailer", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesClient)(nil).Trailer)) +} + // MockAdminServiceServer is a mock of AdminServiceServer interface. type MockAdminServiceServer struct { ctrl *gomock.Controller @@ -1027,3 +1185,151 @@ func (mr *MockAdminServiceServerMockRecorder) ResendReplicationTasks(arg0, arg1 mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResendReplicationTasks", reflect.TypeOf((*MockAdminServiceServer)(nil).ResendReplicationTasks), arg0, arg1) } + +// StreamWorkflowReplicationMessages mocks base method. +func (m *MockAdminServiceServer) StreamWorkflowReplicationMessages(arg0 adminservice.AdminService_StreamWorkflowReplicationMessagesServer) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StreamWorkflowReplicationMessages", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// StreamWorkflowReplicationMessages indicates an expected call of StreamWorkflowReplicationMessages. +func (mr *MockAdminServiceServerMockRecorder) StreamWorkflowReplicationMessages(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StreamWorkflowReplicationMessages", reflect.TypeOf((*MockAdminServiceServer)(nil).StreamWorkflowReplicationMessages), arg0) +} + +// MockAdminService_StreamWorkflowReplicationMessagesServer is a mock of AdminService_StreamWorkflowReplicationMessagesServer interface. +type MockAdminService_StreamWorkflowReplicationMessagesServer struct { + ctrl *gomock.Controller + recorder *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder +} + +// MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder is the mock recorder for MockAdminService_StreamWorkflowReplicationMessagesServer. +type MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder struct { + mock *MockAdminService_StreamWorkflowReplicationMessagesServer +} + +// NewMockAdminService_StreamWorkflowReplicationMessagesServer creates a new mock instance. +func NewMockAdminService_StreamWorkflowReplicationMessagesServer(ctrl *gomock.Controller) *MockAdminService_StreamWorkflowReplicationMessagesServer { + mock := &MockAdminService_StreamWorkflowReplicationMessagesServer{ctrl: ctrl} + mock.recorder = &MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAdminService_StreamWorkflowReplicationMessagesServer) EXPECT() *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder { + return m.recorder +} + +// Context mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesServer) Context() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder) Context() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesServer)(nil).Context)) +} + +// Recv mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesServer) Recv() (*adminservice.StreamWorkflowReplicationMessagesRequest, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Recv") + ret0, _ := ret[0].(*adminservice.StreamWorkflowReplicationMessagesRequest) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Recv indicates an expected call of Recv. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder) Recv() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Recv", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesServer)(nil).Recv)) +} + +// RecvMsg mocks base method. +func (m_2 *MockAdminService_StreamWorkflowReplicationMessagesServer) RecvMsg(m interface{}) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "RecvMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecvMsg indicates an expected call of RecvMsg. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder) RecvMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecvMsg", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesServer)(nil).RecvMsg), m) +} + +// Send mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesServer) Send(arg0 *adminservice.StreamWorkflowReplicationMessagesResponse) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Send", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Send indicates an expected call of Send. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder) Send(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Send", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesServer)(nil).Send), arg0) +} + +// SendHeader mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesServer) SendHeader(arg0 metadata.MD) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendHeader", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendHeader indicates an expected call of SendHeader. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder) SendHeader(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendHeader", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesServer)(nil).SendHeader), arg0) +} + +// SendMsg mocks base method. +func (m_2 *MockAdminService_StreamWorkflowReplicationMessagesServer) SendMsg(m interface{}) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "SendMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendMsg indicates an expected call of SendMsg. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder) SendMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMsg", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesServer)(nil).SendMsg), m) +} + +// SetHeader mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesServer) SetHeader(arg0 metadata.MD) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetHeader", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetHeader indicates an expected call of SetHeader. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder) SetHeader(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetHeader", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesServer)(nil).SetHeader), arg0) +} + +// SetTrailer mocks base method. +func (m *MockAdminService_StreamWorkflowReplicationMessagesServer) SetTrailer(arg0 metadata.MD) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "SetTrailer", arg0) +} + +// SetTrailer indicates an expected call of SetTrailer. +func (mr *MockAdminService_StreamWorkflowReplicationMessagesServerMockRecorder) SetTrailer(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetTrailer", reflect.TypeOf((*MockAdminService_StreamWorkflowReplicationMessagesServer)(nil).SetTrailer), arg0) +} diff --git a/api/historyservice/v1/request_response.pb.go b/api/historyservice/v1/request_response.pb.go index fdedd6a9bfd..86ac1837016 100644 --- a/api/historyservice/v1/request_response.pb.go +++ b/api/historyservice/v1/request_response.pb.go @@ -5504,6 +5504,174 @@ func (m *UpdateWorkflowExecutionResponse) GetResponse() *v1.UpdateWorkflowExecut return nil } +type StreamWorkflowReplicationMessagesRequest struct { + ShardId int32 `protobuf:"varint,1,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"` + // Types that are valid to be assigned to Attributes: + // + // *StreamWorkflowReplicationMessagesRequest_SyncReplicationState + Attributes isStreamWorkflowReplicationMessagesRequest_Attributes `protobuf_oneof:"attributes"` +} + +func (m *StreamWorkflowReplicationMessagesRequest) Reset() { + *m = StreamWorkflowReplicationMessagesRequest{} +} +func (*StreamWorkflowReplicationMessagesRequest) ProtoMessage() {} +func (*StreamWorkflowReplicationMessagesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b8c78c1d460a3711, []int{95} +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_StreamWorkflowReplicationMessagesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_StreamWorkflowReplicationMessagesRequest.Merge(m, src) +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_Size() int { + return m.Size() +} +func (m *StreamWorkflowReplicationMessagesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_StreamWorkflowReplicationMessagesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_StreamWorkflowReplicationMessagesRequest proto.InternalMessageInfo + +type isStreamWorkflowReplicationMessagesRequest_Attributes interface { + isStreamWorkflowReplicationMessagesRequest_Attributes() + Equal(interface{}) bool + MarshalTo([]byte) (int, error) + Size() int +} + +type StreamWorkflowReplicationMessagesRequest_SyncReplicationState struct { + SyncReplicationState *v115.SyncReplicationState `protobuf:"bytes,2,opt,name=sync_replication_state,json=syncReplicationState,proto3,oneof" json:"sync_replication_state,omitempty"` +} + +func (*StreamWorkflowReplicationMessagesRequest_SyncReplicationState) isStreamWorkflowReplicationMessagesRequest_Attributes() { +} + +func (m *StreamWorkflowReplicationMessagesRequest) GetAttributes() isStreamWorkflowReplicationMessagesRequest_Attributes { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *StreamWorkflowReplicationMessagesRequest) GetShardId() int32 { + if m != nil { + return m.ShardId + } + return 0 +} + +func (m *StreamWorkflowReplicationMessagesRequest) GetSyncReplicationState() *v115.SyncReplicationState { + if x, ok := m.GetAttributes().(*StreamWorkflowReplicationMessagesRequest_SyncReplicationState); ok { + return x.SyncReplicationState + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*StreamWorkflowReplicationMessagesRequest) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*StreamWorkflowReplicationMessagesRequest_SyncReplicationState)(nil), + } +} + +type StreamWorkflowReplicationMessagesResponse struct { + ShardId int32 `protobuf:"varint,1,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"` + // Types that are valid to be assigned to Attributes: + // + // *StreamWorkflowReplicationMessagesResponse_ReplicationMessages + Attributes isStreamWorkflowReplicationMessagesResponse_Attributes `protobuf_oneof:"attributes"` +} + +func (m *StreamWorkflowReplicationMessagesResponse) Reset() { + *m = StreamWorkflowReplicationMessagesResponse{} +} +func (*StreamWorkflowReplicationMessagesResponse) ProtoMessage() {} +func (*StreamWorkflowReplicationMessagesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b8c78c1d460a3711, []int{96} +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_StreamWorkflowReplicationMessagesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_StreamWorkflowReplicationMessagesResponse.Merge(m, src) +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_Size() int { + return m.Size() +} +func (m *StreamWorkflowReplicationMessagesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_StreamWorkflowReplicationMessagesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_StreamWorkflowReplicationMessagesResponse proto.InternalMessageInfo + +type isStreamWorkflowReplicationMessagesResponse_Attributes interface { + isStreamWorkflowReplicationMessagesResponse_Attributes() + Equal(interface{}) bool + MarshalTo([]byte) (int, error) + Size() int +} + +type StreamWorkflowReplicationMessagesResponse_ReplicationMessages struct { + ReplicationMessages *v115.ReplicationMessages `protobuf:"bytes,2,opt,name=replication_messages,json=replicationMessages,proto3,oneof" json:"replication_messages,omitempty"` +} + +func (*StreamWorkflowReplicationMessagesResponse_ReplicationMessages) isStreamWorkflowReplicationMessagesResponse_Attributes() { +} + +func (m *StreamWorkflowReplicationMessagesResponse) GetAttributes() isStreamWorkflowReplicationMessagesResponse_Attributes { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *StreamWorkflowReplicationMessagesResponse) GetShardId() int32 { + if m != nil { + return m.ShardId + } + return 0 +} + +func (m *StreamWorkflowReplicationMessagesResponse) GetReplicationMessages() *v115.ReplicationMessages { + if x, ok := m.GetAttributes().(*StreamWorkflowReplicationMessagesResponse_ReplicationMessages); ok { + return x.ReplicationMessages + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*StreamWorkflowReplicationMessagesResponse) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*StreamWorkflowReplicationMessagesResponse_ReplicationMessages)(nil), + } +} + func init() { proto.RegisterType((*StartWorkflowExecutionRequest)(nil), "temporal.server.api.historyservice.v1.StartWorkflowExecutionRequest") proto.RegisterType((*StartWorkflowExecutionResponse)(nil), "temporal.server.api.historyservice.v1.StartWorkflowExecutionResponse") @@ -5604,6 +5772,8 @@ func init() { proto.RegisterType((*DeleteWorkflowVisibilityRecordResponse)(nil), "temporal.server.api.historyservice.v1.DeleteWorkflowVisibilityRecordResponse") proto.RegisterType((*UpdateWorkflowExecutionRequest)(nil), "temporal.server.api.historyservice.v1.UpdateWorkflowExecutionRequest") proto.RegisterType((*UpdateWorkflowExecutionResponse)(nil), "temporal.server.api.historyservice.v1.UpdateWorkflowExecutionResponse") + proto.RegisterType((*StreamWorkflowReplicationMessagesRequest)(nil), "temporal.server.api.historyservice.v1.StreamWorkflowReplicationMessagesRequest") + proto.RegisterType((*StreamWorkflowReplicationMessagesResponse)(nil), "temporal.server.api.historyservice.v1.StreamWorkflowReplicationMessagesResponse") } func init() { @@ -5611,294 +5781,300 @@ func init() { } var fileDescriptor_b8c78c1d460a3711 = []byte{ - // 4589 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x4b, 0x6c, 0x1c, 0x47, - 0x76, 0x6a, 0xce, 0x0c, 0x39, 0x7c, 0x43, 0xce, 0xa7, 0xf9, 0x1b, 0x51, 0xd2, 0x88, 0x6c, 0x8b, - 0x12, 0x2d, 0x5b, 0x43, 0x7d, 0x76, 0xd7, 0x5a, 0x65, 0x6d, 0xaf, 0x44, 0xfd, 0x28, 0x48, 0x5a, - 0xba, 0x49, 0x4b, 0x8e, 0x77, 0xbd, 0xed, 0x66, 0x77, 0x91, 0xec, 0x70, 0xa6, 0x7b, 0xd4, 0xd5, - 0x43, 0x72, 0x9c, 0xc3, 0x26, 0x58, 0x24, 0xc8, 0x6e, 0x80, 0xc4, 0x40, 0x2e, 0x8b, 0x60, 0x93, - 0x43, 0x80, 0x20, 0x7b, 0x09, 0x72, 0xc8, 0x61, 0xb1, 0x87, 0x5c, 0x12, 0x20, 0x08, 0x72, 0x32, - 0x72, 0x89, 0x91, 0x00, 0xd9, 0x58, 0x3e, 0xc4, 0x41, 0x72, 0xd8, 0x63, 0x10, 0xe4, 0x10, 0xd4, - 0xaf, 0xa7, 0x7f, 0xf3, 0xe3, 0x48, 0x91, 0xd7, 0xf1, 0x8d, 0x53, 0xf5, 0xde, 0xab, 0x7a, 0xff, - 0xaa, 0x57, 0xaf, 0x09, 0xdf, 0xf0, 0x50, 0xbd, 0xe1, 0xb8, 0x7a, 0x6d, 0x05, 0x23, 0x77, 0x1f, - 0xb9, 0x2b, 0x7a, 0xc3, 0x5a, 0xd9, 0xb5, 0xb0, 0xe7, 0xb8, 0x2d, 0x32, 0x62, 0x19, 0x68, 0x65, - 0xff, 0xd2, 0x8a, 0x8b, 0x9e, 0x34, 0x11, 0xf6, 0x34, 0x17, 0xe1, 0x86, 0x63, 0x63, 0x54, 0x6d, - 0xb8, 0x8e, 0xe7, 0xc8, 0x4b, 0x02, 0xbb, 0xca, 0xb0, 0xab, 0x7a, 0xc3, 0xaa, 0x86, 0xb1, 0xab, - 0xfb, 0x97, 0xe6, 0x2b, 0x3b, 0x8e, 0xb3, 0x53, 0x43, 0x2b, 0x14, 0x69, 0xab, 0xb9, 0xbd, 0x62, - 0x36, 0x5d, 0xdd, 0xb3, 0x1c, 0x9b, 0x91, 0x99, 0x3f, 0x1d, 0x9d, 0xf7, 0xac, 0x3a, 0xc2, 0x9e, - 0x5e, 0x6f, 0x70, 0x80, 0x45, 0x13, 0x35, 0x90, 0x6d, 0x22, 0xdb, 0xb0, 0x10, 0x5e, 0xd9, 0x71, - 0x76, 0x1c, 0x3a, 0x4e, 0xff, 0xe2, 0x20, 0x67, 0x7c, 0x46, 0x08, 0x07, 0x86, 0x53, 0xaf, 0x3b, - 0x36, 0xd9, 0x79, 0x1d, 0x61, 0xac, 0xef, 0xf0, 0x0d, 0xcf, 0x2f, 0x85, 0xa0, 0xf8, 0x4e, 0xe3, - 0x60, 0xe7, 0x42, 0x60, 0x9e, 0x8e, 0xf7, 0x9e, 0x34, 0x51, 0x13, 0xc5, 0x01, 0xc3, 0xab, 0x22, - 0xbb, 0x59, 0xc7, 0x04, 0xe8, 0xc0, 0x71, 0xf7, 0xb6, 0x6b, 0xce, 0x01, 0x87, 0x3a, 0x1b, 0x82, - 0x12, 0x93, 0x71, 0x6a, 0x2f, 0x85, 0xe0, 0x9e, 0x34, 0x51, 0xd2, 0xde, 0xc2, 0xc4, 0xe8, 0x98, - 0xe1, 0xd4, 0x7a, 0xb1, 0xba, 0xad, 0x5b, 0xb5, 0xa6, 0x9b, 0xc0, 0xc1, 0xf9, 0x24, 0x03, 0x30, - 0x6a, 0x8e, 0xb1, 0x17, 0x87, 0x7d, 0xb5, 0x8b, 0xb1, 0xc4, 0xa1, 0x5f, 0x4e, 0x82, 0xf6, 0x45, - 0xc4, 0x34, 0xc4, 0x41, 0x5f, 0xe9, 0x0a, 0x1a, 0x91, 0xe6, 0xb9, 0xae, 0xc0, 0x44, 0x59, 0x1c, - 0xf0, 0x42, 0x12, 0x60, 0x67, 0xe9, 0x57, 0x93, 0xc0, 0x6d, 0xbd, 0x8e, 0x70, 0x43, 0x37, 0x12, - 0x24, 0x77, 0x31, 0x09, 0xde, 0x45, 0x8d, 0x9a, 0x65, 0x50, 0xe3, 0x8e, 0x63, 0x5c, 0x49, 0xc2, - 0x68, 0x20, 0x17, 0x5b, 0xd8, 0x43, 0x36, 0x5b, 0x03, 0x1d, 0x22, 0xa3, 0x49, 0xd0, 0x31, 0x47, - 0x7a, 0xb3, 0x0f, 0x24, 0xc1, 0x94, 0x56, 0x6f, 0x7a, 0xfa, 0x56, 0x0d, 0x69, 0xd8, 0xd3, 0x3d, - 0xb1, 0xea, 0xd7, 0x12, 0xad, 0xaf, 0xa7, 0x73, 0xcf, 0x5f, 0x4b, 0x5a, 0x58, 0x37, 0xeb, 0x96, - 0xdd, 0x13, 0x57, 0xf9, 0xdd, 0x51, 0x38, 0xb5, 0xe1, 0xe9, 0xae, 0xf7, 0x98, 0x2f, 0x77, 0x4b, - 0xb0, 0xa5, 0x32, 0x04, 0x79, 0x11, 0x26, 0x7c, 0xd9, 0x6a, 0x96, 0x59, 0x96, 0x16, 0xa4, 0xe5, - 0x71, 0x35, 0xe7, 0x8f, 0xad, 0x99, 0xb2, 0x01, 0x93, 0x98, 0xd0, 0xd0, 0xf8, 0x22, 0xe5, 0x91, - 0x05, 0x69, 0x39, 0x77, 0xf9, 0x0d, 0x5f, 0x51, 0x34, 0xdc, 0x44, 0x18, 0xaa, 0xee, 0x5f, 0xaa, - 0x76, 0x5d, 0x59, 0x9d, 0xa0, 0x44, 0xc5, 0x3e, 0x76, 0x61, 0xa6, 0xa1, 0xbb, 0xc8, 0xf6, 0x34, - 0x5f, 0xf2, 0x9a, 0x65, 0x6f, 0x3b, 0xe5, 0x14, 0x5d, 0xec, 0x2b, 0xd5, 0xa4, 0x10, 0xe7, 0x5b, - 0xe4, 0xfe, 0xa5, 0xea, 0x3a, 0xc5, 0xf6, 0x57, 0x59, 0xb3, 0xb7, 0x1d, 0x75, 0xaa, 0x11, 0x1f, - 0x94, 0xcb, 0x30, 0xa6, 0x7b, 0x84, 0x9a, 0x57, 0x4e, 0x2f, 0x48, 0xcb, 0x19, 0x55, 0xfc, 0x94, - 0xeb, 0xa0, 0xf8, 0x1a, 0x6c, 0xef, 0x02, 0x1d, 0x36, 0x2c, 0x16, 0x26, 0x35, 0x12, 0x0f, 0xcb, - 0x19, 0xba, 0xa1, 0xf9, 0x2a, 0x0b, 0x96, 0x55, 0x11, 0x2c, 0xab, 0x9b, 0x22, 0x58, 0xde, 0x48, - 0x7f, 0xf8, 0xf3, 0xd3, 0x92, 0x7a, 0xfa, 0x20, 0xca, 0xf9, 0x2d, 0x9f, 0x12, 0x81, 0x95, 0x77, - 0xe1, 0xb8, 0xe1, 0xd8, 0x9e, 0x65, 0x37, 0x91, 0xa6, 0x63, 0xcd, 0x46, 0x07, 0x9a, 0x65, 0x5b, - 0x9e, 0xa5, 0x7b, 0x8e, 0x5b, 0x1e, 0x5d, 0x90, 0x96, 0xf3, 0x97, 0x2f, 0x84, 0x65, 0x4c, 0xbd, - 0x8b, 0x30, 0xbb, 0xca, 0xf1, 0xae, 0xe3, 0x87, 0xe8, 0x60, 0x4d, 0x20, 0xa9, 0xb3, 0x46, 0xe2, - 0xb8, 0xfc, 0x00, 0x4a, 0x62, 0xc6, 0xd4, 0x78, 0x08, 0x2a, 0x8f, 0x51, 0x3e, 0x16, 0xc2, 0x2b, - 0xf0, 0x49, 0xb2, 0xc6, 0x6d, 0xf6, 0xa7, 0x5a, 0xf4, 0x51, 0xf9, 0x88, 0xfc, 0x08, 0x66, 0x6b, - 0x3a, 0xf6, 0x34, 0xc3, 0xa9, 0x37, 0x6a, 0x88, 0x4a, 0xc6, 0x45, 0xb8, 0x59, 0xf3, 0xca, 0xd9, - 0x24, 0x9a, 0x3c, 0xc4, 0x50, 0x1d, 0xb5, 0x6a, 0x8e, 0x6e, 0x62, 0x75, 0x9a, 0xe0, 0xaf, 0xfa, - 0xe8, 0x2a, 0xc5, 0x96, 0xbf, 0x0b, 0x27, 0xb6, 0x2d, 0x17, 0x7b, 0x9a, 0xaf, 0x05, 0x12, 0x45, - 0xb4, 0x2d, 0xdd, 0xd8, 0x73, 0xb6, 0xb7, 0xcb, 0xe3, 0x94, 0xf8, 0xf1, 0x98, 0xe0, 0x6f, 0xf2, - 0x2c, 0x76, 0x23, 0xfd, 0x23, 0x22, 0xf7, 0x32, 0xa5, 0x21, 0xcc, 0x6e, 0x53, 0xc7, 0x7b, 0x37, - 0x18, 0x01, 0xe5, 0x33, 0x09, 0x2a, 0x9d, 0x6c, 0x92, 0xb9, 0x8d, 0x3c, 0x03, 0xa3, 0x6e, 0xd3, - 0x6e, 0x3b, 0x42, 0xc6, 0x6d, 0xda, 0x6b, 0xa6, 0xfc, 0x26, 0x64, 0x68, 0x2c, 0xe6, 0xa6, 0xff, - 0x72, 0xa2, 0x35, 0x52, 0x08, 0xc2, 0xe6, 0x23, 0x64, 0x78, 0x8e, 0xbb, 0x4a, 0x7e, 0xaa, 0x0c, - 0x4f, 0xb6, 0x61, 0x0a, 0xe9, 0x3b, 0xc8, 0x0d, 0xb3, 0xc6, 0x8d, 0xbb, 0xb7, 0x27, 0xad, 0x3b, - 0xb5, 0x5a, 0x90, 0xa3, 0xb7, 0x48, 0x1a, 0x14, 0x9b, 0x56, 0x4b, 0x94, 0x74, 0x70, 0x5e, 0xf9, - 0x0f, 0x09, 0x66, 0xef, 0x20, 0xef, 0x01, 0x8b, 0x43, 0x1b, 0x24, 0x0c, 0x0d, 0xe0, 0xf1, 0x77, - 0x60, 0xdc, 0xb7, 0xff, 0x38, 0xcb, 0x61, 0x9d, 0xc6, 0x65, 0xd9, 0xc6, 0x95, 0xaf, 0xc0, 0x2c, - 0x3a, 0x6c, 0x20, 0xc3, 0x43, 0xa6, 0x66, 0xa3, 0x43, 0x4f, 0x43, 0xfb, 0xc4, 0xc5, 0x2d, 0x93, - 0x72, 0x9e, 0x52, 0xa7, 0xc4, 0xec, 0x43, 0x74, 0xe8, 0xdd, 0x22, 0x73, 0x6b, 0xa6, 0x7c, 0x11, - 0xa6, 0x8d, 0xa6, 0x4b, 0x63, 0xc1, 0x96, 0xab, 0xdb, 0xc6, 0xae, 0xe6, 0x39, 0x7b, 0xc8, 0xa6, - 0xde, 0x3a, 0xa1, 0xca, 0x7c, 0xee, 0x06, 0x9d, 0xda, 0x24, 0x33, 0xca, 0xcf, 0xb3, 0x30, 0x17, - 0xe3, 0x96, 0x6b, 0x34, 0xc4, 0x8b, 0x34, 0x04, 0x2f, 0x6b, 0x30, 0xd9, 0x56, 0x5e, 0xab, 0x81, - 0xb8, 0x60, 0xce, 0xf4, 0x22, 0xb6, 0xd9, 0x6a, 0x20, 0x75, 0xe2, 0x20, 0xf0, 0x4b, 0x56, 0x60, - 0x32, 0x49, 0x1a, 0x39, 0x3b, 0x20, 0x85, 0xaf, 0xc3, 0xf1, 0x86, 0x8b, 0xf6, 0x2d, 0xa7, 0x89, - 0x35, 0x1a, 0x29, 0x91, 0xd9, 0x86, 0x4f, 0x53, 0xf8, 0x59, 0x01, 0xb0, 0xc1, 0xe6, 0x05, 0xea, - 0x05, 0x98, 0xa2, 0xfe, 0xc9, 0x9c, 0xc9, 0x47, 0xca, 0x50, 0xa4, 0x22, 0x99, 0xba, 0x4d, 0x66, - 0x04, 0xf8, 0x2a, 0x00, 0xf5, 0x33, 0x7a, 0xb6, 0xa2, 0x81, 0x27, 0xc6, 0x95, 0x7f, 0xf4, 0x22, - 0x8c, 0xb5, 0x0d, 0x70, 0xdc, 0x13, 0x7f, 0xca, 0xeb, 0x50, 0xc2, 0x9e, 0x65, 0xec, 0xb5, 0xb4, - 0x00, 0xad, 0xb1, 0x01, 0x68, 0x15, 0x18, 0xba, 0x3f, 0x20, 0xff, 0x3a, 0xbc, 0x12, 0xa3, 0xa8, - 0x61, 0x63, 0x17, 0x99, 0xcd, 0x1a, 0xd2, 0x3c, 0x87, 0x49, 0x85, 0xc6, 0x64, 0xa7, 0xe9, 0x95, - 0x73, 0xfd, 0x45, 0x87, 0xa5, 0xc8, 0x32, 0x1b, 0x9c, 0xe0, 0xa6, 0x43, 0x85, 0xb8, 0xc9, 0xa8, - 0x75, 0xb4, 0xc1, 0xc9, 0x4e, 0x36, 0x28, 0x7f, 0x1b, 0xf2, 0xbe, 0x79, 0xd0, 0xb4, 0x5f, 0x2e, - 0xd0, 0x10, 0x9e, 0x9c, 0xb9, 0xfc, 0x48, 0x1e, 0x33, 0x39, 0x66, 0xbd, 0xbe, 0xa9, 0xd1, 0x9f, - 0xf2, 0x63, 0x28, 0x84, 0x88, 0x37, 0x71, 0xb9, 0x48, 0xa9, 0x57, 0x3b, 0x24, 0x88, 0x44, 0xb2, - 0x4d, 0xac, 0xe6, 0x83, 0x74, 0x9b, 0x58, 0x7e, 0x0f, 0x4a, 0xfb, 0xe4, 0x0c, 0xe3, 0xd8, 0x1a, - 0x3b, 0x40, 0x5a, 0x08, 0x97, 0x4b, 0x54, 0x94, 0x17, 0xab, 0x5d, 0x6e, 0x15, 0x2c, 0xcc, 0x51, - 0xc4, 0xbb, 0x02, 0x4f, 0x2d, 0xee, 0x47, 0x46, 0xe4, 0x37, 0xe0, 0xa4, 0x45, 0xcc, 0x37, 0xaa, - 0x46, 0x64, 0x13, 0x47, 0x35, 0xcb, 0xf2, 0x82, 0xb4, 0x9c, 0x55, 0xcb, 0x16, 0xde, 0x08, 0x6b, - 0xe5, 0x16, 0x9b, 0x97, 0xbf, 0x02, 0x73, 0x31, 0x4b, 0xf6, 0x0e, 0x69, 0x7c, 0x9e, 0x62, 0x01, - 0x24, 0x6c, 0xcd, 0x9b, 0x87, 0x24, 0x5a, 0x5f, 0x81, 0x59, 0x8e, 0xe0, 0x27, 0x71, 0x1e, 0xd4, - 0xa7, 0x69, 0xac, 0x9b, 0xa2, 0xb3, 0x6d, 0x27, 0x27, 0x21, 0xfe, 0x5e, 0x3a, 0x9b, 0x2d, 0x8e, - 0xdf, 0x4b, 0x67, 0xc7, 0x8b, 0x70, 0x2f, 0x9d, 0x85, 0x62, 0xee, 0x5e, 0x3a, 0x3b, 0x51, 0x9c, - 0xbc, 0x97, 0xce, 0xe6, 0x8b, 0x05, 0xe5, 0x3f, 0x25, 0x98, 0x23, 0x41, 0xf8, 0xff, 0x49, 0x40, - 0xfd, 0xc3, 0x2c, 0x94, 0xe3, 0xec, 0x7e, 0x19, 0x51, 0xbf, 0x8c, 0xa8, 0xcf, 0x3c, 0xa2, 0x4e, - 0x74, 0x8c, 0xa8, 0x89, 0xb1, 0x29, 0xff, 0xcc, 0x62, 0xd3, 0x2f, 0x67, 0xc0, 0xee, 0x12, 0x11, - 0x4b, 0x47, 0x89, 0x88, 0xf2, 0x60, 0x11, 0x71, 0xb2, 0x98, 0x57, 0x7e, 0x20, 0xc1, 0x09, 0x15, - 0x61, 0xe4, 0x45, 0x82, 0xf6, 0x0b, 0x88, 0x87, 0x4a, 0x05, 0x4e, 0x26, 0x6f, 0x85, 0xc5, 0x2a, - 0xe5, 0x27, 0x29, 0x58, 0x50, 0x91, 0xe1, 0xb8, 0x66, 0xf0, 0x78, 0xcc, 0xbd, 0x7b, 0x80, 0x0d, - 0xbf, 0x03, 0x72, 0xfc, 0x6a, 0x38, 0xf8, 0xce, 0x4b, 0xb1, 0x3b, 0xa1, 0xfc, 0x2a, 0xc8, 0xc2, - 0x05, 0xcd, 0x68, 0xf8, 0x2a, 0xfa, 0x33, 0x22, 0xb2, 0xcc, 0xc1, 0x18, 0xf5, 0x5d, 0x3f, 0x62, - 0x8d, 0x92, 0x9f, 0x6b, 0xa6, 0x7c, 0x0a, 0x40, 0xd4, 0x00, 0x78, 0x60, 0x1a, 0x57, 0xc7, 0xf9, - 0xc8, 0x9a, 0x29, 0xbf, 0x0f, 0x13, 0x0d, 0xa7, 0x56, 0xf3, 0xaf, 0xf0, 0x2c, 0x26, 0xbd, 0x7e, - 0xd4, 0x8b, 0x07, 0xbb, 0xc1, 0xe7, 0x08, 0x49, 0x21, 0x44, 0xff, 0x8a, 0x34, 0x76, 0xb4, 0x2b, - 0x12, 0x39, 0xc4, 0x2f, 0x76, 0x51, 0x15, 0x4f, 0x3e, 0xb1, 0x9c, 0x21, 0x1d, 0x39, 0x67, 0x74, - 0xcd, 0x07, 0x23, 0x5d, 0xf3, 0xc1, 0x60, 0x4a, 0x5b, 0x86, 0x62, 0x87, 0x7c, 0x93, 0xc7, 0x61, - 0xba, 0xb1, 0x34, 0x96, 0x89, 0xa7, 0xb1, 0x40, 0xfd, 0x62, 0x34, 0x5c, 0xbf, 0xb8, 0x0a, 0x65, - 0x1e, 0xdf, 0x03, 0xd5, 0x0b, 0x7e, 0xd2, 0x1a, 0xa3, 0x27, 0xad, 0x59, 0x36, 0xdf, 0xae, 0x48, - 0xf0, 0x73, 0xd6, 0x13, 0x98, 0xf3, 0x5c, 0xdd, 0xc6, 0x16, 0x59, 0x36, 0x7c, 0x45, 0x65, 0x57, - 0xfa, 0xaf, 0xf7, 0x0a, 0xb8, 0x9b, 0x02, 0x3d, 0xa8, 0x3c, 0x5a, 0x84, 0x99, 0xf1, 0x92, 0xa6, - 0xe4, 0x1d, 0x38, 0x95, 0x50, 0x6c, 0x09, 0xa4, 0xba, 0xf1, 0x01, 0x52, 0xdd, 0x7c, 0xcc, 0xaf, - 0xda, 0x59, 0x6f, 0x11, 0x26, 0x42, 0x09, 0x27, 0x47, 0x13, 0x4e, 0x6e, 0x2b, 0x90, 0x69, 0xee, - 0x40, 0xbe, 0xad, 0x4e, 0x5a, 0xe4, 0x99, 0xe8, 0xb3, 0xc8, 0x33, 0xe9, 0xe3, 0xd1, 0x92, 0xce, - 0x2a, 0x4c, 0x08, 0x4d, 0x53, 0x32, 0x93, 0x7d, 0x92, 0xc9, 0x71, 0x2c, 0x4a, 0xc4, 0x81, 0xb1, - 0x27, 0x4d, 0xc4, 0xb3, 0x5d, 0x6a, 0x39, 0x77, 0xf9, 0xed, 0x6a, 0x5f, 0xf5, 0xfd, 0x6a, 0x4f, - 0xef, 0xa9, 0xbe, 0xc5, 0xe8, 0xde, 0xb2, 0x3d, 0xb7, 0xa5, 0x8a, 0x55, 0xda, 0xae, 0x5b, 0x38, - 0x62, 0x75, 0xe3, 0x75, 0xc8, 0xf2, 0x0a, 0x2b, 0x49, 0x73, 0x64, 0xcb, 0x8b, 0x61, 0xb5, 0x89, - 0xf2, 0x38, 0xc1, 0x7f, 0xc0, 0x20, 0x55, 0x1f, 0x65, 0xfe, 0x7d, 0x98, 0x08, 0x6e, 0x4c, 0x2e, - 0x42, 0x6a, 0x0f, 0xb5, 0x78, 0x18, 0x26, 0x7f, 0xca, 0xd7, 0x20, 0xb3, 0xaf, 0xd7, 0x9a, 0x1d, - 0x4e, 0x88, 0xb4, 0x42, 0x1f, 0x74, 0x76, 0x42, 0xad, 0xa5, 0x32, 0x94, 0x6b, 0x23, 0x57, 0x25, - 0x96, 0xbe, 0x02, 0xc9, 0xe0, 0xba, 0xe1, 0x59, 0xfb, 0x96, 0xd7, 0xfa, 0x32, 0x19, 0x0c, 0x9a, - 0x0c, 0x82, 0x92, 0x7b, 0x8e, 0xc9, 0xe0, 0x6f, 0xd2, 0x22, 0x19, 0x24, 0xaa, 0x8a, 0x27, 0x83, - 0x87, 0x50, 0x88, 0x88, 0x8b, 0xa7, 0x83, 0xa5, 0x30, 0x2f, 0x81, 0x38, 0xc5, 0xce, 0x7f, 0x2d, - 0x2a, 0x42, 0x35, 0x1f, 0x16, 0x69, 0xcc, 0x7d, 0x47, 0x8e, 0xe2, 0xbe, 0x81, 0xf8, 0x9c, 0x0a, - 0xc7, 0x67, 0x04, 0x15, 0x71, 0x04, 0xe6, 0x43, 0x5a, 0x24, 0xec, 0xa4, 0xfb, 0x5c, 0xf0, 0x04, - 0xa7, 0x73, 0x9d, 0x91, 0xd9, 0x08, 0x05, 0xa1, 0x07, 0x50, 0xda, 0x45, 0xba, 0xeb, 0x6d, 0x21, - 0xdd, 0xd3, 0x4c, 0xe4, 0xe9, 0x56, 0x0d, 0xf3, 0xaa, 0x75, 0xef, 0xca, 0x6c, 0xd1, 0x47, 0xbd, - 0xc9, 0x30, 0xe3, 0x19, 0x77, 0xf4, 0xc8, 0x19, 0xf7, 0x42, 0xc0, 0x71, 0x7c, 0x87, 0xa2, 0x36, - 0x32, 0xde, 0xf6, 0x86, 0x87, 0x62, 0xa2, 0x6d, 0x45, 0xd9, 0x23, 0x5a, 0xd1, 0xcf, 0x24, 0x78, - 0x89, 0x19, 0x4b, 0x28, 0x2a, 0xf2, 0xc2, 0xf3, 0x40, 0x3e, 0xef, 0x40, 0x91, 0x97, 0xbb, 0x51, - 0xe4, 0x1d, 0xe4, 0x66, 0x4f, 0xbf, 0xe9, 0x63, 0x0b, 0x6a, 0x41, 0x50, 0xe7, 0x03, 0xca, 0x4f, - 0x47, 0xe0, 0x4c, 0x77, 0x44, 0xee, 0x04, 0xb8, 0x7d, 0xba, 0x10, 0xaf, 0x3f, 0xdc, 0x0b, 0xee, - 0x3e, 0xab, 0xbc, 0x41, 0xae, 0x92, 0x61, 0xcf, 0x43, 0x90, 0xd7, 0xb9, 0x63, 0xd2, 0x9c, 0x8d, - 0xcb, 0x23, 0x34, 0xee, 0xbf, 0x71, 0xd4, 0x20, 0xc2, 0x17, 0x9a, 0xd4, 0x03, 0x53, 0x98, 0xdc, - 0x5b, 0x5c, 0x72, 0xbc, 0xe7, 0x17, 0xc0, 0x56, 0xac, 0xdc, 0x41, 0x67, 0x83, 0x3e, 0xbd, 0x66, - 0x2a, 0x7f, 0x21, 0x91, 0x30, 0x1f, 0x93, 0xdc, 0x6d, 0xdd, 0xaa, 0x0d, 0xa4, 0xf2, 0x5d, 0xc8, - 0x6f, 0x53, 0x9c, 0x88, 0xc2, 0xaf, 0x1f, 0x45, 0xe1, 0xa1, 0xd5, 0xd5, 0xc9, 0xed, 0xe0, 0x4f, - 0xe5, 0x25, 0x12, 0xec, 0x3a, 0xa2, 0xf0, 0xab, 0xcc, 0xcf, 0x24, 0x50, 0xe2, 0x21, 0xf1, 0xae, - 0x70, 0xd7, 0x01, 0x18, 0x6b, 0x04, 0x03, 0x44, 0x98, 0xb7, 0xd5, 0x3e, 0x78, 0xeb, 0xb5, 0x85, - 0x40, 0x0c, 0x11, 0x0c, 0xae, 0x13, 0x3f, 0xec, 0x82, 0xc7, 0xad, 0xea, 0x65, 0x28, 0x1a, 0xba, - 0x6d, 0x20, 0x3f, 0x35, 0x21, 0xb6, 0xff, 0xac, 0x5a, 0x60, 0xe3, 0xaa, 0x18, 0x0e, 0xba, 0x76, - 0x90, 0xe6, 0x0b, 0x72, 0xed, 0x6e, 0x5b, 0x88, 0xbb, 0xf6, 0x59, 0xdf, 0xb3, 0x3b, 0xe0, 0x71, - 0x8d, 0x07, 0x0c, 0x39, 0x08, 0xf8, 0x7f, 0x6f, 0xc8, 0x1d, 0x57, 0xef, 0x6c, 0xc8, 0x49, 0x28, - 0x9c, 0xad, 0xbf, 0xa4, 0x86, 0x1c, 0xe7, 0x9f, 0x6a, 0x78, 0x20, 0xc6, 0x7e, 0x0d, 0xf2, 0x61, - 0x7b, 0x19, 0xc0, 0x8a, 0x7b, 0xad, 0xaf, 0x4e, 0x86, 0x4c, 0x4e, 0x59, 0x4a, 0xb6, 0x37, 0x1f, - 0x89, 0x33, 0xf7, 0xb7, 0x23, 0x50, 0xd9, 0xb0, 0x76, 0x6c, 0xbd, 0x36, 0xcc, 0x93, 0xfb, 0x36, - 0xe4, 0x31, 0x25, 0x12, 0x61, 0xec, 0xcd, 0xde, 0x6f, 0xee, 0x5d, 0xd7, 0x56, 0x27, 0x19, 0x59, - 0xb1, 0x15, 0x0b, 0x4e, 0xa0, 0x43, 0x0f, 0xb9, 0x64, 0xa5, 0x84, 0x23, 0x6d, 0x6a, 0xd0, 0x23, - 0xed, 0x71, 0x41, 0x2d, 0x36, 0x25, 0x57, 0x61, 0xca, 0xd8, 0xb5, 0x6a, 0x66, 0x7b, 0x1d, 0xc7, - 0xae, 0xb5, 0xe8, 0x89, 0x27, 0xab, 0x96, 0xe8, 0x94, 0x40, 0xfa, 0x96, 0x5d, 0x6b, 0x29, 0x8b, - 0x70, 0xba, 0x23, 0x2f, 0x5c, 0xd6, 0xff, 0x20, 0xc1, 0x39, 0x0e, 0x63, 0x79, 0xbb, 0x43, 0xf7, - 0x39, 0x7c, 0x5f, 0x82, 0xe3, 0x5c, 0xea, 0x07, 0x96, 0xb7, 0xab, 0x25, 0x35, 0x3d, 0xdc, 0xed, - 0x57, 0x01, 0xbd, 0x36, 0xa4, 0xce, 0xe2, 0x30, 0xa0, 0xb0, 0xb3, 0xeb, 0xb0, 0xdc, 0x9b, 0x44, - 0xd7, 0xd7, 0x6a, 0xe5, 0xaf, 0x24, 0x38, 0xad, 0xa2, 0xba, 0xb3, 0x8f, 0x18, 0xa5, 0x23, 0x3e, - 0x5a, 0x3c, 0xbf, 0x6b, 0x4e, 0xf8, 0x7e, 0x92, 0x8a, 0xdc, 0x4f, 0x14, 0x85, 0x84, 0xbd, 0x4e, - 0xdb, 0x17, 0xba, 0x1f, 0x81, 0xc5, 0x4d, 0xe4, 0xd6, 0x2d, 0x5b, 0xf7, 0xd0, 0x30, 0x5a, 0x77, - 0xa0, 0xe4, 0x09, 0x3a, 0x11, 0x65, 0xdf, 0xe8, 0xa9, 0xec, 0x9e, 0x3b, 0x50, 0x8b, 0x3e, 0xf1, - 0x5f, 0x02, 0x9f, 0x3b, 0x03, 0x4a, 0x37, 0x8e, 0xb8, 0xe8, 0xff, 0x5b, 0x82, 0xca, 0x4d, 0x44, - 0x52, 0xd5, 0x30, 0x72, 0x7f, 0x7e, 0xd6, 0xf5, 0x32, 0x14, 0x7d, 0xca, 0xbc, 0xea, 0xcf, 0x8f, - 0x8b, 0x7e, 0x4d, 0x9e, 0x3f, 0x0f, 0xd0, 0x47, 0x89, 0x9a, 0x83, 0x51, 0xb2, 0x84, 0x64, 0x36, - 0x17, 0x0d, 0x4b, 0x1d, 0x79, 0xe7, 0xf2, 0xf9, 0x33, 0x09, 0x4e, 0xd1, 0xa2, 0xf4, 0x90, 0x4d, - 0x57, 0xec, 0xe4, 0x3b, 0x68, 0xd3, 0x55, 0xd7, 0x95, 0xd5, 0x09, 0x4a, 0x54, 0xc4, 0x9a, 0xd7, - 0xa0, 0xd2, 0x09, 0xbc, 0x7b, 0x84, 0xf9, 0x83, 0x14, 0x2c, 0x71, 0x22, 0x2c, 0x03, 0x0e, 0xc3, - 0x6a, 0xbd, 0x43, 0x16, 0xbf, 0xdd, 0x07, 0xaf, 0x7d, 0x6c, 0x21, 0x92, 0xc8, 0xe5, 0xd7, 0x03, - 0xfe, 0xc7, 0xfb, 0xad, 0xe2, 0xc5, 0x96, 0xb2, 0x00, 0x59, 0x13, 0x10, 0xa2, 0xe8, 0xd2, 0xc3, - 0x7d, 0xd3, 0xcf, 0xdf, 0x7d, 0x33, 0x9d, 0xdc, 0x77, 0x19, 0xce, 0xf6, 0x92, 0x08, 0x37, 0xd1, - 0x7f, 0x1f, 0x81, 0x13, 0xa2, 0x68, 0x10, 0xbc, 0x72, 0x7c, 0x2e, 0xfc, 0xf7, 0x0a, 0xcc, 0x5a, - 0x58, 0x4b, 0xe8, 0x04, 0xa3, 0xba, 0xc9, 0xaa, 0x53, 0x16, 0xbe, 0x1d, 0x6d, 0xf1, 0x92, 0xef, - 0x41, 0x8e, 0xc9, 0x8a, 0x55, 0x0c, 0xd2, 0x83, 0x56, 0x0c, 0x80, 0x62, 0xd3, 0xbf, 0xe5, 0xfb, - 0x30, 0xc1, 0x7b, 0x11, 0x19, 0xb1, 0xcc, 0xa0, 0xc4, 0x72, 0x0c, 0x9d, 0xfe, 0x50, 0x2a, 0x70, - 0x32, 0x59, 0xd4, 0x5c, 0x17, 0xff, 0x26, 0xc1, 0xb9, 0x47, 0xc8, 0xb5, 0xb6, 0x5b, 0x31, 0xae, - 0xfc, 0xba, 0xce, 0xe7, 0x42, 0x2f, 0x7e, 0x39, 0x26, 0x75, 0xc4, 0x72, 0xcc, 0x79, 0x58, 0xee, - 0xcd, 0x28, 0x97, 0xca, 0xff, 0xa4, 0xc8, 0x25, 0x89, 0x5c, 0x19, 0x57, 0x89, 0x62, 0xfc, 0x5d, - 0x1c, 0xe5, 0x82, 0xf7, 0xfc, 0x44, 0x52, 0x05, 0xde, 0x62, 0x1a, 0x88, 0x24, 0x7e, 0x0c, 0x29, - 0xb1, 0x29, 0x3f, 0x82, 0xac, 0x99, 0xf2, 0xbb, 0x30, 0x25, 0x2e, 0x83, 0xe6, 0x30, 0x41, 0x43, - 0xf6, 0xa9, 0xb4, 0xf7, 0xb2, 0xee, 0x5f, 0x63, 0xe9, 0xbb, 0x0f, 0xad, 0x86, 0x66, 0x06, 0xa9, - 0x86, 0x16, 0xda, 0xe8, 0xac, 0x1c, 0xea, 0x2b, 0x7c, 0xf4, 0x88, 0xef, 0x02, 0x57, 0xa1, 0x1c, - 0x13, 0x8f, 0xc8, 0xc8, 0x63, 0xfc, 0x81, 0x2d, 0x2c, 0x23, 0x9e, 0x98, 0x95, 0x73, 0x24, 0xbf, - 0x74, 0xd5, 0xbe, 0x48, 0xb6, 0x29, 0xb8, 0xc0, 0x8c, 0x2a, 0x11, 0x92, 0x06, 0x3d, 0x42, 0x67, - 0x20, 0x83, 0xd9, 0x84, 0x62, 0xb4, 0x19, 0x79, 0x70, 0x73, 0x29, 0x44, 0x9a, 0x8f, 0x65, 0x15, - 0x0a, 0x2c, 0x44, 0x0d, 0x71, 0xd8, 0xcb, 0x1b, 0x21, 0x2e, 0x3b, 0x19, 0x60, 0xba, 0x93, 0x01, - 0x76, 0xd3, 0x48, 0xa6, 0x9b, 0x46, 0x86, 0x36, 0x06, 0xe5, 0x22, 0x54, 0xfb, 0x55, 0x14, 0xd7, - 0xed, 0x9f, 0x48, 0xb0, 0x70, 0x13, 0x61, 0xc3, 0xb5, 0xb6, 0x86, 0x3a, 0x6a, 0x7e, 0x1b, 0xc6, - 0x06, 0x2d, 0x7c, 0xf4, 0x5a, 0x56, 0x15, 0x14, 0x95, 0xdf, 0x4f, 0xc3, 0x62, 0x17, 0x68, 0x7e, - 0x8e, 0xfa, 0x0e, 0x14, 0xdb, 0x8f, 0x9c, 0x86, 0x63, 0x6f, 0x5b, 0x3b, 0xbc, 0x48, 0x7b, 0x29, - 0x79, 0x2f, 0x89, 0xea, 0x5f, 0xa5, 0x88, 0x6a, 0x01, 0x85, 0x07, 0xe4, 0x1d, 0x98, 0x4b, 0x78, - 0x4b, 0xa5, 0xed, 0xf3, 0x8c, 0xe1, 0x95, 0x01, 0x16, 0x61, 0x8f, 0xb6, 0x07, 0x49, 0xc3, 0xf2, - 0x77, 0x40, 0x6e, 0x20, 0xdb, 0xb4, 0xec, 0x1d, 0x8d, 0x17, 0x6a, 0x2d, 0x84, 0xcb, 0x29, 0x5a, - 0xfa, 0xbd, 0xd0, 0x79, 0x8d, 0x75, 0x86, 0x23, 0x0a, 0x27, 0x74, 0x85, 0x52, 0x23, 0x34, 0x68, - 0x21, 0x2c, 0x7f, 0x17, 0x8a, 0x82, 0x3a, 0x35, 0x73, 0x97, 0xf6, 0xa8, 0x11, 0xda, 0x57, 0x7a, - 0xd2, 0x0e, 0x1b, 0x15, 0x5d, 0xa1, 0xd0, 0x08, 0x4c, 0xb9, 0xc8, 0x96, 0x11, 0xcc, 0x08, 0xfa, - 0xe1, 0x73, 0x45, 0xa6, 0x97, 0x26, 0xf8, 0x22, 0xb1, 0xb7, 0xed, 0xa9, 0x46, 0x7c, 0x42, 0xf9, - 0xcd, 0x14, 0x94, 0x55, 0xfe, 0xfd, 0x09, 0xa2, 0x91, 0x14, 0x3f, 0xba, 0xfc, 0xb9, 0x48, 0x57, - 0xdb, 0x30, 0x13, 0xee, 0xa8, 0x6a, 0x69, 0x96, 0x87, 0xea, 0x42, 0x83, 0x97, 0x07, 0xea, 0xaa, - 0x6a, 0xad, 0x79, 0xa8, 0xae, 0x4e, 0xed, 0xc7, 0xc6, 0xb0, 0x7c, 0x15, 0x46, 0x69, 0xfe, 0xc1, - 0x3c, 0xb3, 0x75, 0x7c, 0x76, 0xba, 0xa9, 0x7b, 0xfa, 0x8d, 0x9a, 0xb3, 0xa5, 0x72, 0x78, 0xf9, - 0x36, 0xe4, 0x6d, 0x74, 0x40, 0x9b, 0x93, 0x38, 0x85, 0x4c, 0x9f, 0x14, 0x26, 0x6c, 0x74, 0xa0, - 0x36, 0x59, 0xe6, 0xc2, 0xca, 0x09, 0x38, 0x9e, 0xa0, 0x02, 0x1e, 0x57, 0xfe, 0x9e, 0x5e, 0xd0, - 0xf8, 0xec, 0xe3, 0x60, 0xdf, 0x96, 0xd0, 0x92, 0x16, 0xeb, 0x0d, 0x63, 0xce, 0x7a, 0x35, 0x51, - 0x42, 0x81, 0xaf, 0x80, 0x82, 0xaa, 0x08, 0xd5, 0x2d, 0x22, 0xfd, 0x61, 0x4b, 0x90, 0x77, 0x51, - 0xdd, 0xf1, 0x90, 0x66, 0xd4, 0x9a, 0xd8, 0x43, 0x2e, 0xd5, 0xef, 0xb8, 0x3a, 0xc9, 0x46, 0x57, - 0xd9, 0x60, 0xcc, 0x5a, 0x52, 0x31, 0x6b, 0x51, 0x16, 0xc8, 0x1d, 0x2e, 0x99, 0x17, 0xce, 0xee, - 0x1f, 0x49, 0x30, 0xbb, 0xd1, 0xb2, 0x8d, 0x8d, 0x5d, 0xdd, 0x35, 0x79, 0x5b, 0x19, 0xe7, 0x73, - 0x09, 0xf2, 0xd8, 0x69, 0xba, 0x46, 0x7b, 0x1b, 0xcc, 0x1e, 0x27, 0xd9, 0xa8, 0xd8, 0xc6, 0x71, - 0xc8, 0x62, 0x82, 0x2c, 0x1a, 0x63, 0x32, 0xea, 0x18, 0xfd, 0xbd, 0x66, 0xca, 0xd7, 0x21, 0xc7, - 0xfa, 0xdb, 0xd8, 0x03, 0x66, 0xaa, 0xcf, 0x07, 0x4c, 0x60, 0x48, 0x64, 0x58, 0x39, 0x0e, 0x73, - 0xb1, 0xed, 0xf1, 0xad, 0x7f, 0x96, 0x81, 0x29, 0x32, 0x27, 0x22, 0xc7, 0x00, 0x5e, 0x74, 0x1a, - 0x72, 0xbe, 0x0a, 0xf9, 0xb6, 0xc7, 0x55, 0x10, 0x43, 0x6b, 0x66, 0xe0, 0x6a, 0x9b, 0x0a, 0x7e, - 0xea, 0x51, 0x86, 0x31, 0x91, 0x10, 0x59, 0x16, 0x15, 0x3f, 0x3b, 0x3c, 0xce, 0x67, 0x3a, 0x3c, - 0xce, 0xc7, 0x7b, 0x4a, 0x46, 0x8f, 0xd6, 0x53, 0x92, 0xd4, 0x3d, 0x34, 0x96, 0xd8, 0x3d, 0x14, - 0x7d, 0xbe, 0xce, 0x1e, 0xe5, 0xf9, 0x7a, 0x9d, 0xb7, 0xba, 0xb6, 0x5f, 0x88, 0x28, 0xad, 0xf1, - 0x3e, 0x69, 0x95, 0x08, 0xb2, 0xff, 0xb2, 0x43, 0x29, 0x5e, 0x83, 0x31, 0xf1, 0x0a, 0x0d, 0x7d, - 0xbe, 0x42, 0x0b, 0x84, 0xe0, 0x63, 0x7a, 0x2e, 0xfc, 0x98, 0xbe, 0x0a, 0x13, 0xac, 0x11, 0x92, - 0x7f, 0xce, 0x34, 0xd1, 0xe7, 0xe7, 0x4c, 0x39, 0xda, 0x1f, 0xc9, 0xbf, 0x64, 0xba, 0x08, 0xf4, - 0x4b, 0x24, 0x9a, 0x0e, 0x90, 0xab, 0x59, 0x26, 0xb2, 0x3d, 0xcb, 0x6b, 0xd1, 0xbe, 0x9d, 0x71, - 0x55, 0x26, 0x73, 0x8f, 0xe9, 0xd4, 0x1a, 0x9f, 0x91, 0x1f, 0x43, 0x21, 0x12, 0x42, 0x79, 0x4b, - 0x6a, 0x75, 0xb0, 0xe0, 0xa9, 0xe6, 0xc3, 0x81, 0x53, 0x99, 0x85, 0xe9, 0xb0, 0xa5, 0x73, 0x17, - 0xf8, 0x81, 0x04, 0x27, 0xc4, 0xf9, 0xe2, 0x05, 0x77, 0x9f, 0x2b, 0xff, 0x25, 0xc1, 0xc9, 0xe4, - 0xbd, 0xf0, 0x63, 0xce, 0x2e, 0x4c, 0x19, 0xba, 0xb1, 0x8b, 0xc2, 0x1f, 0x40, 0x0e, 0x1d, 0x3c, - 0x4b, 0x94, 0x68, 0x70, 0x48, 0xb6, 0x61, 0xd6, 0xd4, 0x3d, 0x7d, 0x4b, 0xc7, 0xd1, 0xc5, 0x46, - 0x86, 0x5c, 0x6c, 0x5a, 0xd0, 0x0d, 0x8e, 0x2a, 0xff, 0x28, 0xc1, 0xbc, 0x60, 0x9d, 0xab, 0xec, - 0xae, 0x83, 0x83, 0xaf, 0xae, 0xbb, 0x0e, 0xf6, 0x34, 0xdd, 0x34, 0x5d, 0x84, 0xb1, 0xd0, 0x02, - 0x19, 0xbb, 0xce, 0x86, 0xba, 0x05, 0xd1, 0xde, 0x61, 0xbe, 0xc3, 0xa1, 0x20, 0x3d, 0xfc, 0xa1, - 0x40, 0xf9, 0x97, 0x80, 0x81, 0x85, 0x38, 0xe3, 0x3a, 0x7d, 0x09, 0x26, 0xe9, 0x3e, 0xb1, 0x66, - 0x37, 0xeb, 0x5b, 0x3c, 0x45, 0x64, 0xd4, 0x09, 0x36, 0xf8, 0x90, 0x8e, 0xc9, 0x27, 0x60, 0x5c, - 0x30, 0xc7, 0x5a, 0x01, 0x32, 0x6a, 0x96, 0x73, 0x87, 0xe5, 0xf7, 0xa0, 0xd0, 0x66, 0x8f, 0xaa, - 0xb2, 0xeb, 0x57, 0x9d, 0x3e, 0x2c, 0x61, 0xc1, 0xef, 0x06, 0x59, 0x25, 0x78, 0xf4, 0xd0, 0x95, - 0xb7, 0x43, 0x63, 0x34, 0x46, 0x70, 0xb1, 0xb3, 0x56, 0x27, 0xf1, 0xf3, 0x5e, 0x3a, 0x9b, 0x2e, - 0x66, 0x94, 0x2a, 0x94, 0x56, 0x6b, 0x0e, 0x46, 0x34, 0xc1, 0x08, 0x85, 0x05, 0xb5, 0x21, 0x85, - 0xb4, 0xa1, 0x4c, 0x83, 0x1c, 0x84, 0xe7, 0x7e, 0xf8, 0x2a, 0x14, 0xee, 0x20, 0xaf, 0x5f, 0x1a, - 0xef, 0x43, 0xb1, 0x0d, 0xcd, 0x05, 0x79, 0x1f, 0x80, 0x83, 0x93, 0x83, 0x39, 0xf3, 0x89, 0x0b, - 0xfd, 0x98, 0x29, 0x25, 0x43, 0x59, 0x67, 0x42, 0x26, 0x7f, 0x2a, 0xff, 0x24, 0x41, 0x89, 0xbd, - 0x92, 0x04, 0x0b, 0x77, 0x9d, 0xb7, 0x24, 0xdf, 0x86, 0x2c, 0x39, 0x23, 0xec, 0x90, 0x90, 0x35, - 0x42, 0x7b, 0xd1, 0xcf, 0x77, 0xef, 0x74, 0x67, 0xef, 0x9b, 0x0c, 0x43, 0xf5, 0x71, 0x83, 0x5d, - 0x67, 0xa9, 0x50, 0xd7, 0xd9, 0x1a, 0x14, 0xf6, 0x2d, 0x6c, 0x6d, 0x59, 0x35, 0xda, 0x15, 0x32, - 0x48, 0x3f, 0x53, 0xbe, 0x8d, 0x48, 0x8f, 0x04, 0xd3, 0x20, 0x07, 0x79, 0xe3, 0x2a, 0xf8, 0x50, - 0x82, 0x53, 0x77, 0x90, 0xa7, 0xb6, 0xbf, 0xed, 0xe6, 0xbd, 0x84, 0xfe, 0x79, 0xe6, 0x3e, 0x8c, - 0xd2, 0x26, 0x4f, 0xe2, 0x80, 0xa9, 0x8e, 0x06, 0x16, 0xf8, 0x38, 0x9c, 0x55, 0x91, 0xfd, 0x9f, - 0xb4, 0x1d, 0x54, 0xe5, 0x34, 0x88, 0x5b, 0xf2, 0x63, 0x11, 0xed, 0x56, 0xe2, 0x67, 0x88, 0x1c, - 0x1f, 0x23, 0x96, 0xa9, 0xfc, 0x78, 0x04, 0x2a, 0x9d, 0xb6, 0xc4, 0xd5, 0xfe, 0x3d, 0xc8, 0x33, - 0x95, 0xf8, 0x2d, 0x92, 0x6c, 0x6f, 0xef, 0xf4, 0xd9, 0x9d, 0xd3, 0x9d, 0x3c, 0x33, 0x0e, 0x31, - 0xca, 0x1a, 0x3b, 0x99, 0xbf, 0x8a, 0xb1, 0xf9, 0x16, 0xc8, 0x71, 0xa0, 0x60, 0x93, 0x65, 0x86, - 0x35, 0x59, 0x3e, 0x08, 0x37, 0x59, 0xbe, 0x36, 0xa0, 0xec, 0xfc, 0x9d, 0xb5, 0xfb, 0x2e, 0x95, - 0x0f, 0x60, 0xe1, 0x0e, 0xf2, 0x6e, 0xde, 0x7f, 0xab, 0x8b, 0xce, 0x1e, 0xf1, 0x8f, 0x65, 0x88, - 0x57, 0x08, 0xd9, 0x0c, 0xba, 0xb6, 0x7f, 0x21, 0xa3, 0xdf, 0xcf, 0x90, 0xbf, 0xb0, 0xf2, 0x5b, - 0x12, 0x2c, 0x76, 0x59, 0x9c, 0x6b, 0xe7, 0x7d, 0x28, 0x05, 0xc8, 0xf2, 0x5e, 0x26, 0x29, 0x7a, - 0xe9, 0xec, 0x7b, 0x13, 0x6a, 0xd1, 0x0d, 0x0f, 0x60, 0xe5, 0x87, 0x12, 0x4c, 0xd3, 0x86, 0x54, - 0x11, 0x8d, 0x07, 0xc8, 0xdc, 0xdf, 0x8a, 0x56, 0x2e, 0xbe, 0xda, 0xb3, 0x72, 0x91, 0xb4, 0x54, - 0xbb, 0x5a, 0xb1, 0x07, 0x33, 0x11, 0x00, 0x2e, 0x07, 0x15, 0xb2, 0x91, 0xee, 0xb1, 0xaf, 0x0d, - 0xba, 0x14, 0x6f, 0xe1, 0xf2, 0xe9, 0x28, 0xbf, 0x27, 0xc1, 0xb4, 0x8a, 0xf4, 0x46, 0xa3, 0xc6, - 0x2a, 0x8c, 0x78, 0x00, 0xce, 0x37, 0xa2, 0x9c, 0x27, 0x77, 0xa0, 0x07, 0xff, 0x0f, 0x02, 0x53, - 0x47, 0x7c, 0xb9, 0x36, 0xf7, 0x73, 0x30, 0x13, 0x01, 0xe0, 0x3b, 0xfd, 0xf3, 0x11, 0x98, 0x61, - 0xb6, 0x12, 0xb5, 0xce, 0x5b, 0x90, 0xf6, 0x3f, 0x33, 0xc8, 0x07, 0x4b, 0x04, 0x49, 0x11, 0xf3, - 0x26, 0xd2, 0xcd, 0xfb, 0xc8, 0xf3, 0x90, 0x4b, 0xbb, 0xda, 0x68, 0x07, 0x24, 0x45, 0xef, 0x96, - 0xfc, 0xe3, 0x77, 0xb0, 0x54, 0xd2, 0x1d, 0xec, 0x35, 0x28, 0x5b, 0x36, 0x81, 0xb0, 0xf6, 0x91, - 0x86, 0x6c, 0x3f, 0x9c, 0xb4, 0xcb, 0x7d, 0x33, 0xfe, 0xfc, 0x2d, 0x5b, 0x38, 0xfb, 0x9a, 0x29, - 0x9f, 0x87, 0x52, 0x5d, 0x3f, 0xb4, 0xea, 0xcd, 0xba, 0xd6, 0x20, 0xf0, 0xd8, 0xfa, 0x80, 0xfd, - 0x13, 0x83, 0x8c, 0x5a, 0xe0, 0x13, 0xeb, 0xfa, 0x0e, 0xda, 0xb0, 0x3e, 0x40, 0xf2, 0x59, 0x28, - 0xd0, 0xef, 0x0f, 0x28, 0x20, 0x6b, 0x97, 0x1f, 0xa5, 0xed, 0xf2, 0xf4, 0xb3, 0x04, 0x02, 0xc6, - 0xbe, 0x0f, 0xfc, 0x78, 0x84, 0x7e, 0x5e, 0x1e, 0x92, 0x17, 0x37, 0xa4, 0x67, 0x24, 0xb0, 0x44, - 0xbf, 0x1c, 0x79, 0x86, 0x7e, 0x99, 0xc4, 0x6b, 0x2a, 0x81, 0x57, 0xb9, 0x0e, 0xb3, 0xb1, 0x9d, - 0xb0, 0x14, 0x9e, 0x1e, 0x2e, 0x56, 0x4d, 0x47, 0xb7, 0x44, 0xf3, 0xfa, 0x3f, 0x4b, 0x30, 0xb7, - 0xde, 0x74, 0x77, 0xd0, 0x17, 0xd1, 0x18, 0x95, 0x79, 0x28, 0xc7, 0x99, 0x13, 0xed, 0x6e, 0x23, - 0x30, 0xf7, 0x00, 0x7d, 0x41, 0x39, 0x7f, 0x2e, 0x6e, 0x78, 0x03, 0xca, 0x71, 0x81, 0x71, 0x3f, - 0x4c, 0xa0, 0x21, 0x25, 0xd1, 0xf8, 0x31, 0xfd, 0x9a, 0x6f, 0xdb, 0x45, 0x78, 0x37, 0x58, 0xc5, - 0x1c, 0x24, 0x56, 0xbf, 0x1b, 0x8d, 0xd5, 0xdf, 0xec, 0x33, 0x56, 0x77, 0x5c, 0xb5, 0x1d, 0xb2, - 0xe9, 0x07, 0x7e, 0x49, 0x70, 0xdc, 0x68, 0x7e, 0x24, 0xc1, 0xf9, 0x3b, 0xc8, 0x46, 0xae, 0xee, - 0xa1, 0xfb, 0x3a, 0x16, 0xbd, 0xc0, 0x11, 0x7f, 0xc3, 0x2f, 0xe2, 0xb6, 0x7c, 0x01, 0x5e, 0xe9, - 0x6b, 0x67, 0x9c, 0x93, 0xdb, 0x70, 0x22, 0x7c, 0xd4, 0x0b, 0x97, 0xea, 0xce, 0x41, 0x21, 0x5c, - 0x31, 0x64, 0xc7, 0x94, 0x71, 0x35, 0x1f, 0x2a, 0x19, 0x62, 0xa5, 0x09, 0x27, 0x93, 0xe9, 0x70, - 0xc3, 0x78, 0x1b, 0x46, 0xd9, 0xd5, 0x8d, 0x1f, 0x73, 0x5e, 0xef, 0xf3, 0x1c, 0xca, 0x2f, 0x33, - 0x51, 0xb2, 0x9c, 0x98, 0xf2, 0xd7, 0xa3, 0x30, 0x9b, 0x0c, 0xd2, 0xed, 0x52, 0xf2, 0x55, 0x98, - 0xab, 0xeb, 0x87, 0x5a, 0x34, 0xc0, 0xb6, 0xbf, 0xc0, 0x9b, 0xae, 0xeb, 0x87, 0xd1, 0xe0, 0x69, - 0xca, 0xf7, 0xa1, 0xc8, 0x28, 0xd6, 0x1c, 0x43, 0xaf, 0xf5, 0x5b, 0x7a, 0x1c, 0x25, 0x77, 0x8d, - 0xb2, 0xa4, 0xb2, 0xf3, 0xf8, 0x7d, 0x82, 0x4a, 0x0b, 0x54, 0x1f, 0xc4, 0x45, 0xcb, 0x42, 0xfb, - 0x5b, 0x43, 0x89, 0xa6, 0xaa, 0x86, 0x14, 0xc3, 0xce, 0xe6, 0x11, 0x6d, 0xc9, 0xbf, 0x2d, 0xc1, - 0xd4, 0xae, 0x6e, 0x9b, 0xce, 0x3e, 0xbf, 0x65, 0x50, 0x33, 0x24, 0x37, 0xd9, 0x41, 0xbe, 0xfc, - 0xea, 0xb0, 0x81, 0xbb, 0x9c, 0xb0, 0x7f, 0x89, 0xe6, 0x9b, 0x90, 0x77, 0x63, 0x13, 0x72, 0x03, - 0xce, 0x24, 0x6a, 0x22, 0x7a, 0xa5, 0xeb, 0xb7, 0x8a, 0xb9, 0x10, 0x57, 0xdc, 0xa3, 0xd0, 0x25, - 0x6f, 0xfe, 0x87, 0x12, 0x4c, 0x25, 0x88, 0x28, 0xe1, 0xf3, 0xaf, 0xf7, 0xc2, 0x37, 0x93, 0x3b, - 0x43, 0x49, 0x65, 0x1d, 0xb9, 0x7c, 0xbd, 0xc0, 0x4d, 0x65, 0xfe, 0xfb, 0x12, 0xcc, 0x75, 0x10, - 0x57, 0xc2, 0x86, 0xd4, 0xf0, 0x86, 0xbe, 0xd1, 0xe7, 0x86, 0x62, 0x0b, 0xd0, 0x73, 0x40, 0xe0, - 0xbe, 0xf4, 0x0e, 0xcc, 0x24, 0xc2, 0xc8, 0x6f, 0xc2, 0x49, 0xdf, 0x4a, 0x92, 0x9c, 0x45, 0xa2, - 0xce, 0x72, 0x5c, 0xc0, 0xc4, 0x3c, 0x46, 0xf9, 0x53, 0x09, 0x16, 0x7a, 0xc9, 0x43, 0x56, 0x60, - 0x52, 0x37, 0xf6, 0x90, 0x19, 0x21, 0x9b, 0xa3, 0x83, 0xdc, 0xf5, 0xde, 0x83, 0xf9, 0x00, 0x4c, - 0xd4, 0x3a, 0xfa, 0xfd, 0x62, 0x6a, 0xce, 0x27, 0x19, 0x36, 0x0a, 0xe5, 0x77, 0x24, 0x98, 0x57, - 0xd1, 0x56, 0xd3, 0xaa, 0x99, 0x2f, 0xba, 0xda, 0x79, 0x8a, 0x24, 0xc6, 0x84, 0x9d, 0xf0, 0x78, - 0xfd, 0xd3, 0x11, 0x58, 0x0a, 0xb7, 0x02, 0xb6, 0x59, 0x61, 0x4f, 0xd9, 0x2f, 0xe2, 0x1f, 0x84, - 0xac, 0xc3, 0x54, 0xf0, 0xe5, 0x8a, 0xff, 0x3b, 0x87, 0xbe, 0xdf, 0x65, 0x4a, 0x81, 0x67, 0x2a, - 0xf6, 0xbf, 0x1b, 0x42, 0x14, 0x69, 0x43, 0xe4, 0x60, 0xa5, 0x1d, 0x9f, 0x22, 0xad, 0xa9, 0x51, - 0x1d, 0x2f, 0xc3, 0xd9, 0x5e, 0x82, 0xe3, 0x32, 0xfe, 0x63, 0x09, 0x2a, 0x6f, 0x37, 0xcc, 0x21, - 0x5b, 0x7c, 0x7f, 0x35, 0x7a, 0x3e, 0xe9, 0xdd, 0x46, 0xdf, 0x7d, 0xd1, 0xf6, 0xf1, 0xe4, 0x7b, - 0x70, 0xba, 0x23, 0xa8, 0xff, 0xf4, 0x1f, 0xbd, 0x59, 0x7f, 0xf3, 0xe8, 0xcb, 0x47, 0xef, 0xd8, - 0x37, 0x1a, 0x1f, 0x7d, 0x52, 0x39, 0xf6, 0xf1, 0x27, 0x95, 0x63, 0xbf, 0xf8, 0xa4, 0x22, 0xfd, - 0xc6, 0xd3, 0x8a, 0xf4, 0x93, 0xa7, 0x15, 0xe9, 0xef, 0x9e, 0x56, 0xa4, 0x8f, 0x9e, 0x56, 0xa4, - 0x7f, 0x7d, 0x5a, 0x91, 0x3e, 0x7b, 0x5a, 0x39, 0xf6, 0x8b, 0xa7, 0x15, 0xe9, 0xc3, 0x4f, 0x2b, - 0xc7, 0x3e, 0xfa, 0xb4, 0x72, 0xec, 0xe3, 0x4f, 0x2b, 0xc7, 0xde, 0xbd, 0xb6, 0xe3, 0xb4, 0xf7, - 0x60, 0x39, 0x5d, 0xff, 0xe9, 0xe8, 0xaf, 0x84, 0x47, 0xb6, 0x46, 0xa9, 0xaa, 0xaf, 0xfc, 0x6f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xef, 0xf4, 0x7c, 0xb6, 0xb3, 0x54, 0x00, 0x00, + // 4673 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x4b, 0x6c, 0x1c, 0xc9, + 0x75, 0x6a, 0xce, 0x0c, 0x39, 0x7c, 0x33, 0x9c, 0x4f, 0xf3, 0x37, 0xa2, 0xa4, 0x11, 0xd5, 0xbb, + 0x92, 0x28, 0xed, 0x6a, 0xf4, 0xb3, 0xbd, 0xb2, 0xe2, 0xdd, 0xb5, 0x48, 0xfd, 0x28, 0x48, 0x32, + 0xb7, 0xc9, 0x95, 0x36, 0x6b, 0xaf, 0x7b, 0x9b, 0xdd, 0x45, 0xb2, 0xc3, 0x99, 0xee, 0x51, 0x57, + 0x0f, 0xc9, 0xd9, 0x1c, 0x9c, 0xc0, 0x48, 0x10, 0x3b, 0x40, 0xb2, 0x40, 0x2e, 0x46, 0xe0, 0xe4, + 0x10, 0x20, 0x88, 0x2f, 0x41, 0x0e, 0x39, 0x18, 0x3e, 0xe4, 0xe2, 0x20, 0x41, 0x90, 0xd3, 0x22, + 0x97, 0x2c, 0x12, 0x20, 0xce, 0x6a, 0x0f, 0xd9, 0x20, 0x39, 0xf8, 0x18, 0x04, 0x39, 0x04, 0xf5, + 0xeb, 0xe9, 0xdf, 0xfc, 0x38, 0x52, 0xb4, 0x76, 0xf6, 0xc6, 0xa9, 0x7a, 0xef, 0x55, 0xbd, 0x7f, + 0xd5, 0xab, 0xd7, 0x84, 0xaf, 0x79, 0xa8, 0xd1, 0x74, 0x5c, 0xbd, 0x7e, 0x11, 0x23, 0x77, 0x0f, + 0xb9, 0x17, 0xf5, 0xa6, 0x75, 0x71, 0xc7, 0xc2, 0x9e, 0xe3, 0xb6, 0xc9, 0x88, 0x65, 0xa0, 0x8b, + 0x7b, 0x97, 0x2f, 0xba, 0xe8, 0x49, 0x0b, 0x61, 0x4f, 0x73, 0x11, 0x6e, 0x3a, 0x36, 0x46, 0xb5, + 0xa6, 0xeb, 0x78, 0x8e, 0x7c, 0x5a, 0x60, 0xd7, 0x18, 0x76, 0x4d, 0x6f, 0x5a, 0xb5, 0x30, 0x76, + 0x6d, 0xef, 0xf2, 0x42, 0x75, 0xdb, 0x71, 0xb6, 0xeb, 0xe8, 0x22, 0x45, 0xda, 0x6c, 0x6d, 0x5d, + 0x34, 0x5b, 0xae, 0xee, 0x59, 0x8e, 0xcd, 0xc8, 0x2c, 0x9c, 0x8c, 0xce, 0x7b, 0x56, 0x03, 0x61, + 0x4f, 0x6f, 0x34, 0x39, 0xc0, 0x29, 0x13, 0x35, 0x91, 0x6d, 0x22, 0xdb, 0xb0, 0x10, 0xbe, 0xb8, + 0xed, 0x6c, 0x3b, 0x74, 0x9c, 0xfe, 0xc5, 0x41, 0x5e, 0xf6, 0x19, 0x21, 0x1c, 0x18, 0x4e, 0xa3, + 0xe1, 0xd8, 0x64, 0xe7, 0x0d, 0x84, 0xb1, 0xbe, 0xcd, 0x37, 0xbc, 0x70, 0x3a, 0x04, 0xc5, 0x77, + 0x1a, 0x07, 0x3b, 0x1b, 0x02, 0xf3, 0x74, 0xbc, 0xfb, 0xa4, 0x85, 0x5a, 0x28, 0x0e, 0x18, 0x5e, + 0x15, 0xd9, 0xad, 0x06, 0x26, 0x40, 0xfb, 0x8e, 0xbb, 0xbb, 0x55, 0x77, 0xf6, 0x39, 0xd4, 0x99, + 0x10, 0x94, 0x98, 0x8c, 0x53, 0x7b, 0x29, 0x04, 0xf7, 0xa4, 0x85, 0x92, 0xf6, 0x16, 0x26, 0x46, + 0xc7, 0x0c, 0xa7, 0xde, 0x8f, 0xd5, 0x2d, 0xdd, 0xaa, 0xb7, 0xdc, 0x04, 0x0e, 0xce, 0x27, 0x19, + 0x80, 0x51, 0x77, 0x8c, 0xdd, 0x38, 0xec, 0xab, 0x3d, 0x8c, 0x25, 0x0e, 0x7d, 0x2e, 0x09, 0xda, + 0x17, 0x11, 0xd3, 0x10, 0x07, 0x7d, 0xa5, 0x27, 0x68, 0x44, 0x9a, 0x67, 0x7b, 0x02, 0x13, 0x65, + 0x71, 0xc0, 0x0b, 0x49, 0x80, 0xdd, 0xa5, 0x5f, 0x4b, 0x02, 0xb7, 0xf5, 0x06, 0xc2, 0x4d, 0xdd, + 0x48, 0x90, 0xdc, 0xa5, 0x24, 0x78, 0x17, 0x35, 0xeb, 0x96, 0x41, 0x8d, 0x3b, 0x8e, 0x71, 0x35, + 0x09, 0xa3, 0x89, 0x5c, 0x6c, 0x61, 0x0f, 0xd9, 0x6c, 0x0d, 0x74, 0x80, 0x8c, 0x16, 0x41, 0xc7, + 0x1c, 0xe9, 0xcd, 0x01, 0x90, 0x04, 0x53, 0x5a, 0xa3, 0xe5, 0xe9, 0x9b, 0x75, 0xa4, 0x61, 0x4f, + 0xf7, 0xc4, 0xaa, 0x5f, 0x49, 0xb4, 0xbe, 0xbe, 0xce, 0xbd, 0x70, 0x3d, 0x69, 0x61, 0xdd, 0x6c, + 0x58, 0x76, 0x5f, 0x5c, 0xe5, 0x77, 0xc7, 0xe1, 0xc4, 0xba, 0xa7, 0xbb, 0xde, 0x63, 0xbe, 0xdc, + 0x2d, 0xc1, 0x96, 0xca, 0x10, 0xe4, 0x53, 0x90, 0xf7, 0x65, 0xab, 0x59, 0x66, 0x45, 0x5a, 0x94, + 0x96, 0x26, 0xd5, 0x9c, 0x3f, 0xb6, 0x6a, 0xca, 0x06, 0x4c, 0x61, 0x42, 0x43, 0xe3, 0x8b, 0x54, + 0xc6, 0x16, 0xa5, 0xa5, 0xdc, 0x95, 0x37, 0x7c, 0x45, 0xd1, 0x70, 0x13, 0x61, 0xa8, 0xb6, 0x77, + 0xb9, 0xd6, 0x73, 0x65, 0x35, 0x4f, 0x89, 0x8a, 0x7d, 0xec, 0xc0, 0x6c, 0x53, 0x77, 0x91, 0xed, + 0x69, 0xbe, 0xe4, 0x35, 0xcb, 0xde, 0x72, 0x2a, 0x29, 0xba, 0xd8, 0x97, 0x6a, 0x49, 0x21, 0xce, + 0xb7, 0xc8, 0xbd, 0xcb, 0xb5, 0x35, 0x8a, 0xed, 0xaf, 0xb2, 0x6a, 0x6f, 0x39, 0xea, 0x74, 0x33, + 0x3e, 0x28, 0x57, 0x60, 0x42, 0xf7, 0x08, 0x35, 0xaf, 0x92, 0x5e, 0x94, 0x96, 0x32, 0xaa, 0xf8, + 0x29, 0x37, 0x40, 0xf1, 0x35, 0xd8, 0xd9, 0x05, 0x3a, 0x68, 0x5a, 0x2c, 0x4c, 0x6a, 0x24, 0x1e, + 0x56, 0x32, 0x74, 0x43, 0x0b, 0x35, 0x16, 0x2c, 0x6b, 0x22, 0x58, 0xd6, 0x36, 0x44, 0xb0, 0x5c, + 0x4e, 0x7f, 0xf8, 0xb3, 0x93, 0x92, 0x7a, 0x72, 0x3f, 0xca, 0xf9, 0x2d, 0x9f, 0x12, 0x81, 0x95, + 0x77, 0xe0, 0xa8, 0xe1, 0xd8, 0x9e, 0x65, 0xb7, 0x90, 0xa6, 0x63, 0xcd, 0x46, 0xfb, 0x9a, 0x65, + 0x5b, 0x9e, 0xa5, 0x7b, 0x8e, 0x5b, 0x19, 0x5f, 0x94, 0x96, 0x0a, 0x57, 0x2e, 0x84, 0x65, 0x4c, + 0xbd, 0x8b, 0x30, 0xbb, 0xc2, 0xf1, 0x6e, 0xe0, 0x87, 0x68, 0x7f, 0x55, 0x20, 0xa9, 0x73, 0x46, + 0xe2, 0xb8, 0xfc, 0x00, 0xca, 0x62, 0xc6, 0xd4, 0x78, 0x08, 0xaa, 0x4c, 0x50, 0x3e, 0x16, 0xc3, + 0x2b, 0xf0, 0x49, 0xb2, 0xc6, 0x6d, 0xf6, 0xa7, 0x5a, 0xf2, 0x51, 0xf9, 0x88, 0xfc, 0x08, 0xe6, + 0xea, 0x3a, 0xf6, 0x34, 0xc3, 0x69, 0x34, 0xeb, 0x88, 0x4a, 0xc6, 0x45, 0xb8, 0x55, 0xf7, 0x2a, + 0xd9, 0x24, 0x9a, 0x3c, 0xc4, 0x50, 0x1d, 0xb5, 0xeb, 0x8e, 0x6e, 0x62, 0x75, 0x86, 0xe0, 0xaf, + 0xf8, 0xe8, 0x2a, 0xc5, 0x96, 0xbf, 0x0d, 0xc7, 0xb6, 0x2c, 0x17, 0x7b, 0x9a, 0xaf, 0x05, 0x12, + 0x45, 0xb4, 0x4d, 0xdd, 0xd8, 0x75, 0xb6, 0xb6, 0x2a, 0x93, 0x94, 0xf8, 0xd1, 0x98, 0xe0, 0x6f, + 0xf2, 0x2c, 0xb6, 0x9c, 0xfe, 0x01, 0x91, 0x7b, 0x85, 0xd2, 0x10, 0x66, 0xb7, 0xa1, 0xe3, 0xdd, + 0x65, 0x46, 0x40, 0xf9, 0x4c, 0x82, 0x6a, 0x37, 0x9b, 0x64, 0x6e, 0x23, 0xcf, 0xc2, 0xb8, 0xdb, + 0xb2, 0x3b, 0x8e, 0x90, 0x71, 0x5b, 0xf6, 0xaa, 0x29, 0xbf, 0x09, 0x19, 0x1a, 0x8b, 0xb9, 0xe9, + 0x9f, 0x4b, 0xb4, 0x46, 0x0a, 0x41, 0xd8, 0x7c, 0x84, 0x0c, 0xcf, 0x71, 0x57, 0xc8, 0x4f, 0x95, + 0xe1, 0xc9, 0x36, 0x4c, 0x23, 0x7d, 0x1b, 0xb9, 0x61, 0xd6, 0xb8, 0x71, 0xf7, 0xf7, 0xa4, 0x35, + 0xa7, 0x5e, 0x0f, 0x72, 0xf4, 0x16, 0x49, 0x83, 0x62, 0xd3, 0x6a, 0x99, 0x92, 0x0e, 0xce, 0x2b, + 0xff, 0x21, 0xc1, 0xdc, 0x1d, 0xe4, 0x3d, 0x60, 0x71, 0x68, 0x9d, 0x84, 0xa1, 0x21, 0x3c, 0xfe, + 0x0e, 0x4c, 0xfa, 0xf6, 0x1f, 0x67, 0x39, 0xac, 0xd3, 0xb8, 0x2c, 0x3b, 0xb8, 0xf2, 0x55, 0x98, + 0x43, 0x07, 0x4d, 0x64, 0x78, 0xc8, 0xd4, 0x6c, 0x74, 0xe0, 0x69, 0x68, 0x8f, 0xb8, 0xb8, 0x65, + 0x52, 0xce, 0x53, 0xea, 0xb4, 0x98, 0x7d, 0x88, 0x0e, 0xbc, 0x5b, 0x64, 0x6e, 0xd5, 0x94, 0x2f, + 0xc1, 0x8c, 0xd1, 0x72, 0x69, 0x2c, 0xd8, 0x74, 0x75, 0xdb, 0xd8, 0xd1, 0x3c, 0x67, 0x17, 0xd9, + 0xd4, 0x5b, 0xf3, 0xaa, 0xcc, 0xe7, 0x96, 0xe9, 0xd4, 0x06, 0x99, 0x51, 0x7e, 0x96, 0x85, 0xf9, + 0x18, 0xb7, 0x5c, 0xa3, 0x21, 0x5e, 0xa4, 0x11, 0x78, 0x59, 0x85, 0xa9, 0x8e, 0xf2, 0xda, 0x4d, + 0xc4, 0x05, 0xf3, 0x72, 0x3f, 0x62, 0x1b, 0xed, 0x26, 0x52, 0xf3, 0xfb, 0x81, 0x5f, 0xb2, 0x02, + 0x53, 0x49, 0xd2, 0xc8, 0xd9, 0x01, 0x29, 0x7c, 0x15, 0x8e, 0x36, 0x5d, 0xb4, 0x67, 0x39, 0x2d, + 0xac, 0xd1, 0x48, 0x89, 0xcc, 0x0e, 0x7c, 0x9a, 0xc2, 0xcf, 0x09, 0x80, 0x75, 0x36, 0x2f, 0x50, + 0x2f, 0xc0, 0x34, 0xf5, 0x4f, 0xe6, 0x4c, 0x3e, 0x52, 0x86, 0x22, 0x95, 0xc8, 0xd4, 0x6d, 0x32, + 0x23, 0xc0, 0x57, 0x00, 0xa8, 0x9f, 0xd1, 0xb3, 0x15, 0x0d, 0x3c, 0x31, 0xae, 0xfc, 0xa3, 0x17, + 0x61, 0xac, 0x63, 0x80, 0x93, 0x9e, 0xf8, 0x53, 0x5e, 0x83, 0x32, 0xf6, 0x2c, 0x63, 0xb7, 0xad, + 0x05, 0x68, 0x4d, 0x0c, 0x41, 0xab, 0xc8, 0xd0, 0xfd, 0x01, 0xf9, 0xd7, 0xe1, 0x95, 0x18, 0x45, + 0x0d, 0x1b, 0x3b, 0xc8, 0x6c, 0xd5, 0x91, 0xe6, 0x39, 0x4c, 0x2a, 0x34, 0x26, 0x3b, 0x2d, 0xaf, + 0x92, 0x1b, 0x2c, 0x3a, 0x9c, 0x8e, 0x2c, 0xb3, 0xce, 0x09, 0x6e, 0x38, 0x54, 0x88, 0x1b, 0x8c, + 0x5a, 0x57, 0x1b, 0x9c, 0xea, 0x66, 0x83, 0xf2, 0x37, 0xa1, 0xe0, 0x9b, 0x07, 0x4d, 0xfb, 0x95, + 0x22, 0x0d, 0xe1, 0xc9, 0x99, 0xcb, 0x8f, 0xe4, 0x31, 0x93, 0x63, 0xd6, 0xeb, 0x9b, 0x1a, 0xfd, + 0x29, 0x3f, 0x86, 0x62, 0x88, 0x78, 0x0b, 0x57, 0x4a, 0x94, 0x7a, 0xad, 0x4b, 0x82, 0x48, 0x24, + 0xdb, 0xc2, 0x6a, 0x21, 0x48, 0xb7, 0x85, 0xe5, 0xf7, 0xa0, 0xbc, 0x47, 0xce, 0x30, 0x8e, 0xad, + 0xb1, 0x03, 0xa4, 0x85, 0x70, 0xa5, 0x4c, 0x45, 0x79, 0xa9, 0xd6, 0xe3, 0x56, 0xc1, 0xc2, 0x1c, + 0x45, 0xbc, 0x2b, 0xf0, 0xd4, 0xd2, 0x5e, 0x64, 0x44, 0x7e, 0x03, 0x8e, 0x5b, 0xc4, 0x7c, 0xa3, + 0x6a, 0x44, 0x36, 0x71, 0x54, 0xb3, 0x22, 0x2f, 0x4a, 0x4b, 0x59, 0xb5, 0x62, 0xe1, 0xf5, 0xb0, + 0x56, 0x6e, 0xb1, 0x79, 0xf9, 0x4b, 0x30, 0x1f, 0xb3, 0x64, 0xef, 0x80, 0xc6, 0xe7, 0x69, 0x16, + 0x40, 0xc2, 0xd6, 0xbc, 0x71, 0x40, 0xa2, 0xf5, 0x55, 0x98, 0xe3, 0x08, 0x7e, 0x12, 0xe7, 0x41, + 0x7d, 0x86, 0xc6, 0xba, 0x69, 0x3a, 0xdb, 0x71, 0x72, 0x12, 0xe2, 0xef, 0xa5, 0xb3, 0xd9, 0xd2, + 0xe4, 0xbd, 0x74, 0x76, 0xb2, 0x04, 0xf7, 0xd2, 0x59, 0x28, 0xe5, 0xee, 0xa5, 0xb3, 0xf9, 0xd2, + 0xd4, 0xbd, 0x74, 0xb6, 0x50, 0x2a, 0x2a, 0xff, 0x29, 0xc1, 0x3c, 0x09, 0xc2, 0xff, 0x4f, 0x02, + 0xea, 0x1f, 0x66, 0xa1, 0x12, 0x67, 0xf7, 0x8b, 0x88, 0xfa, 0x45, 0x44, 0x7d, 0xe6, 0x11, 0x35, + 0xdf, 0x35, 0xa2, 0x26, 0xc6, 0xa6, 0xc2, 0x33, 0x8b, 0x4d, 0xbf, 0x98, 0x01, 0xbb, 0x47, 0x44, + 0x2c, 0x1f, 0x26, 0x22, 0xca, 0xc3, 0x45, 0xc4, 0xa9, 0x52, 0x41, 0xf9, 0x9e, 0x04, 0xc7, 0x54, + 0x84, 0x91, 0x17, 0x09, 0xda, 0x2f, 0x20, 0x1e, 0x2a, 0x55, 0x38, 0x9e, 0xbc, 0x15, 0x16, 0xab, + 0x94, 0x1f, 0xa5, 0x60, 0x51, 0x45, 0x86, 0xe3, 0x9a, 0xc1, 0xe3, 0x31, 0xf7, 0xee, 0x21, 0x36, + 0xfc, 0x0e, 0xc8, 0xf1, 0xab, 0xe1, 0xf0, 0x3b, 0x2f, 0xc7, 0xee, 0x84, 0xf2, 0xab, 0x20, 0x0b, + 0x17, 0x34, 0xa3, 0xe1, 0xab, 0xe4, 0xcf, 0x88, 0xc8, 0x32, 0x0f, 0x13, 0xd4, 0x77, 0xfd, 0x88, + 0x35, 0x4e, 0x7e, 0xae, 0x9a, 0xf2, 0x09, 0x00, 0x51, 0x03, 0xe0, 0x81, 0x69, 0x52, 0x9d, 0xe4, + 0x23, 0xab, 0xa6, 0xfc, 0x3e, 0xe4, 0x9b, 0x4e, 0xbd, 0xee, 0x5f, 0xe1, 0x59, 0x4c, 0x7a, 0xfd, + 0xb0, 0x17, 0x0f, 0x76, 0x83, 0xcf, 0x11, 0x92, 0x42, 0x88, 0xfe, 0x15, 0x69, 0xe2, 0x70, 0x57, + 0x24, 0x72, 0x88, 0x3f, 0xd5, 0x43, 0x55, 0x3c, 0xf9, 0xc4, 0x72, 0x86, 0x74, 0xe8, 0x9c, 0xd1, + 0x33, 0x1f, 0x8c, 0xf5, 0xcc, 0x07, 0xc3, 0x29, 0x6d, 0x09, 0x4a, 0x5d, 0xf2, 0x4d, 0x01, 0x87, + 0xe9, 0xc6, 0xd2, 0x58, 0x26, 0x9e, 0xc6, 0x02, 0xf5, 0x8b, 0xf1, 0x70, 0xfd, 0xe2, 0x1a, 0x54, + 0x78, 0x7c, 0x0f, 0x54, 0x2f, 0xf8, 0x49, 0x6b, 0x82, 0x9e, 0xb4, 0xe6, 0xd8, 0x7c, 0xa7, 0x22, + 0xc1, 0xcf, 0x59, 0x4f, 0x60, 0xde, 0x73, 0x75, 0x1b, 0x5b, 0x64, 0xd9, 0xf0, 0x15, 0x95, 0x5d, + 0xe9, 0xbf, 0xda, 0x2f, 0xe0, 0x6e, 0x08, 0xf4, 0xa0, 0xf2, 0x68, 0x11, 0x66, 0xd6, 0x4b, 0x9a, + 0x92, 0xb7, 0xe1, 0x44, 0x42, 0xb1, 0x25, 0x90, 0xea, 0x26, 0x87, 0x48, 0x75, 0x0b, 0x31, 0xbf, + 0xea, 0x64, 0xbd, 0x53, 0x90, 0x0f, 0x25, 0x9c, 0x1c, 0x4d, 0x38, 0xb9, 0xcd, 0x40, 0xa6, 0xb9, + 0x03, 0x85, 0x8e, 0x3a, 0x69, 0x91, 0x27, 0x3f, 0x60, 0x91, 0x67, 0xca, 0xc7, 0xa3, 0x25, 0x9d, + 0x15, 0xc8, 0x0b, 0x4d, 0x53, 0x32, 0x53, 0x03, 0x92, 0xc9, 0x71, 0x2c, 0x4a, 0xc4, 0x81, 0x89, + 0x27, 0x2d, 0xc4, 0xb3, 0x5d, 0x6a, 0x29, 0x77, 0xe5, 0xed, 0xda, 0x40, 0xf5, 0xfd, 0x5a, 0x5f, + 0xef, 0xa9, 0xbd, 0xc5, 0xe8, 0xde, 0xb2, 0x3d, 0xb7, 0xad, 0x8a, 0x55, 0x3a, 0xae, 0x5b, 0x3c, + 0x64, 0x75, 0xe3, 0x75, 0xc8, 0xf2, 0x0a, 0x2b, 0x49, 0x73, 0x64, 0xcb, 0xa7, 0xc2, 0x6a, 0x13, + 0xe5, 0x71, 0x82, 0xff, 0x80, 0x41, 0xaa, 0x3e, 0xca, 0xc2, 0xfb, 0x90, 0x0f, 0x6e, 0x4c, 0x2e, + 0x41, 0x6a, 0x17, 0xb5, 0x79, 0x18, 0x26, 0x7f, 0xca, 0xd7, 0x21, 0xb3, 0xa7, 0xd7, 0x5b, 0x5d, + 0x4e, 0x88, 0xb4, 0x42, 0x1f, 0x74, 0x76, 0x42, 0xad, 0xad, 0x32, 0x94, 0xeb, 0x63, 0xd7, 0x24, + 0x96, 0xbe, 0x02, 0xc9, 0xe0, 0x86, 0xe1, 0x59, 0x7b, 0x96, 0xd7, 0xfe, 0x22, 0x19, 0x0c, 0x9b, + 0x0c, 0x82, 0x92, 0x7b, 0x8e, 0xc9, 0xe0, 0xaf, 0xd3, 0x22, 0x19, 0x24, 0xaa, 0x8a, 0x27, 0x83, + 0x87, 0x50, 0x8c, 0x88, 0x8b, 0xa7, 0x83, 0xd3, 0x61, 0x5e, 0x02, 0x71, 0x8a, 0x9d, 0xff, 0xda, + 0x54, 0x84, 0x6a, 0x21, 0x2c, 0xd2, 0x98, 0xfb, 0x8e, 0x1d, 0xc6, 0x7d, 0x03, 0xf1, 0x39, 0x15, + 0x8e, 0xcf, 0x08, 0xaa, 0xe2, 0x08, 0xcc, 0x87, 0xb4, 0x48, 0xd8, 0x49, 0x0f, 0xb8, 0xe0, 0x31, + 0x4e, 0xe7, 0x06, 0x23, 0xb3, 0x1e, 0x0a, 0x42, 0x0f, 0xa0, 0xbc, 0x83, 0x74, 0xd7, 0xdb, 0x44, + 0xba, 0xa7, 0x99, 0xc8, 0xd3, 0xad, 0x3a, 0xe6, 0x55, 0xeb, 0xfe, 0x95, 0xd9, 0x92, 0x8f, 0x7a, + 0x93, 0x61, 0xc6, 0x33, 0xee, 0xf8, 0xa1, 0x33, 0xee, 0x85, 0x80, 0xe3, 0xf8, 0x0e, 0x45, 0x6d, + 0x64, 0xb2, 0xe3, 0x0d, 0x0f, 0xc5, 0x44, 0xc7, 0x8a, 0xb2, 0x87, 0xb4, 0xa2, 0x9f, 0x48, 0xf0, + 0x12, 0x33, 0x96, 0x50, 0x54, 0xe4, 0x85, 0xe7, 0xa1, 0x7c, 0xde, 0x81, 0x12, 0x2f, 0x77, 0xa3, + 0xc8, 0x3b, 0xc8, 0xcd, 0xbe, 0x7e, 0x33, 0xc0, 0x16, 0xd4, 0xa2, 0xa0, 0xce, 0x07, 0x94, 0x1f, + 0x8f, 0xc1, 0xcb, 0xbd, 0x11, 0xb9, 0x13, 0xe0, 0xce, 0xe9, 0x42, 0xbc, 0xfe, 0x70, 0x2f, 0xb8, + 0xfb, 0xac, 0xf2, 0x06, 0xb9, 0x4a, 0x86, 0x3d, 0x0f, 0x41, 0x41, 0xe7, 0x8e, 0x49, 0x73, 0x36, + 0xae, 0x8c, 0xd1, 0xb8, 0xff, 0xc6, 0x61, 0x83, 0x08, 0x5f, 0x68, 0x4a, 0x0f, 0x4c, 0x61, 0x72, + 0x6f, 0x71, 0xc9, 0xf1, 0x9e, 0x5f, 0x00, 0xdb, 0xb1, 0x72, 0x07, 0x9d, 0x0d, 0xfa, 0xf4, 0xaa, + 0xa9, 0xfc, 0x85, 0x44, 0xc2, 0x7c, 0x4c, 0x72, 0xb7, 0x75, 0xab, 0x3e, 0x94, 0xca, 0x77, 0xa0, + 0xb0, 0x45, 0x71, 0x22, 0x0a, 0xbf, 0x71, 0x18, 0x85, 0x87, 0x56, 0x57, 0xa7, 0xb6, 0x82, 0x3f, + 0x95, 0x97, 0x48, 0xb0, 0xeb, 0x8a, 0xc2, 0xaf, 0x32, 0x3f, 0x91, 0x40, 0x89, 0x87, 0xc4, 0xbb, + 0xc2, 0x5d, 0x87, 0x60, 0xac, 0x19, 0x0c, 0x10, 0x61, 0xde, 0x56, 0x06, 0xe0, 0xad, 0xdf, 0x16, + 0x02, 0x31, 0x44, 0x30, 0xb8, 0x46, 0xfc, 0xb0, 0x07, 0x1e, 0xb7, 0xaa, 0x73, 0x50, 0x32, 0x74, + 0xdb, 0x40, 0x7e, 0x6a, 0x42, 0x6c, 0xff, 0x59, 0xb5, 0xc8, 0xc6, 0x55, 0x31, 0x1c, 0x74, 0xed, + 0x20, 0xcd, 0x17, 0xe4, 0xda, 0xbd, 0xb6, 0x10, 0x77, 0xed, 0x33, 0xbe, 0x67, 0x77, 0xc1, 0xe3, + 0x1a, 0x0f, 0x18, 0x72, 0x10, 0xf0, 0xff, 0xde, 0x90, 0xbb, 0xae, 0xde, 0xdd, 0x90, 0x93, 0x50, + 0x38, 0x5b, 0x7f, 0x49, 0x0d, 0x39, 0xce, 0x3f, 0xd5, 0xf0, 0x50, 0x8c, 0xfd, 0x1a, 0x14, 0xc2, + 0xf6, 0x32, 0x84, 0x15, 0xf7, 0x5b, 0x5f, 0x9d, 0x0a, 0x99, 0x9c, 0x72, 0x3a, 0xd9, 0xde, 0x7c, + 0x24, 0xce, 0xdc, 0xdf, 0x8e, 0x41, 0x75, 0xdd, 0xda, 0xb6, 0xf5, 0xfa, 0x28, 0x4f, 0xee, 0x5b, + 0x50, 0xc0, 0x94, 0x48, 0x84, 0xb1, 0x37, 0xfb, 0xbf, 0xb9, 0xf7, 0x5c, 0x5b, 0x9d, 0x62, 0x64, + 0xc5, 0x56, 0x2c, 0x38, 0x86, 0x0e, 0x3c, 0xe4, 0x92, 0x95, 0x12, 0x8e, 0xb4, 0xa9, 0x61, 0x8f, + 0xb4, 0x47, 0x05, 0xb5, 0xd8, 0x94, 0x5c, 0x83, 0x69, 0x63, 0xc7, 0xaa, 0x9b, 0x9d, 0x75, 0x1c, + 0xbb, 0xde, 0xa6, 0x27, 0x9e, 0xac, 0x5a, 0xa6, 0x53, 0x02, 0xe9, 0x1b, 0x76, 0xbd, 0xad, 0x9c, + 0x82, 0x93, 0x5d, 0x79, 0xe1, 0xb2, 0xfe, 0x07, 0x09, 0xce, 0x72, 0x18, 0xcb, 0xdb, 0x19, 0xb9, + 0xcf, 0xe1, 0xbb, 0x12, 0x1c, 0xe5, 0x52, 0xdf, 0xb7, 0xbc, 0x1d, 0x2d, 0xa9, 0xe9, 0xe1, 0xee, + 0xa0, 0x0a, 0xe8, 0xb7, 0x21, 0x75, 0x0e, 0x87, 0x01, 0x85, 0x9d, 0xdd, 0x80, 0xa5, 0xfe, 0x24, + 0x7a, 0xbe, 0x56, 0x2b, 0x7f, 0x25, 0xc1, 0x49, 0x15, 0x35, 0x9c, 0x3d, 0xc4, 0x28, 0x1d, 0xf2, + 0xd1, 0xe2, 0xf9, 0x5d, 0x73, 0xc2, 0xf7, 0x93, 0x54, 0xe4, 0x7e, 0xa2, 0x28, 0x24, 0xec, 0x75, + 0xdb, 0xbe, 0xd0, 0xfd, 0x18, 0x9c, 0xda, 0x40, 0x6e, 0xc3, 0xb2, 0x75, 0x0f, 0x8d, 0xa2, 0x75, + 0x07, 0xca, 0x9e, 0xa0, 0x13, 0x51, 0xf6, 0x72, 0x5f, 0x65, 0xf7, 0xdd, 0x81, 0x5a, 0xf2, 0x89, + 0xff, 0x02, 0xf8, 0xdc, 0xcb, 0xa0, 0xf4, 0xe2, 0x88, 0x8b, 0xfe, 0xbf, 0x25, 0xa8, 0xde, 0x44, + 0x24, 0x55, 0x8d, 0x22, 0xf7, 0xe7, 0x67, 0x5d, 0xe7, 0xa0, 0xe4, 0x53, 0xe6, 0x55, 0x7f, 0x7e, + 0x5c, 0xf4, 0x6b, 0xf2, 0xfc, 0x79, 0x80, 0x3e, 0x4a, 0xd4, 0x1d, 0x8c, 0x92, 0x25, 0x24, 0xb3, + 0xb9, 0x68, 0x58, 0xea, 0xca, 0x3b, 0x97, 0xcf, 0x9f, 0x49, 0x70, 0x82, 0x16, 0xa5, 0x47, 0x6c, + 0xba, 0x62, 0x27, 0xdf, 0x61, 0x9b, 0xae, 0x7a, 0xae, 0xac, 0xe6, 0x29, 0x51, 0x11, 0x6b, 0x5e, + 0x83, 0x6a, 0x37, 0xf0, 0xde, 0x11, 0xe6, 0x0f, 0x52, 0x70, 0x9a, 0x13, 0x61, 0x19, 0x70, 0x14, + 0x56, 0x1b, 0x5d, 0xb2, 0xf8, 0xed, 0x01, 0x78, 0x1d, 0x60, 0x0b, 0x91, 0x44, 0x2e, 0xbf, 0x1e, + 0xf0, 0x3f, 0xde, 0x6f, 0x15, 0x2f, 0xb6, 0x54, 0x04, 0xc8, 0xaa, 0x80, 0x10, 0x45, 0x97, 0x3e, + 0xee, 0x9b, 0x7e, 0xfe, 0xee, 0x9b, 0xe9, 0xe6, 0xbe, 0x4b, 0x70, 0xa6, 0x9f, 0x44, 0xb8, 0x89, + 0xfe, 0xfb, 0x18, 0x1c, 0x13, 0x45, 0x83, 0xe0, 0x95, 0xe3, 0x73, 0xe1, 0xbf, 0x57, 0x61, 0xce, + 0xc2, 0x5a, 0x42, 0x27, 0x18, 0xd5, 0x4d, 0x56, 0x9d, 0xb6, 0xf0, 0xed, 0x68, 0x8b, 0x97, 0x7c, + 0x0f, 0x72, 0x4c, 0x56, 0xac, 0x62, 0x90, 0x1e, 0xb6, 0x62, 0x00, 0x14, 0x9b, 0xfe, 0x2d, 0xdf, + 0x87, 0x3c, 0xef, 0x45, 0x64, 0xc4, 0x32, 0xc3, 0x12, 0xcb, 0x31, 0x74, 0xfa, 0x43, 0xa9, 0xc2, + 0xf1, 0x64, 0x51, 0x73, 0x5d, 0xfc, 0x9b, 0x04, 0x67, 0x1f, 0x21, 0xd7, 0xda, 0x6a, 0xc7, 0xb8, + 0xf2, 0xeb, 0x3a, 0x9f, 0x0b, 0xbd, 0xf8, 0xe5, 0x98, 0xd4, 0x21, 0xcb, 0x31, 0xe7, 0x61, 0xa9, + 0x3f, 0xa3, 0x5c, 0x2a, 0xff, 0x93, 0x22, 0x97, 0x24, 0x72, 0x65, 0x5c, 0x21, 0x8a, 0xf1, 0x77, + 0x71, 0x98, 0x0b, 0xde, 0xf3, 0x13, 0x49, 0x0d, 0x78, 0x8b, 0x69, 0x20, 0x92, 0xf8, 0x31, 0xa4, + 0xcc, 0xa6, 0xfc, 0x08, 0xb2, 0x6a, 0xca, 0xef, 0xc2, 0xb4, 0xb8, 0x0c, 0x9a, 0xa3, 0x04, 0x0d, + 0xd9, 0xa7, 0xd2, 0xd9, 0xcb, 0x9a, 0x7f, 0x8d, 0xa5, 0xef, 0x3e, 0xb4, 0x1a, 0x9a, 0x19, 0xa6, + 0x1a, 0x5a, 0xec, 0xa0, 0xb3, 0x72, 0xa8, 0xaf, 0xf0, 0xf1, 0x43, 0xbe, 0x0b, 0x5c, 0x83, 0x4a, + 0x4c, 0x3c, 0x22, 0x23, 0x4f, 0xf0, 0x07, 0xb6, 0xb0, 0x8c, 0x78, 0x62, 0x56, 0xce, 0x92, 0xfc, + 0xd2, 0x53, 0xfb, 0x22, 0xd9, 0xa6, 0xe0, 0x02, 0x33, 0xaa, 0x44, 0x48, 0x1a, 0xf4, 0x08, 0x9d, + 0xa1, 0x0c, 0x66, 0x03, 0x4a, 0xd1, 0x66, 0xe4, 0xe1, 0xcd, 0xa5, 0x18, 0x69, 0x3e, 0x96, 0x55, + 0x28, 0xb2, 0x10, 0x35, 0xc2, 0x61, 0xaf, 0x60, 0x84, 0xb8, 0xec, 0x66, 0x80, 0xe9, 0x6e, 0x06, + 0xd8, 0x4b, 0x23, 0x99, 0x5e, 0x1a, 0x19, 0xd9, 0x18, 0x94, 0x4b, 0x50, 0x1b, 0x54, 0x51, 0x5c, + 0xb7, 0x7f, 0x22, 0xc1, 0xe2, 0x4d, 0x84, 0x0d, 0xd7, 0xda, 0x1c, 0xe9, 0xa8, 0xf9, 0x4d, 0x98, + 0x18, 0xb6, 0xf0, 0xd1, 0x6f, 0x59, 0x55, 0x50, 0x54, 0x7e, 0x3f, 0x0d, 0xa7, 0x7a, 0x40, 0xf3, + 0x73, 0xd4, 0xb7, 0xa0, 0xd4, 0x79, 0xe4, 0x34, 0x1c, 0x7b, 0xcb, 0xda, 0xe6, 0x45, 0xda, 0xcb, + 0xc9, 0x7b, 0x49, 0x54, 0xff, 0x0a, 0x45, 0x54, 0x8b, 0x28, 0x3c, 0x20, 0x6f, 0xc3, 0x7c, 0xc2, + 0x5b, 0x2a, 0x6d, 0x9f, 0x67, 0x0c, 0x5f, 0x1c, 0x62, 0x11, 0xf6, 0x68, 0xbb, 0x9f, 0x34, 0x2c, + 0x7f, 0x0b, 0xe4, 0x26, 0xb2, 0x4d, 0xcb, 0xde, 0xd6, 0x78, 0xa1, 0xd6, 0x42, 0xb8, 0x92, 0xa2, + 0xa5, 0xdf, 0x0b, 0xdd, 0xd7, 0x58, 0x63, 0x38, 0xa2, 0x70, 0x42, 0x57, 0x28, 0x37, 0x43, 0x83, + 0x16, 0xc2, 0xf2, 0xb7, 0xa1, 0x24, 0xa8, 0x53, 0x33, 0x77, 0x69, 0x8f, 0x1a, 0xa1, 0x7d, 0xb5, + 0x2f, 0xed, 0xb0, 0x51, 0xd1, 0x15, 0x8a, 0xcd, 0xc0, 0x94, 0x8b, 0x6c, 0x19, 0xc1, 0xac, 0xa0, + 0x1f, 0x3e, 0x57, 0x64, 0xfa, 0x69, 0x82, 0x2f, 0x12, 0x7b, 0xdb, 0x9e, 0x6e, 0xc6, 0x27, 0x94, + 0xdf, 0x4c, 0x41, 0x45, 0xe5, 0xdf, 0x9f, 0x20, 0x1a, 0x49, 0xf1, 0xa3, 0x2b, 0x9f, 0x8b, 0x74, + 0xb5, 0x05, 0xb3, 0xe1, 0x8e, 0xaa, 0xb6, 0x66, 0x79, 0xa8, 0x21, 0x34, 0x78, 0x65, 0xa8, 0xae, + 0xaa, 0xf6, 0xaa, 0x87, 0x1a, 0xea, 0xf4, 0x5e, 0x6c, 0x0c, 0xcb, 0xd7, 0x60, 0x9c, 0xe6, 0x1f, + 0xcc, 0x33, 0x5b, 0xd7, 0x67, 0xa7, 0x9b, 0xba, 0xa7, 0x2f, 0xd7, 0x9d, 0x4d, 0x95, 0xc3, 0xcb, + 0xb7, 0xa1, 0x60, 0xa3, 0x7d, 0xda, 0x9c, 0xc4, 0x29, 0x64, 0x06, 0xa4, 0x90, 0xb7, 0xd1, 0xbe, + 0xda, 0x62, 0x99, 0x0b, 0x2b, 0xc7, 0xe0, 0x68, 0x82, 0x0a, 0x78, 0x5c, 0xf9, 0x7b, 0x7a, 0x41, + 0xe3, 0xb3, 0x8f, 0x83, 0x7d, 0x5b, 0x42, 0x4b, 0x5a, 0xac, 0x37, 0x8c, 0x39, 0xeb, 0xb5, 0x44, + 0x09, 0x05, 0xbe, 0x02, 0x0a, 0xaa, 0x22, 0x54, 0xb7, 0x88, 0xf4, 0x87, 0x9d, 0x86, 0x82, 0x8b, + 0x1a, 0x8e, 0x87, 0x34, 0xa3, 0xde, 0xc2, 0x1e, 0x72, 0xa9, 0x7e, 0x27, 0xd5, 0x29, 0x36, 0xba, + 0xc2, 0x06, 0x63, 0xd6, 0x92, 0x8a, 0x59, 0x8b, 0xb2, 0x48, 0xee, 0x70, 0xc9, 0xbc, 0x70, 0x76, + 0xff, 0x48, 0x82, 0xb9, 0xf5, 0xb6, 0x6d, 0xac, 0xef, 0xe8, 0xae, 0xc9, 0xdb, 0xca, 0x38, 0x9f, + 0xa7, 0xa1, 0x80, 0x9d, 0x96, 0x6b, 0x74, 0xb6, 0xc1, 0xec, 0x71, 0x8a, 0x8d, 0x8a, 0x6d, 0x1c, + 0x85, 0x2c, 0x26, 0xc8, 0xa2, 0x31, 0x26, 0xa3, 0x4e, 0xd0, 0xdf, 0xab, 0xa6, 0x7c, 0x03, 0x72, + 0xac, 0xbf, 0x8d, 0x3d, 0x60, 0xa6, 0x06, 0x7c, 0xc0, 0x04, 0x86, 0x44, 0x86, 0x95, 0xa3, 0x30, + 0x1f, 0xdb, 0x1e, 0xdf, 0xfa, 0x67, 0x19, 0x98, 0x26, 0x73, 0x22, 0x72, 0x0c, 0xe1, 0x45, 0x27, + 0x21, 0xe7, 0xab, 0x90, 0x6f, 0x7b, 0x52, 0x05, 0x31, 0xb4, 0x6a, 0x06, 0xae, 0xb6, 0xa9, 0xe0, + 0xa7, 0x1e, 0x15, 0x98, 0x10, 0x09, 0x91, 0x65, 0x51, 0xf1, 0xb3, 0xcb, 0xe3, 0x7c, 0xa6, 0xcb, + 0xe3, 0x7c, 0xbc, 0xa7, 0x64, 0xfc, 0x70, 0x3d, 0x25, 0x49, 0xdd, 0x43, 0x13, 0x89, 0xdd, 0x43, + 0xd1, 0xe7, 0xeb, 0xec, 0x61, 0x9e, 0xaf, 0xd7, 0x78, 0xab, 0x6b, 0xe7, 0x85, 0x88, 0xd2, 0x9a, + 0x1c, 0x90, 0x56, 0x99, 0x20, 0xfb, 0x2f, 0x3b, 0x94, 0xe2, 0x75, 0x98, 0x10, 0xaf, 0xd0, 0x30, + 0xe0, 0x2b, 0xb4, 0x40, 0x08, 0x3e, 0xa6, 0xe7, 0xc2, 0x8f, 0xe9, 0x2b, 0x90, 0x67, 0x8d, 0x90, + 0xfc, 0x73, 0xa6, 0xfc, 0x80, 0x9f, 0x33, 0xe5, 0x68, 0x7f, 0x24, 0xff, 0x92, 0xe9, 0x12, 0xd0, + 0x2f, 0x91, 0x68, 0x3a, 0x40, 0xae, 0x66, 0x99, 0xc8, 0xf6, 0x2c, 0xaf, 0x4d, 0xfb, 0x76, 0x26, + 0x55, 0x99, 0xcc, 0x3d, 0xa6, 0x53, 0xab, 0x7c, 0x46, 0x7e, 0x0c, 0xc5, 0x48, 0x08, 0xe5, 0x2d, + 0xa9, 0xb5, 0xe1, 0x82, 0xa7, 0x5a, 0x08, 0x07, 0x4e, 0x65, 0x0e, 0x66, 0xc2, 0x96, 0xce, 0x5d, + 0xe0, 0x7b, 0x12, 0x1c, 0x13, 0xe7, 0x8b, 0x17, 0xdc, 0x7d, 0xae, 0xfc, 0x97, 0x04, 0xc7, 0x93, + 0xf7, 0xc2, 0x8f, 0x39, 0x3b, 0x30, 0x6d, 0xe8, 0xc6, 0x0e, 0x0a, 0x7f, 0x00, 0x39, 0x72, 0xf0, + 0x2c, 0x53, 0xa2, 0xc1, 0x21, 0xd9, 0x86, 0x39, 0x53, 0xf7, 0xf4, 0x4d, 0x1d, 0x47, 0x17, 0x1b, + 0x1b, 0x71, 0xb1, 0x19, 0x41, 0x37, 0x38, 0xaa, 0xfc, 0xa3, 0x04, 0x0b, 0x82, 0x75, 0xae, 0xb2, + 0xbb, 0x0e, 0x0e, 0xbe, 0xba, 0xee, 0x38, 0xd8, 0xd3, 0x74, 0xd3, 0x74, 0x11, 0xc6, 0x42, 0x0b, + 0x64, 0xec, 0x06, 0x1b, 0xea, 0x15, 0x44, 0xfb, 0x87, 0xf9, 0x2e, 0x87, 0x82, 0xf4, 0xe8, 0x87, + 0x02, 0xe5, 0x5f, 0x02, 0x06, 0x16, 0xe2, 0x8c, 0xeb, 0xf4, 0x25, 0x98, 0xa2, 0xfb, 0xc4, 0x9a, + 0xdd, 0x6a, 0x6c, 0xf2, 0x14, 0x91, 0x51, 0xf3, 0x6c, 0xf0, 0x21, 0x1d, 0x93, 0x8f, 0xc1, 0xa4, + 0x60, 0x8e, 0xb5, 0x02, 0x64, 0xd4, 0x2c, 0xe7, 0x0e, 0xcb, 0xef, 0x41, 0xb1, 0xc3, 0x1e, 0x55, + 0x65, 0xcf, 0xaf, 0x3a, 0x7d, 0x58, 0xc2, 0x82, 0xdf, 0x0d, 0xb2, 0x42, 0xf0, 0xe8, 0xa1, 0xab, + 0x60, 0x87, 0xc6, 0x68, 0x8c, 0xe0, 0x62, 0x67, 0xad, 0x4e, 0xe2, 0xe7, 0xbd, 0x74, 0x36, 0x5d, + 0xca, 0x28, 0x35, 0x28, 0xaf, 0xd4, 0x1d, 0x8c, 0x68, 0x82, 0x11, 0x0a, 0x0b, 0x6a, 0x43, 0x0a, + 0x69, 0x43, 0x99, 0x01, 0x39, 0x08, 0xcf, 0xfd, 0xf0, 0x55, 0x28, 0xde, 0x41, 0xde, 0xa0, 0x34, + 0xde, 0x87, 0x52, 0x07, 0x9a, 0x0b, 0xf2, 0x3e, 0x00, 0x07, 0x27, 0x07, 0x73, 0xe6, 0x13, 0x17, + 0x06, 0x31, 0x53, 0x4a, 0x86, 0xb2, 0xce, 0x84, 0x4c, 0xfe, 0x54, 0xfe, 0x49, 0x82, 0x32, 0x7b, + 0x25, 0x09, 0x16, 0xee, 0xba, 0x6f, 0x49, 0xbe, 0x0d, 0x59, 0x72, 0x46, 0xd8, 0x26, 0x21, 0x6b, + 0x8c, 0xf6, 0xa2, 0x9f, 0xef, 0xdd, 0xe9, 0xce, 0xde, 0x37, 0x19, 0x86, 0xea, 0xe3, 0x06, 0xbb, + 0xce, 0x52, 0xa1, 0xae, 0xb3, 0x55, 0x28, 0xee, 0x59, 0xd8, 0xda, 0xb4, 0xea, 0xb4, 0x2b, 0x64, + 0x98, 0x7e, 0xa6, 0x42, 0x07, 0x91, 0x1e, 0x09, 0x66, 0x40, 0x0e, 0xf2, 0xc6, 0x55, 0xf0, 0xa1, + 0x04, 0x27, 0xee, 0x20, 0x4f, 0xed, 0x7c, 0xdb, 0xcd, 0x7b, 0x09, 0xfd, 0xf3, 0xcc, 0x7d, 0x18, + 0xa7, 0x4d, 0x9e, 0xc4, 0x01, 0x53, 0x5d, 0x0d, 0x2c, 0xf0, 0x71, 0x38, 0xab, 0x22, 0xfb, 0x3f, + 0x69, 0x3b, 0xa8, 0xca, 0x69, 0x10, 0xb7, 0xe4, 0xc7, 0x22, 0xda, 0xad, 0xc4, 0xcf, 0x10, 0x39, + 0x3e, 0x46, 0x2c, 0x53, 0xf9, 0xe1, 0x18, 0x54, 0xbb, 0x6d, 0x89, 0xab, 0xfd, 0x3b, 0x50, 0x60, + 0x2a, 0xf1, 0x5b, 0x24, 0xd9, 0xde, 0xde, 0x19, 0xb0, 0x3b, 0xa7, 0x37, 0x79, 0x66, 0x1c, 0x62, + 0x94, 0x35, 0x76, 0x32, 0x7f, 0x15, 0x63, 0x0b, 0x6d, 0x90, 0xe3, 0x40, 0xc1, 0x26, 0xcb, 0x0c, + 0x6b, 0xb2, 0x7c, 0x10, 0x6e, 0xb2, 0x7c, 0x6d, 0x48, 0xd9, 0xf9, 0x3b, 0xeb, 0xf4, 0x5d, 0x2a, + 0x1f, 0xc0, 0xe2, 0x1d, 0xe4, 0xdd, 0xbc, 0xff, 0x56, 0x0f, 0x9d, 0x3d, 0xe2, 0x1f, 0xcb, 0x10, + 0xaf, 0x10, 0xb2, 0x19, 0x76, 0x6d, 0xff, 0x42, 0x46, 0xbf, 0x9f, 0x21, 0x7f, 0x61, 0xe5, 0xb7, + 0x24, 0x38, 0xd5, 0x63, 0x71, 0xae, 0x9d, 0xf7, 0xa1, 0x1c, 0x20, 0xcb, 0x7b, 0x99, 0xa4, 0xe8, + 0xa5, 0x73, 0xe0, 0x4d, 0xa8, 0x25, 0x37, 0x3c, 0x80, 0x95, 0xef, 0x4b, 0x30, 0x43, 0x1b, 0x52, + 0x45, 0x34, 0x1e, 0x22, 0x73, 0x7f, 0x23, 0x5a, 0xb9, 0xf8, 0x72, 0xdf, 0xca, 0x45, 0xd2, 0x52, + 0x9d, 0x6a, 0xc5, 0x2e, 0xcc, 0x46, 0x00, 0xb8, 0x1c, 0x54, 0xc8, 0x46, 0xba, 0xc7, 0xbe, 0x32, + 0xec, 0x52, 0xbc, 0x85, 0xcb, 0xa7, 0xa3, 0xfc, 0x9e, 0x04, 0x33, 0x2a, 0xd2, 0x9b, 0xcd, 0x3a, + 0xab, 0x30, 0xe2, 0x21, 0x38, 0x5f, 0x8f, 0x72, 0x9e, 0xdc, 0x81, 0x1e, 0xfc, 0x3f, 0x08, 0x4c, + 0x1d, 0xf1, 0xe5, 0x3a, 0xdc, 0xcf, 0xc3, 0x6c, 0x04, 0x80, 0xef, 0xf4, 0xcf, 0xc7, 0x60, 0x96, + 0xd9, 0x4a, 0xd4, 0x3a, 0x6f, 0x41, 0xda, 0xff, 0xcc, 0xa0, 0x10, 0x2c, 0x11, 0x24, 0x45, 0xcc, + 0x9b, 0x48, 0x37, 0xef, 0x23, 0xcf, 0x43, 0x2e, 0xed, 0x6a, 0xa3, 0x1d, 0x90, 0x14, 0xbd, 0x57, + 0xf2, 0x8f, 0xdf, 0xc1, 0x52, 0x49, 0x77, 0xb0, 0xd7, 0xa0, 0x62, 0xd9, 0x04, 0xc2, 0xda, 0x43, + 0x1a, 0xb2, 0xfd, 0x70, 0xd2, 0x29, 0xf7, 0xcd, 0xfa, 0xf3, 0xb7, 0x6c, 0xe1, 0xec, 0xab, 0xa6, + 0x7c, 0x1e, 0xca, 0x0d, 0xfd, 0xc0, 0x6a, 0xb4, 0x1a, 0x5a, 0x93, 0xc0, 0x63, 0xeb, 0x03, 0xf6, + 0x4f, 0x0c, 0x32, 0x6a, 0x91, 0x4f, 0xac, 0xe9, 0xdb, 0x68, 0xdd, 0xfa, 0x00, 0xc9, 0x67, 0xa0, + 0x48, 0xbf, 0x3f, 0xa0, 0x80, 0xac, 0x5d, 0x7e, 0x9c, 0xb6, 0xcb, 0xd3, 0xcf, 0x12, 0x08, 0x18, + 0xfb, 0x3e, 0xf0, 0xe3, 0x31, 0xfa, 0x79, 0x79, 0x48, 0x5e, 0xdc, 0x90, 0x9e, 0x91, 0xc0, 0x12, + 0xfd, 0x72, 0xec, 0x19, 0xfa, 0x65, 0x12, 0xaf, 0xa9, 0x04, 0x5e, 0xe5, 0x06, 0xcc, 0xc5, 0x76, + 0xc2, 0x52, 0x78, 0x7a, 0xb4, 0x58, 0x35, 0x13, 0xdd, 0x12, 0xcd, 0xeb, 0xff, 0x2c, 0xc1, 0xfc, + 0x5a, 0xcb, 0xdd, 0x46, 0xbf, 0x8c, 0xc6, 0xa8, 0x2c, 0x40, 0x25, 0xce, 0x9c, 0x68, 0x77, 0x1b, + 0x83, 0xf9, 0x07, 0xe8, 0x97, 0x94, 0xf3, 0xe7, 0xe2, 0x86, 0xcb, 0x50, 0x89, 0x0b, 0x8c, 0xfb, + 0x61, 0x02, 0x0d, 0x29, 0x89, 0xc6, 0x0f, 0xe9, 0xd7, 0x7c, 0x5b, 0x2e, 0xc2, 0x3b, 0xc1, 0x2a, + 0xe6, 0x30, 0xb1, 0xfa, 0xdd, 0x68, 0xac, 0xfe, 0xfa, 0x80, 0xb1, 0xba, 0xeb, 0xaa, 0x9d, 0x90, + 0x4d, 0x3f, 0xf0, 0x4b, 0x82, 0xe3, 0x46, 0xf3, 0x03, 0x09, 0xce, 0xdf, 0x41, 0x36, 0x72, 0x75, + 0x0f, 0xdd, 0xd7, 0xb1, 0xe8, 0x05, 0x8e, 0xf8, 0x1b, 0x7e, 0x11, 0xb7, 0xe5, 0x0b, 0xf0, 0xca, + 0x40, 0x3b, 0xe3, 0x9c, 0xdc, 0x86, 0x63, 0xe1, 0xa3, 0x5e, 0xb8, 0x54, 0x77, 0x16, 0x8a, 0xe1, + 0x8a, 0x21, 0x3b, 0xa6, 0x4c, 0xaa, 0x85, 0x50, 0xc9, 0x10, 0x2b, 0x2d, 0x38, 0x9e, 0x4c, 0x87, + 0x1b, 0xc6, 0xdb, 0x30, 0xce, 0xae, 0x6e, 0xfc, 0x98, 0xf3, 0xfa, 0x80, 0xe7, 0x50, 0x7e, 0x99, + 0x89, 0x92, 0xe5, 0xc4, 0x94, 0x9f, 0x8e, 0xc3, 0x5c, 0x32, 0x48, 0xaf, 0x4b, 0xc9, 0x97, 0x61, + 0xbe, 0xa1, 0x1f, 0x68, 0xd1, 0x00, 0xdb, 0xf9, 0x02, 0x6f, 0xa6, 0xa1, 0x1f, 0x44, 0x83, 0xa7, + 0x29, 0xdf, 0x87, 0x12, 0xa3, 0x58, 0x77, 0x0c, 0xbd, 0x3e, 0x68, 0xe9, 0x71, 0x9c, 0xdc, 0x35, + 0x2a, 0x92, 0xca, 0xce, 0xe3, 0xf7, 0x09, 0x2a, 0x2d, 0x50, 0x7d, 0x10, 0x17, 0x2d, 0x0b, 0xed, + 0x6f, 0x8d, 0x24, 0x9a, 0x9a, 0x1a, 0x52, 0x0c, 0x3b, 0x9b, 0x47, 0xb4, 0x25, 0xff, 0xb6, 0x04, + 0xd3, 0x3b, 0xba, 0x6d, 0x3a, 0x7b, 0xfc, 0x96, 0x41, 0xcd, 0x90, 0xdc, 0x64, 0x87, 0xf9, 0xf2, + 0xab, 0xcb, 0x06, 0xee, 0x72, 0xc2, 0xfe, 0x25, 0x9a, 0x6f, 0x42, 0xde, 0x89, 0x4d, 0xc8, 0x4d, + 0x78, 0x39, 0x51, 0x13, 0xd1, 0x2b, 0xdd, 0xa0, 0x55, 0xcc, 0xc5, 0xb8, 0xe2, 0x1e, 0x85, 0x2e, + 0x79, 0x0b, 0xdf, 0x97, 0x60, 0x3a, 0x41, 0x44, 0x09, 0x9f, 0x7f, 0xbd, 0x17, 0xbe, 0x99, 0xdc, + 0x19, 0x49, 0x2a, 0x6b, 0xc8, 0xe5, 0xeb, 0x05, 0x6e, 0x2a, 0x0b, 0xdf, 0x95, 0x60, 0xbe, 0x8b, + 0xb8, 0x12, 0x36, 0xa4, 0x86, 0x37, 0xf4, 0xb5, 0x01, 0x37, 0x14, 0x5b, 0x80, 0x9e, 0x03, 0x02, + 0xf7, 0xa5, 0x77, 0x60, 0x36, 0x11, 0x46, 0x7e, 0x13, 0x8e, 0xfb, 0x56, 0x92, 0xe4, 0x2c, 0x12, + 0x75, 0x96, 0xa3, 0x02, 0x26, 0xe6, 0x31, 0xca, 0x9f, 0x4a, 0xb0, 0xd8, 0x4f, 0x1e, 0xb2, 0x02, + 0x53, 0xba, 0xb1, 0x8b, 0xcc, 0x08, 0xd9, 0x1c, 0x1d, 0xe4, 0xae, 0xf7, 0x1e, 0x2c, 0x04, 0x60, + 0xa2, 0xd6, 0x31, 0xe8, 0x17, 0x53, 0xf3, 0x3e, 0xc9, 0xb0, 0x51, 0x28, 0xbf, 0x23, 0xc1, 0x82, + 0x8a, 0x36, 0x5b, 0x56, 0xdd, 0x7c, 0xd1, 0xd5, 0xce, 0x13, 0x24, 0x31, 0x26, 0xec, 0x84, 0xc7, + 0xeb, 0x1f, 0x8f, 0xc1, 0xe9, 0x70, 0x2b, 0x60, 0x87, 0x15, 0xf6, 0x94, 0xfd, 0x22, 0xfe, 0x41, + 0xc8, 0x1a, 0x4c, 0x07, 0x5f, 0xae, 0xf8, 0xbf, 0x73, 0x18, 0xf8, 0x5d, 0xa6, 0x1c, 0x78, 0xa6, + 0x62, 0xff, 0xbb, 0x21, 0x44, 0x91, 0x36, 0x44, 0x0e, 0x57, 0xda, 0xf1, 0x29, 0xd2, 0x9a, 0x1a, + 0xd5, 0xf1, 0x12, 0x9c, 0xe9, 0x27, 0x38, 0x2e, 0xe3, 0x3f, 0x96, 0xa0, 0xfa, 0x76, 0xd3, 0x1c, + 0xb1, 0xc5, 0xf7, 0x57, 0xa3, 0xe7, 0x93, 0xfe, 0x6d, 0xf4, 0xbd, 0x17, 0xed, 0x1c, 0x4f, 0xbe, + 0x03, 0x27, 0xbb, 0x82, 0xfa, 0x4f, 0xff, 0xd1, 0x9b, 0xf5, 0xd7, 0x0f, 0xbf, 0x7c, 0xec, 0x8e, + 0xfd, 0x37, 0x12, 0x2c, 0xad, 0x7b, 0x2e, 0xd2, 0x1b, 0x9d, 0x8b, 0x78, 0xd7, 0x52, 0x4b, 0x8f, + 0x44, 0xdc, 0x84, 0x39, 0xdc, 0xb6, 0x8d, 0x50, 0x70, 0xe9, 0x5f, 0x4f, 0x8f, 0xdc, 0x72, 0xd6, + 0xdb, 0xb6, 0x11, 0x89, 0x2f, 0xe8, 0xee, 0x11, 0x75, 0x06, 0x27, 0x8c, 0x2f, 0xe7, 0x01, 0x74, + 0xcf, 0x73, 0xad, 0xcd, 0x96, 0x87, 0xb0, 0xf2, 0x53, 0x09, 0xce, 0x0d, 0xc0, 0x07, 0x97, 0x69, + 0x0f, 0x46, 0xea, 0x10, 0xbc, 0x57, 0x75, 0x8a, 0x6e, 0xa3, 0x15, 0xb5, 0xee, 0x1e, 0x51, 0xa7, + 0xdd, 0xf8, 0x70, 0x98, 0x89, 0xe5, 0xe6, 0x47, 0x9f, 0x54, 0x8f, 0x7c, 0xfc, 0x49, 0xf5, 0xc8, + 0xcf, 0x3f, 0xa9, 0x4a, 0xbf, 0xf1, 0xb4, 0x2a, 0xfd, 0xe8, 0x69, 0x55, 0xfa, 0xbb, 0xa7, 0x55, + 0xe9, 0xa3, 0xa7, 0x55, 0xe9, 0x5f, 0x9f, 0x56, 0xa5, 0xcf, 0x9e, 0x56, 0x8f, 0xfc, 0xfc, 0x69, + 0x55, 0xfa, 0xf0, 0xd3, 0xea, 0x91, 0x8f, 0x3e, 0xad, 0x1e, 0xf9, 0xf8, 0xd3, 0xea, 0x91, 0x77, + 0xaf, 0x6f, 0x3b, 0x9d, 0x5d, 0x59, 0x4e, 0xcf, 0xff, 0x00, 0xfb, 0x2b, 0xe1, 0x91, 0xcd, 0x71, + 0xea, 0x77, 0x57, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x16, 0xae, 0x83, 0x40, 0x56, 0x00, + 0x00, } func (this *StartWorkflowExecutionRequest) Equal(that interface{}) bool { @@ -8830,6 +9006,120 @@ func (this *UpdateWorkflowExecutionResponse) Equal(that interface{}) bool { } return true } +func (this *StreamWorkflowReplicationMessagesRequest) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StreamWorkflowReplicationMessagesRequest) + if !ok { + that2, ok := that.(StreamWorkflowReplicationMessagesRequest) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.ShardId != that1.ShardId { + return false + } + if that1.Attributes == nil { + if this.Attributes != nil { + return false + } + } else if this.Attributes == nil { + return false + } else if !this.Attributes.Equal(that1.Attributes) { + return false + } + return true +} +func (this *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StreamWorkflowReplicationMessagesRequest_SyncReplicationState) + if !ok { + that2, ok := that.(StreamWorkflowReplicationMessagesRequest_SyncReplicationState) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.SyncReplicationState.Equal(that1.SyncReplicationState) { + return false + } + return true +} +func (this *StreamWorkflowReplicationMessagesResponse) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StreamWorkflowReplicationMessagesResponse) + if !ok { + that2, ok := that.(StreamWorkflowReplicationMessagesResponse) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.ShardId != that1.ShardId { + return false + } + if that1.Attributes == nil { + if this.Attributes != nil { + return false + } + } else if this.Attributes == nil { + return false + } else if !this.Attributes.Equal(that1.Attributes) { + return false + } + return true +} +func (this *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*StreamWorkflowReplicationMessagesResponse_ReplicationMessages) + if !ok { + that2, ok := that.(StreamWorkflowReplicationMessagesResponse_ReplicationMessages) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.ReplicationMessages.Equal(that1.ReplicationMessages) { + return false + } + return true +} func (this *StartWorkflowExecutionRequest) GoString() string { if this == nil { return "nil" @@ -10188,6 +10478,48 @@ func (this *UpdateWorkflowExecutionResponse) GoString() string { s = append(s, "}") return strings.Join(s, "") } +func (this *StreamWorkflowReplicationMessagesRequest) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&historyservice.StreamWorkflowReplicationMessagesRequest{") + s = append(s, "ShardId: "+fmt.Sprintf("%#v", this.ShardId)+",\n") + if this.Attributes != nil { + s = append(s, "Attributes: "+fmt.Sprintf("%#v", this.Attributes)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&historyservice.StreamWorkflowReplicationMessagesRequest_SyncReplicationState{` + + `SyncReplicationState:` + fmt.Sprintf("%#v", this.SyncReplicationState) + `}`}, ", ") + return s +} +func (this *StreamWorkflowReplicationMessagesResponse) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&historyservice.StreamWorkflowReplicationMessagesResponse{") + s = append(s, "ShardId: "+fmt.Sprintf("%#v", this.ShardId)+",\n") + if this.Attributes != nil { + s = append(s, "Attributes: "+fmt.Sprintf("%#v", this.Attributes)+",\n") + } + s = append(s, "}") + return strings.Join(s, "") +} +func (this *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) GoString() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&historyservice.StreamWorkflowReplicationMessagesResponse_ReplicationMessages{` + + `ReplicationMessages:` + fmt.Sprintf("%#v", this.ReplicationMessages) + `}`}, ", ") + return s +} func valueToGoStringRequestResponse(v interface{}, typ string) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -14759,6 +15091,122 @@ func (m *UpdateWorkflowExecutionResponse) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } +func (m *StreamWorkflowReplicationMessagesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StreamWorkflowReplicationMessagesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StreamWorkflowReplicationMessagesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Attributes != nil { + { + size := m.Attributes.Size() + i -= size + if _, err := m.Attributes.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + if m.ShardId != 0 { + i = encodeVarintRequestResponse(dAtA, i, uint64(m.ShardId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.SyncReplicationState != nil { + { + size, err := m.SyncReplicationState.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRequestResponse(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} +func (m *StreamWorkflowReplicationMessagesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StreamWorkflowReplicationMessagesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StreamWorkflowReplicationMessagesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Attributes != nil { + { + size := m.Attributes.Size() + i -= size + if _, err := m.Attributes.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + if m.ShardId != 0 { + i = encodeVarintRequestResponse(dAtA, i, uint64(m.ShardId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.ReplicationMessages != nil { + { + size, err := m.ReplicationMessages.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRequestResponse(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} func encodeVarintRequestResponse(dAtA []byte, offset int, v uint64) int { offset -= sovRequestResponse(v) base := offset @@ -16608,40 +17056,95 @@ func (m *DeleteWorkflowVisibilityRecordRequest) Size() (n int) { return n } -func (m *DeleteWorkflowVisibilityRecordResponse) Size() (n int) { +func (m *DeleteWorkflowVisibilityRecordResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *UpdateWorkflowExecutionRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.NamespaceId) + if l > 0 { + n += 1 + l + sovRequestResponse(uint64(l)) + } + if m.Request != nil { + l = m.Request.Size() + n += 1 + l + sovRequestResponse(uint64(l)) + } + return n +} + +func (m *UpdateWorkflowExecutionResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Response != nil { + l = m.Response.Size() + n += 1 + l + sovRequestResponse(uint64(l)) + } + return n +} + +func (m *StreamWorkflowReplicationMessagesRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l + if m.ShardId != 0 { + n += 1 + sovRequestResponse(uint64(m.ShardId)) + } + if m.Attributes != nil { + n += m.Attributes.Size() + } return n } -func (m *UpdateWorkflowExecutionRequest) Size() (n int) { +func (m *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.NamespaceId) - if l > 0 { + if m.SyncReplicationState != nil { + l = m.SyncReplicationState.Size() n += 1 + l + sovRequestResponse(uint64(l)) } - if m.Request != nil { - l = m.Request.Size() - n += 1 + l + sovRequestResponse(uint64(l)) + return n +} +func (m *StreamWorkflowReplicationMessagesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ShardId != 0 { + n += 1 + sovRequestResponse(uint64(m.ShardId)) + } + if m.Attributes != nil { + n += m.Attributes.Size() } return n } -func (m *UpdateWorkflowExecutionResponse) Size() (n int) { +func (m *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Response != nil { - l = m.Response.Size() + if m.ReplicationMessages != nil { + l = m.ReplicationMessages.Size() n += 1 + l + sovRequestResponse(uint64(l)) } return n @@ -17860,6 +18363,48 @@ func (this *UpdateWorkflowExecutionResponse) String() string { }, "") return s } +func (this *StreamWorkflowReplicationMessagesRequest) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StreamWorkflowReplicationMessagesRequest{`, + `ShardId:` + fmt.Sprintf("%v", this.ShardId) + `,`, + `Attributes:` + fmt.Sprintf("%v", this.Attributes) + `,`, + `}`, + }, "") + return s +} +func (this *StreamWorkflowReplicationMessagesRequest_SyncReplicationState) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StreamWorkflowReplicationMessagesRequest_SyncReplicationState{`, + `SyncReplicationState:` + strings.Replace(fmt.Sprintf("%v", this.SyncReplicationState), "SyncReplicationState", "v115.SyncReplicationState", 1) + `,`, + `}`, + }, "") + return s +} +func (this *StreamWorkflowReplicationMessagesResponse) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StreamWorkflowReplicationMessagesResponse{`, + `ShardId:` + fmt.Sprintf("%v", this.ShardId) + `,`, + `Attributes:` + fmt.Sprintf("%v", this.Attributes) + `,`, + `}`, + }, "") + return s +} +func (this *StreamWorkflowReplicationMessagesResponse_ReplicationMessages) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StreamWorkflowReplicationMessagesResponse_ReplicationMessages{`, + `ReplicationMessages:` + strings.Replace(fmt.Sprintf("%v", this.ReplicationMessages), "ReplicationMessages", "v115.ReplicationMessages", 1) + `,`, + `}`, + }, "") + return s +} func valueToStringRequestResponse(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -31120,6 +31665,220 @@ func (m *UpdateWorkflowExecutionResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *StreamWorkflowReplicationMessagesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StreamWorkflowReplicationMessagesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StreamWorkflowReplicationMessagesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ShardId", wireType) + } + m.ShardId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ShardId |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SyncReplicationState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRequestResponse + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRequestResponse + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &v115.SyncReplicationState{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Attributes = &StreamWorkflowReplicationMessagesRequest_SyncReplicationState{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRequestResponse(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRequestResponse + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthRequestResponse + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StreamWorkflowReplicationMessagesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StreamWorkflowReplicationMessagesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StreamWorkflowReplicationMessagesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ShardId", wireType) + } + m.ShardId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ShardId |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReplicationMessages", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRequestResponse + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRequestResponse + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRequestResponse + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &v115.ReplicationMessages{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Attributes = &StreamWorkflowReplicationMessagesResponse_ReplicationMessages{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRequestResponse(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRequestResponse + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthRequestResponse + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipRequestResponse(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/api/historyservice/v1/service.pb.go b/api/historyservice/v1/service.pb.go index e9e36521ff0..ae877503342 100644 --- a/api/historyservice/v1/service.pb.go +++ b/api/historyservice/v1/service.pb.go @@ -54,86 +54,88 @@ func init() { } var fileDescriptor_655983da427ae822 = []byte{ - // 1255 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x99, 0xcd, 0x6b, 0x24, 0x45, - 0x18, 0xc6, 0xa7, 0x2e, 0x22, 0x85, 0xae, 0xda, 0x8a, 0x1f, 0x51, 0x1b, 0x51, 0xf4, 0x38, 0x61, - 0x77, 0x41, 0xf7, 0x23, 0x71, 0x4d, 0x26, 0xc9, 0x24, 0xbb, 0x89, 0x9a, 0x99, 0x6c, 0x04, 0x2f, - 0x52, 0x33, 0xf3, 0x26, 0x53, 0xa4, 0x33, 0xdd, 0x56, 0xd5, 0x8c, 0xce, 0x41, 0x10, 0x3c, 0x2d, - 0x08, 0x8a, 0x20, 0x78, 0x12, 0x3c, 0x29, 0x82, 0x20, 0x08, 0x82, 0x20, 0x78, 0x12, 0x3c, 0x49, - 0x6e, 0xee, 0xd1, 0x4c, 0x2e, 0x1e, 0xf7, 0x4f, 0x90, 0x99, 0xee, 0xaa, 0x4c, 0x75, 0x57, 0x4f, - 0xaa, 0xba, 0xe7, 0xb6, 0x3b, 0x53, 0xcf, 0xaf, 0x9f, 0xaa, 0x7a, 0xe7, 0xad, 0x27, 0xd5, 0xf8, - 0xaa, 0x80, 0xe3, 0x28, 0x64, 0x24, 0x58, 0xe4, 0xc0, 0x06, 0xc0, 0x16, 0x49, 0x44, 0x17, 0xbb, - 0x94, 0x8b, 0x90, 0x0d, 0xc7, 0x9f, 0xd0, 0x36, 0x2c, 0x0e, 0x2e, 0x2f, 0x26, 0xff, 0xac, 0x46, - 0x2c, 0x14, 0xa1, 0xf7, 0xaa, 0x14, 0x55, 0x63, 0x51, 0x95, 0x44, 0xb4, 0xaa, 0x8b, 0xaa, 0x83, - 0xcb, 0x0b, 0x4b, 0x76, 0x6c, 0x06, 0x1f, 0xf6, 0x81, 0x8b, 0x0f, 0x18, 0xf0, 0x28, 0xec, 0xf1, - 0xe4, 0x21, 0x57, 0xee, 0x2d, 0xe3, 0x4b, 0x9b, 0xf1, 0xe0, 0x66, 0x3c, 0xd8, 0xfb, 0x1e, 0xe1, - 0xa7, 0x9b, 0x82, 0x30, 0xf1, 0x5e, 0xc8, 0x8e, 0x0e, 0x82, 0xf0, 0xa3, 0xf5, 0x8f, 0xa1, 0xdd, - 0x17, 0x34, 0xec, 0x79, 0x6b, 0x55, 0x2b, 0x4f, 0x55, 0xb3, 0xbc, 0x11, 0x5b, 0x58, 0x58, 0x2f, - 0x49, 0x89, 0x27, 0xf0, 0x72, 0xc5, 0xfb, 0x0a, 0xe1, 0xc7, 0xea, 0x20, 0x76, 0xfa, 0x82, 0xb4, - 0x02, 0x68, 0x0a, 0x22, 0xc0, 0x5b, 0xb6, 0x84, 0xa7, 0x74, 0xd2, 0xdb, 0x9b, 0x45, 0xe5, 0xca, - 0xd4, 0xd7, 0x08, 0x3f, 0xfe, 0x6e, 0x18, 0x04, 0x9a, 0x2b, 0x5b, 0x6c, 0x5a, 0x28, 0x6d, 0xdd, - 0x2a, 0xac, 0x57, 0xbe, 0xbe, 0x43, 0xf8, 0xa9, 0x06, 0x70, 0x10, 0x4d, 0x41, 0xdb, 0x47, 0xc3, - 0x3d, 0xc2, 0x8f, 0x76, 0xfb, 0xd0, 0x07, 0x6f, 0xd5, 0x92, 0x6d, 0x12, 0x4b, 0x7f, 0xb5, 0x52, - 0x0c, 0xe5, 0xf1, 0x67, 0x84, 0x9f, 0x6b, 0x40, 0x3b, 0x64, 0x1d, 0xb9, 0xed, 0xe3, 0x51, 0x93, - 0x3a, 0x80, 0x8e, 0x57, 0xb7, 0x7e, 0x48, 0x0e, 0x41, 0xba, 0xdd, 0x2c, 0x0f, 0x32, 0x58, 0x5e, - 0x69, 0x0b, 0x3a, 0xa0, 0x62, 0x58, 0xdc, 0xb2, 0x81, 0x50, 0xcc, 0xb2, 0x11, 0xa4, 0x2c, 0xff, - 0x86, 0xf0, 0x0b, 0xf1, 0x7f, 0xb5, 0xb9, 0xd5, 0xc2, 0xe3, 0x28, 0x80, 0xb1, 0xeb, 0xdb, 0xf6, - 0xbb, 0x99, 0x0b, 0x91, 0xc6, 0xef, 0xcc, 0x85, 0x95, 0x5a, 0xee, 0xcc, 0xd0, 0x0d, 0x42, 0x03, - 0xa7, 0xe5, 0xce, 0x21, 0xb8, 0x2f, 0x77, 0x2e, 0x48, 0x59, 0xfe, 0x15, 0xe1, 0xe7, 0xb3, 0xdb, - 0xb2, 0x09, 0x84, 0x89, 0x16, 0x10, 0xe1, 0x6d, 0x15, 0xde, 0x5a, 0xc5, 0x90, 0xb6, 0x6f, 0xcf, - 0x03, 0x65, 0xaa, 0x93, 0xe9, 0xa1, 0x85, 0xeb, 0xc4, 0x08, 0x29, 0x58, 0x27, 0x39, 0x2c, 0x53, - 0x9d, 0x4c, 0x0f, 0x2d, 0x56, 0x27, 0x59, 0x42, 0xc1, 0x3a, 0x31, 0x81, 0x52, 0x75, 0x92, 0x9d, - 0x1d, 0xe9, 0xb5, 0x61, 0x6c, 0x7a, 0xab, 0xc4, 0x0a, 0x25, 0x0c, 0xf7, 0x3a, 0x99, 0x81, 0x52, - 0xc6, 0x7f, 0x44, 0xf8, 0x99, 0x26, 0x3d, 0xec, 0x91, 0x20, 0x9b, 0x18, 0xac, 0xcf, 0x7a, 0xb3, - 0x5e, 0x1a, 0xde, 0x28, 0x8b, 0x51, 0x66, 0xff, 0x44, 0xf8, 0xa5, 0x64, 0x14, 0x15, 0xdd, 0x9c, - 0x9c, 0xf3, 0xb6, 0xdb, 0xe3, 0x72, 0x41, 0xd2, 0xfe, 0x3b, 0x73, 0xe3, 0xa9, 0x79, 0xfc, 0x84, - 0xf0, 0xb3, 0x0d, 0x38, 0x0e, 0x07, 0x10, 0x8b, 0xb4, 0xb8, 0xb1, 0x61, 0xbd, 0xbf, 0x66, 0x80, - 0xf4, 0x5d, 0x2f, 0xcd, 0x51, 0x7e, 0x7f, 0x41, 0x78, 0x61, 0x0f, 0xd8, 0x31, 0xed, 0x11, 0x01, - 0xd9, 0x15, 0xb7, 0xfd, 0x21, 0xe5, 0x23, 0xa4, 0xe7, 0xad, 0x39, 0x90, 0xb4, 0xd2, 0x5e, 0x83, - 0x71, 0x73, 0x29, 0x5e, 0xda, 0x39, 0x7a, 0xd7, 0xd2, 0xce, 0xc5, 0x28, 0xb3, 0xe3, 0xe0, 0x3e, - 0x09, 0x58, 0xc5, 0x83, 0xbb, 0x59, 0xee, 0x1a, 0xdc, 0xf3, 0x28, 0xca, 0xe9, 0x1f, 0x08, 0xfb, - 0x09, 0x34, 0xee, 0x27, 0x59, 0xc7, 0xdb, 0xd6, 0xcf, 0x9a, 0x85, 0x91, 0xce, 0x77, 0xe6, 0x44, - 0xd3, 0xd2, 0x74, 0xb3, 0xdd, 0x85, 0x4e, 0x3f, 0x80, 0xe9, 0xd3, 0xdf, 0x3a, 0x4d, 0x9b, 0xc4, - 0xae, 0x69, 0xda, 0xcc, 0xd0, 0x5a, 0xdd, 0x3e, 0x30, 0x7a, 0x30, 0xdc, 0xa0, 0x8c, 0x0b, 0x2d, - 0xc7, 0x26, 0xca, 0x8e, 0x75, 0xab, 0xbb, 0x08, 0xe4, 0xda, 0xea, 0x2e, 0xe6, 0xa9, 0x79, 0xfc, - 0x8e, 0xf0, 0x8b, 0x71, 0x62, 0xa9, 0x75, 0x69, 0xd0, 0x51, 0xdb, 0x71, 0x1e, 0x44, 0xee, 0x38, - 0xe5, 0x9e, 0x1c, 0x8a, 0x9c, 0xc1, 0xf6, 0x7c, 0x60, 0xca, 0xfe, 0x3f, 0x08, 0xbf, 0x16, 0xcf, - 0xd6, 0x38, 0x76, 0x52, 0x57, 0x63, 0x12, 0x74, 0xbc, 0x3d, 0xa7, 0xc5, 0xbb, 0x08, 0x27, 0x27, - 0x74, 0x77, 0xce, 0x54, 0x2d, 0x64, 0xad, 0x01, 0x6f, 0x33, 0xda, 0x32, 0xf4, 0xc7, 0xba, 0x75, - 0x63, 0xcb, 0x21, 0xb8, 0x86, 0xac, 0x19, 0x20, 0x65, 0xf9, 0x1b, 0x84, 0x9f, 0x68, 0x40, 0x14, - 0xd0, 0x36, 0x11, 0xb0, 0x3e, 0x80, 0x9e, 0xe0, 0xfb, 0x57, 0xbc, 0x5b, 0xd6, 0x5b, 0x9e, 0x52, - 0x4a, 0x8b, 0x6f, 0x15, 0x07, 0xa4, 0xda, 0x77, 0xf2, 0xbd, 0x9c, 0x43, 0x7c, 0x9e, 0xaf, 0xb9, - 0xe2, 0x35, 0xb9, 0x7b, 0xfb, 0x36, 0x53, 0xb4, 0x7b, 0x97, 0xe6, 0xb0, 0xd7, 0x6e, 0x76, 0x09, - 0xeb, 0x8c, 0xbf, 0xec, 0x73, 0xeb, 0x7b, 0x97, 0x94, 0xce, 0xf5, 0xde, 0x25, 0x23, 0x57, 0xa6, - 0xee, 0x21, 0xfc, 0xc8, 0xf8, 0x5b, 0x19, 0x56, 0xbd, 0x1b, 0x0e, 0x48, 0x29, 0x92, 0x76, 0x6e, - 0x16, 0xd2, 0x6a, 0xa7, 0x83, 0xac, 0x46, 0x2d, 0x98, 0xad, 0x3a, 0x96, 0xb2, 0x29, 0x94, 0xd5, - 0x4a, 0x31, 0x94, 0xc7, 0x6f, 0x11, 0x7e, 0x52, 0x0e, 0x49, 0x6e, 0x00, 0x37, 0x43, 0x2e, 0xbc, - 0x15, 0x47, 0xfc, 0x94, 0x56, 0x3a, 0x5c, 0x2d, 0x83, 0x50, 0x06, 0x3f, 0x43, 0x18, 0xd7, 0x82, - 0x90, 0xc3, 0x64, 0xbf, 0xbd, 0x6b, 0x96, 0xd0, 0x73, 0x89, 0xb4, 0x73, 0xbd, 0x80, 0x52, 0xb9, - 0xf8, 0x04, 0x3f, 0x5c, 0x07, 0x11, 0x5b, 0x78, 0xdd, 0xfe, 0x72, 0x50, 0x33, 0xf0, 0x86, 0xb3, - 0x4e, 0x5b, 0x84, 0x38, 0x5d, 0x4f, 0xd2, 0xc5, 0x35, 0xa7, 0x40, 0x3e, 0x9d, 0x29, 0xae, 0x17, - 0x50, 0x6a, 0xad, 0xa9, 0x0e, 0x42, 0x36, 0x06, 0x1a, 0xf6, 0x76, 0x80, 0x73, 0x72, 0x08, 0xdc, - 0xba, 0x35, 0x99, 0xe5, 0xae, 0xad, 0x29, 0x8f, 0xa2, 0x1d, 0x49, 0x75, 0x10, 0x6b, 0xdb, 0xbb, - 0x26, 0xb3, 0x75, 0xfb, 0xc7, 0x98, 0x09, 0xae, 0x47, 0xd2, 0x0c, 0x90, 0xb2, 0xfc, 0x39, 0xc2, - 0x8f, 0xee, 0xf6, 0x81, 0x0d, 0x65, 0xbb, 0xf5, 0x6c, 0xbb, 0x8f, 0xa6, 0x92, 0xd6, 0x96, 0x8a, - 0x89, 0x35, 0x3b, 0x0d, 0x20, 0x51, 0x14, 0x0c, 0xe3, 0x43, 0xca, 0xda, 0x8e, 0xa6, 0x72, 0xb5, - 0x93, 0x12, 0x2b, 0x3b, 0x5f, 0x20, 0x7c, 0x29, 0x5e, 0x45, 0xb5, 0x8b, 0x4b, 0x4e, 0x8b, 0x9f, - 0xde, 0xba, 0xe5, 0x82, 0x6a, 0xfd, 0x82, 0xbf, 0xcf, 0x0e, 0x61, 0xda, 0x93, 0xf5, 0x05, 0x7f, - 0x4a, 0xe8, 0x7c, 0xc1, 0x9f, 0xd1, 0x6b, 0xbe, 0x76, 0xa0, 0xa0, 0xaf, 0xb4, 0xd0, 0xd5, 0x57, - 0x56, 0x9f, 0x7a, 0xf1, 0x70, 0xc0, 0x80, 0x77, 0xa7, 0x93, 0x3e, 0x77, 0x78, 0xf1, 0x90, 0x15, - 0xbb, 0xbf, 0x78, 0x30, 0x31, 0x94, 0xc7, 0xbf, 0x11, 0x7e, 0xa5, 0x0e, 0x3d, 0x60, 0x44, 0xc0, - 0x36, 0xe1, 0x22, 0x39, 0x91, 0xa6, 0x7e, 0xb8, 0xb1, 0xe5, 0x5d, 0xeb, 0xe2, 0xb9, 0x90, 0x25, - 0x67, 0xd0, 0x98, 0x27, 0x52, 0x5b, 0x74, 0xbd, 0x59, 0x26, 0x39, 0x6d, 0xb5, 0x50, 0xa7, 0xd5, - 0xc3, 0x5a, 0xad, 0x14, 0x43, 0x4b, 0x20, 0x0d, 0x68, 0xf5, 0x69, 0xd0, 0xd1, 0x42, 0xd2, 0x8a, - 0xf5, 0x9e, 0x66, 0xb4, 0xae, 0x09, 0xc4, 0x88, 0xd0, 0xae, 0x29, 0xf4, 0x6b, 0x97, 0x7d, 0xca, - 0x69, 0x8b, 0x06, 0x93, 0xb4, 0x37, 0xfe, 0x73, 0xc8, 0xfa, 0x9a, 0x62, 0x36, 0xc6, 0xf5, 0x9a, - 0xe2, 0x22, 0x9a, 0x76, 0x7f, 0x75, 0x37, 0xea, 0x90, 0x32, 0xf7, 0x57, 0x39, 0x7a, 0xd7, 0xfb, - 0xab, 0x5c, 0x8c, 0x34, 0xbb, 0x1a, 0x9d, 0x9c, 0xfa, 0x95, 0xfb, 0xa7, 0x7e, 0xe5, 0xc1, 0xa9, - 0x8f, 0x3e, 0x1d, 0xf9, 0xe8, 0x87, 0x91, 0x8f, 0xfe, 0x1a, 0xf9, 0xe8, 0x64, 0xe4, 0xa3, 0x7f, - 0x47, 0x3e, 0xfa, 0x6f, 0xe4, 0x57, 0x1e, 0x8c, 0x7c, 0xf4, 0xe5, 0x99, 0x5f, 0x39, 0x39, 0xf3, - 0x2b, 0xf7, 0xcf, 0xfc, 0xca, 0xfb, 0x37, 0x0e, 0xc3, 0x73, 0x07, 0x34, 0x9c, 0xf9, 0x16, 0xfc, - 0xa6, 0xfe, 0x49, 0xeb, 0xa1, 0xc9, 0x4b, 0xf0, 0xab, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x2d, - 0x24, 0xcb, 0xbd, 0xa0, 0x1f, 0x00, 0x00, + // 1288 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x99, 0xcd, 0x6b, 0x24, 0xc5, + 0x1b, 0xc7, 0xa7, 0x2e, 0x3f, 0x7e, 0x14, 0xba, 0x6a, 0x2b, 0xbe, 0x44, 0x6d, 0x7c, 0x41, 0xf1, + 0x34, 0x71, 0x77, 0x41, 0xf7, 0x25, 0xbb, 0x6b, 0x32, 0x49, 0x26, 0xd9, 0x4d, 0x74, 0x33, 0x93, + 0x8d, 0xe0, 0x45, 0x6a, 0x66, 0x9e, 0x64, 0x8a, 0x74, 0xa6, 0xdb, 0xaa, 0x9a, 0xd1, 0x39, 0x08, + 0x82, 0x27, 0x41, 0x50, 0x04, 0xc1, 0x93, 0xe0, 0x49, 0x11, 0x04, 0x41, 0x10, 0x04, 0xc1, 0x93, + 0xe0, 0x41, 0x24, 0x37, 0x73, 0x34, 0x93, 0x8b, 0xc7, 0xfd, 0x13, 0x64, 0xa6, 0xa7, 0x2a, 0x53, + 0xdd, 0xd5, 0x33, 0x55, 0xdd, 0x73, 0xdb, 0x9d, 0xa9, 0xef, 0xa7, 0xbf, 0xf5, 0x32, 0x4f, 0x7d, + 0xf3, 0x34, 0xbe, 0x2c, 0xe0, 0x28, 0x0a, 0x19, 0x09, 0x16, 0x39, 0xb0, 0x1e, 0xb0, 0x45, 0x12, + 0xd1, 0xc5, 0x36, 0xe5, 0x22, 0x64, 0xfd, 0xe1, 0x27, 0xb4, 0x09, 0x8b, 0xbd, 0x8b, 0x8b, 0xe3, + 0x7f, 0x96, 0x23, 0x16, 0x8a, 0xd0, 0x7b, 0x49, 0x8a, 0xca, 0xb1, 0xa8, 0x4c, 0x22, 0x5a, 0xd6, + 0x45, 0xe5, 0xde, 0xc5, 0x85, 0x25, 0x3b, 0x36, 0x83, 0xf7, 0xba, 0xc0, 0xc5, 0xbb, 0x0c, 0x78, + 0x14, 0x76, 0xf8, 0xf8, 0x21, 0x97, 0x4e, 0x6e, 0xe2, 0x0b, 0x1b, 0xf1, 0xe0, 0x7a, 0x3c, 0xd8, + 0xfb, 0x16, 0xe1, 0xc7, 0xeb, 0x82, 0x30, 0xf1, 0x76, 0xc8, 0x0e, 0xf7, 0x83, 0xf0, 0xfd, 0xb5, + 0x0f, 0xa0, 0xd9, 0x15, 0x34, 0xec, 0x78, 0xab, 0x65, 0x2b, 0x4f, 0x65, 0xb3, 0xbc, 0x16, 0x5b, + 0x58, 0x58, 0x2b, 0x48, 0x89, 0x27, 0xf0, 0x42, 0xc9, 0xfb, 0x02, 0xe1, 0x87, 0xaa, 0x20, 0xb6, + 0xbb, 0x82, 0x34, 0x02, 0xa8, 0x0b, 0x22, 0xc0, 0xbb, 0x61, 0x09, 0x4f, 0xe8, 0xa4, 0xb7, 0x9b, + 0x79, 0xe5, 0xca, 0xd4, 0x97, 0x08, 0x3f, 0x7c, 0x37, 0x0c, 0x02, 0xcd, 0x95, 0x2d, 0x36, 0x29, + 0x94, 0xb6, 0x6e, 0xe5, 0xd6, 0x2b, 0x5f, 0xdf, 0x20, 0xfc, 0x58, 0x0d, 0x38, 0x88, 0xba, 0xa0, + 0xcd, 0xc3, 0xfe, 0x2e, 0xe1, 0x87, 0x3b, 0x5d, 0xe8, 0x82, 0xb7, 0x62, 0xc9, 0x36, 0x89, 0xa5, + 0xbf, 0x4a, 0x21, 0x86, 0xf2, 0xf8, 0x23, 0xc2, 0x4f, 0xd5, 0xa0, 0x19, 0xb2, 0x96, 0xdc, 0xf6, + 0xe1, 0xa8, 0xd1, 0x39, 0x80, 0x96, 0x57, 0xb5, 0x7e, 0x48, 0x06, 0x41, 0xba, 0xdd, 0x28, 0x0e, + 0x32, 0x58, 0x5e, 0x6e, 0x0a, 0xda, 0xa3, 0xa2, 0x9f, 0xdf, 0xb2, 0x81, 0x90, 0xcf, 0xb2, 0x11, + 0xa4, 0x2c, 0xff, 0x82, 0xf0, 0x33, 0xf1, 0x7f, 0xb5, 0xb9, 0x55, 0xc2, 0xa3, 0x28, 0x80, 0xa1, + 0xeb, 0xdb, 0xf6, 0xbb, 0x99, 0x09, 0x91, 0xc6, 0xef, 0xcc, 0x85, 0x95, 0x58, 0xee, 0xd4, 0xd0, + 0x75, 0x42, 0x03, 0xa7, 0xe5, 0xce, 0x20, 0xb8, 0x2f, 0x77, 0x26, 0x48, 0x59, 0xfe, 0x19, 0xe1, + 0xa7, 0xd3, 0xdb, 0xb2, 0x01, 0x84, 0x89, 0x06, 0x10, 0xe1, 0x6d, 0xe6, 0xde, 0x5a, 0xc5, 0x90, + 0xb6, 0x6f, 0xcf, 0x03, 0x65, 0x3a, 0x27, 0x93, 0x43, 0x73, 0x9f, 0x13, 0x23, 0x24, 0xe7, 0x39, + 0xc9, 0x60, 0x99, 0xce, 0xc9, 0xe4, 0xd0, 0x7c, 0xe7, 0x24, 0x4d, 0xc8, 0x79, 0x4e, 0x4c, 0xa0, + 0xc4, 0x39, 0x49, 0xcf, 0x8e, 0x74, 0x9a, 0x30, 0x34, 0xbd, 0x59, 0x60, 0x85, 0xc6, 0x0c, 0xf7, + 0x73, 0x32, 0x05, 0xa5, 0x8c, 0x7f, 0x8f, 0xf0, 0x13, 0x75, 0x7a, 0xd0, 0x21, 0x41, 0x3a, 0x31, + 0x58, 0xdf, 0xf5, 0x66, 0xbd, 0x34, 0xbc, 0x5e, 0x14, 0xa3, 0xcc, 0xfe, 0x8e, 0xf0, 0x73, 0xe3, + 0x51, 0x54, 0xb4, 0x33, 0x72, 0xce, 0x9b, 0x6e, 0x8f, 0xcb, 0x04, 0x49, 0xfb, 0x6f, 0xcd, 0x8d, + 0xa7, 0xe6, 0xf1, 0x03, 0xc2, 0x4f, 0xd6, 0xe0, 0x28, 0xec, 0x41, 0x2c, 0xd2, 0xe2, 0xc6, 0xba, + 0xf5, 0xfe, 0x9a, 0x01, 0xd2, 0x77, 0xb5, 0x30, 0x47, 0xf9, 0xfd, 0x09, 0xe1, 0x85, 0x5d, 0x60, + 0x47, 0xb4, 0x43, 0x04, 0xa4, 0x57, 0xdc, 0xf6, 0x87, 0x94, 0x8d, 0x90, 0x9e, 0x37, 0xe7, 0x40, + 0xd2, 0x8e, 0xf6, 0x2a, 0x0c, 0x8b, 0x4b, 0xfe, 0xa3, 0x9d, 0xa1, 0x77, 0x3d, 0xda, 0x99, 0x18, + 0x65, 0x76, 0x18, 0xdc, 0x47, 0x01, 0x2b, 0x7f, 0x70, 0x37, 0xcb, 0x5d, 0x83, 0x7b, 0x16, 0x45, + 0x39, 0xfd, 0x0d, 0x61, 0x7f, 0x0c, 0x8d, 0xeb, 0x49, 0xda, 0xf1, 0x96, 0xf5, 0xb3, 0xa6, 0x61, + 0xa4, 0xf3, 0xed, 0x39, 0xd1, 0xb4, 0x34, 0x5d, 0x6f, 0xb6, 0xa1, 0xd5, 0x0d, 0x60, 0xf2, 0xf6, + 0xb7, 0x4e, 0xd3, 0x26, 0xb1, 0x6b, 0x9a, 0x36, 0x33, 0xb4, 0x52, 0xb7, 0x07, 0x8c, 0xee, 0xf7, + 0xd7, 0x29, 0xe3, 0x42, 0xcb, 0xb1, 0x63, 0x65, 0xcb, 0xba, 0xd4, 0xcd, 0x02, 0xb9, 0x96, 0xba, + 0xd9, 0x3c, 0x35, 0x8f, 0x5f, 0x11, 0x7e, 0x36, 0x4e, 0x2c, 0x95, 0x36, 0x0d, 0x5a, 0x6a, 0x3b, + 0xce, 0x83, 0xc8, 0x1d, 0xa7, 0xdc, 0x93, 0x41, 0x91, 0x33, 0xd8, 0x9a, 0x0f, 0x4c, 0xd9, 0xff, + 0x1b, 0xe1, 0x97, 0xe3, 0xd9, 0x1a, 0xc7, 0x8e, 0xce, 0xd5, 0x90, 0x04, 0x2d, 0x6f, 0xd7, 0x69, + 0xf1, 0x66, 0xe1, 0xe4, 0x84, 0xee, 0xcd, 0x99, 0xaa, 0x85, 0xac, 0x55, 0xe0, 0x4d, 0x46, 0x1b, + 0x86, 0xfa, 0x58, 0xb5, 0x2e, 0x6c, 0x19, 0x04, 0xd7, 0x90, 0x35, 0x05, 0xa4, 0x2c, 0x7f, 0x85, + 0xf0, 0x23, 0x35, 0x88, 0x02, 0xda, 0x24, 0x02, 0xd6, 0x7a, 0xd0, 0x11, 0x7c, 0xef, 0x92, 0x77, + 0xcb, 0x7a, 0xcb, 0x13, 0x4a, 0x69, 0xf1, 0x8d, 0xfc, 0x80, 0x44, 0xf9, 0x1e, 0x7f, 0x2f, 0xe7, + 0x10, 0xdf, 0xe7, 0xab, 0xae, 0x78, 0x4d, 0xee, 0x5e, 0xbe, 0xcd, 0x14, 0xad, 0xef, 0x52, 0xef, + 0x77, 0x9a, 0xf5, 0x36, 0x61, 0xad, 0xe1, 0x97, 0x5d, 0x6e, 0xdd, 0x77, 0x49, 0xe8, 0x5c, 0xfb, + 0x2e, 0x29, 0xb9, 0x32, 0xf5, 0x09, 0xc2, 0x0f, 0x0c, 0xbf, 0x95, 0x61, 0xd5, 0xbb, 0xe6, 0x80, + 0x94, 0x22, 0x69, 0xe7, 0x7a, 0x2e, 0xad, 0x76, 0x3b, 0xc8, 0xd3, 0xa8, 0x05, 0xb3, 0x15, 0xc7, + 0xa3, 0x6c, 0x0a, 0x65, 0x95, 0x42, 0x0c, 0xe5, 0xf1, 0x6b, 0x84, 0x1f, 0x95, 0x43, 0xc6, 0x1d, + 0xc0, 0x8d, 0x90, 0x0b, 0x6f, 0xd9, 0x11, 0x3f, 0xa1, 0x95, 0x0e, 0x57, 0x8a, 0x20, 0x94, 0xc1, + 0x8f, 0x11, 0xc6, 0x95, 0x20, 0xe4, 0x30, 0xda, 0x6f, 0xef, 0x8a, 0x25, 0xf4, 0x5c, 0x22, 0xed, + 0x5c, 0xcd, 0xa1, 0x54, 0x2e, 0x3e, 0xc4, 0xff, 0xaf, 0x82, 0x88, 0x2d, 0xbc, 0x66, 0xdf, 0x1c, + 0xd4, 0x0c, 0xbc, 0xee, 0xac, 0xd3, 0x16, 0x21, 0x4e, 0xd7, 0xa3, 0x74, 0x71, 0xc5, 0x29, 0x90, + 0x4f, 0x66, 0x8a, 0xab, 0x39, 0x94, 0x5a, 0x69, 0xaa, 0x82, 0x90, 0x85, 0x81, 0x86, 0x9d, 0x6d, + 0xe0, 0x9c, 0x1c, 0x00, 0xb7, 0x2e, 0x4d, 0x66, 0xb9, 0x6b, 0x69, 0xca, 0xa2, 0x68, 0x57, 0x52, + 0x15, 0xc4, 0xea, 0xd6, 0x8e, 0xc9, 0x6c, 0xd5, 0xfe, 0x31, 0x66, 0x82, 0xeb, 0x95, 0x34, 0x05, + 0xa4, 0x2c, 0x7f, 0x8a, 0xf0, 0x83, 0x3b, 0x5d, 0x60, 0x7d, 0x59, 0x6e, 0x3d, 0xdb, 0xea, 0xa3, + 0xa9, 0xa4, 0xb5, 0xa5, 0x7c, 0x62, 0xcd, 0x4e, 0x0d, 0x48, 0x14, 0x05, 0xfd, 0xf8, 0x92, 0xb2, + 0xb6, 0xa3, 0xa9, 0x5c, 0xed, 0x24, 0xc4, 0xca, 0xce, 0x67, 0x08, 0x5f, 0x88, 0x57, 0x51, 0xed, + 0xe2, 0x92, 0xd3, 0xe2, 0x27, 0xb7, 0xee, 0x46, 0x4e, 0xb5, 0xde, 0xe0, 0xef, 0xb2, 0x03, 0x98, + 0xf4, 0x64, 0xdd, 0xe0, 0x4f, 0x08, 0x9d, 0x1b, 0xfc, 0x29, 0xbd, 0xe6, 0x6b, 0x1b, 0x72, 0xfa, + 0x4a, 0x0a, 0x5d, 0x7d, 0xa5, 0xf5, 0x89, 0x17, 0x0f, 0xfb, 0x0c, 0x78, 0x7b, 0x32, 0xe9, 0x73, + 0x87, 0x17, 0x0f, 0x69, 0xb1, 0xfb, 0x8b, 0x07, 0x13, 0x43, 0x79, 0xfc, 0x0b, 0xe1, 0x17, 0xab, + 0xd0, 0x01, 0x46, 0x04, 0x6c, 0x11, 0x2e, 0xc6, 0x37, 0xd2, 0xc4, 0x0f, 0x37, 0xb6, 0xbc, 0x63, + 0x7d, 0x78, 0x66, 0xb2, 0xe4, 0x0c, 0x6a, 0xf3, 0x44, 0x6a, 0x8b, 0xae, 0x17, 0xcb, 0x71, 0x4e, + 0x5b, 0xc9, 0x55, 0x69, 0xf5, 0xb0, 0x56, 0x29, 0xc4, 0xd0, 0x12, 0x48, 0x0d, 0x1a, 0x5d, 0x1a, + 0xb4, 0xb4, 0x90, 0xb4, 0x6c, 0xbd, 0xa7, 0x29, 0xad, 0x6b, 0x02, 0x31, 0x22, 0xb4, 0x36, 0x85, + 0xde, 0x76, 0xd9, 0xa3, 0x9c, 0x36, 0x68, 0x30, 0x4a, 0x7b, 0xc3, 0x3f, 0x87, 0xac, 0xdb, 0x14, + 0xd3, 0x31, 0xae, 0x6d, 0x8a, 0x59, 0x34, 0xad, 0x7f, 0x75, 0x2f, 0x6a, 0x91, 0x22, 0xfd, 0xab, + 0x0c, 0xbd, 0x6b, 0xff, 0x2a, 0x13, 0xa3, 0xcc, 0xfe, 0x89, 0xf0, 0xf3, 0x75, 0xc1, 0x80, 0x1c, + 0x9d, 0x5f, 0x4b, 0xe9, 0x3b, 0xdc, 0xba, 0x97, 0x3a, 0x8b, 0x24, 0x27, 0x70, 0x77, 0x7e, 0x40, + 0x39, 0x95, 0x57, 0xd0, 0xab, 0x68, 0x25, 0x3a, 0x3e, 0xf5, 0x4b, 0x27, 0xa7, 0x7e, 0xe9, 0xfe, + 0xa9, 0x8f, 0x3e, 0x1a, 0xf8, 0xe8, 0xbb, 0x81, 0x8f, 0xfe, 0x18, 0xf8, 0xe8, 0x78, 0xe0, 0xa3, + 0x7f, 0x06, 0x3e, 0xfa, 0x77, 0xe0, 0x97, 0xee, 0x0f, 0x7c, 0xf4, 0xf9, 0x99, 0x5f, 0x3a, 0x3e, + 0xf3, 0x4b, 0x27, 0x67, 0x7e, 0xe9, 0x9d, 0x6b, 0x07, 0xe1, 0xb9, 0x1f, 0x1a, 0x4e, 0x7d, 0xa9, + 0x7f, 0x5d, 0xff, 0xa4, 0xf1, 0xbf, 0xd1, 0x3b, 0xfd, 0xcb, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, + 0xa7, 0xe9, 0xb0, 0x3f, 0x6f, 0x20, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -311,6 +313,7 @@ type HistoryServiceClient interface { // (-- api-linter: core::0134=disabled // aip.dev/not-precedent: This service does not follow the update method API --) UpdateWorkflowExecution(ctx context.Context, in *UpdateWorkflowExecutionRequest, opts ...grpc.CallOption) (*UpdateWorkflowExecutionResponse, error) + StreamWorkflowReplicationMessages(ctx context.Context, opts ...grpc.CallOption) (HistoryService_StreamWorkflowReplicationMessagesClient, error) } type historyServiceClient struct { @@ -735,6 +738,37 @@ func (c *historyServiceClient) UpdateWorkflowExecution(ctx context.Context, in * return out, nil } +func (c *historyServiceClient) StreamWorkflowReplicationMessages(ctx context.Context, opts ...grpc.CallOption) (HistoryService_StreamWorkflowReplicationMessagesClient, error) { + stream, err := c.cc.NewStream(ctx, &_HistoryService_serviceDesc.Streams[0], "/temporal.server.api.historyservice.v1.HistoryService/StreamWorkflowReplicationMessages", opts...) + if err != nil { + return nil, err + } + x := &historyServiceStreamWorkflowReplicationMessagesClient{stream} + return x, nil +} + +type HistoryService_StreamWorkflowReplicationMessagesClient interface { + Send(*StreamWorkflowReplicationMessagesRequest) error + Recv() (*StreamWorkflowReplicationMessagesResponse, error) + grpc.ClientStream +} + +type historyServiceStreamWorkflowReplicationMessagesClient struct { + grpc.ClientStream +} + +func (x *historyServiceStreamWorkflowReplicationMessagesClient) Send(m *StreamWorkflowReplicationMessagesRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *historyServiceStreamWorkflowReplicationMessagesClient) Recv() (*StreamWorkflowReplicationMessagesResponse, error) { + m := new(StreamWorkflowReplicationMessagesResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // HistoryServiceServer is the server API for HistoryService service. type HistoryServiceServer interface { // StartWorkflowExecution starts a new long running workflow instance. It will create the instance with @@ -900,6 +934,7 @@ type HistoryServiceServer interface { // (-- api-linter: core::0134=disabled // aip.dev/not-precedent: This service does not follow the update method API --) UpdateWorkflowExecution(context.Context, *UpdateWorkflowExecutionRequest) (*UpdateWorkflowExecutionResponse, error) + StreamWorkflowReplicationMessages(HistoryService_StreamWorkflowReplicationMessagesServer) error } // UnimplementedHistoryServiceServer can be embedded to have forward compatible implementations. @@ -1044,6 +1079,9 @@ func (*UnimplementedHistoryServiceServer) DeleteWorkflowVisibilityRecord(ctx con func (*UnimplementedHistoryServiceServer) UpdateWorkflowExecution(ctx context.Context, req *UpdateWorkflowExecutionRequest) (*UpdateWorkflowExecutionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateWorkflowExecution not implemented") } +func (*UnimplementedHistoryServiceServer) StreamWorkflowReplicationMessages(srv HistoryService_StreamWorkflowReplicationMessagesServer) error { + return status.Errorf(codes.Unimplemented, "method StreamWorkflowReplicationMessages not implemented") +} func RegisterHistoryServiceServer(s *grpc.Server, srv HistoryServiceServer) { s.RegisterService(&_HistoryService_serviceDesc, srv) @@ -1877,6 +1915,32 @@ func _HistoryService_UpdateWorkflowExecution_Handler(srv interface{}, ctx contex return interceptor(ctx, in, info, handler) } +func _HistoryService_StreamWorkflowReplicationMessages_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(HistoryServiceServer).StreamWorkflowReplicationMessages(&historyServiceStreamWorkflowReplicationMessagesServer{stream}) +} + +type HistoryService_StreamWorkflowReplicationMessagesServer interface { + Send(*StreamWorkflowReplicationMessagesResponse) error + Recv() (*StreamWorkflowReplicationMessagesRequest, error) + grpc.ServerStream +} + +type historyServiceStreamWorkflowReplicationMessagesServer struct { + grpc.ServerStream +} + +func (x *historyServiceStreamWorkflowReplicationMessagesServer) Send(m *StreamWorkflowReplicationMessagesResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *historyServiceStreamWorkflowReplicationMessagesServer) Recv() (*StreamWorkflowReplicationMessagesRequest, error) { + m := new(StreamWorkflowReplicationMessagesRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + var _HistoryService_serviceDesc = grpc.ServiceDesc{ ServiceName: "temporal.server.api.historyservice.v1.HistoryService", HandlerType: (*HistoryServiceServer)(nil), @@ -2066,6 +2130,13 @@ var _HistoryService_serviceDesc = grpc.ServiceDesc{ Handler: _HistoryService_UpdateWorkflowExecution_Handler, }, }, - Streams: []grpc.StreamDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamWorkflowReplicationMessages", + Handler: _HistoryService_StreamWorkflowReplicationMessages_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, Metadata: "temporal/server/api/historyservice/v1/service.proto", } diff --git a/api/historyservicemock/v1/service.pb.mock.go b/api/historyservicemock/v1/service.pb.mock.go index f35ee33122b..b3ad4bb465a 100644 --- a/api/historyservicemock/v1/service.pb.mock.go +++ b/api/historyservicemock/v1/service.pb.mock.go @@ -35,6 +35,7 @@ import ( gomock "github.com/golang/mock/gomock" historyservice "go.temporal.io/server/api/historyservice/v1" grpc "google.golang.org/grpc" + metadata "google.golang.org/grpc/metadata" ) // MockHistoryServiceClient is a mock of HistoryServiceClient interface. @@ -860,6 +861,26 @@ func (mr *MockHistoryServiceClientMockRecorder) StartWorkflowExecution(ctx, in i return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartWorkflowExecution", reflect.TypeOf((*MockHistoryServiceClient)(nil).StartWorkflowExecution), varargs...) } +// StreamWorkflowReplicationMessages mocks base method. +func (m *MockHistoryServiceClient) StreamWorkflowReplicationMessages(ctx context.Context, opts ...grpc.CallOption) (historyservice.HistoryService_StreamWorkflowReplicationMessagesClient, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StreamWorkflowReplicationMessages", varargs...) + ret0, _ := ret[0].(historyservice.HistoryService_StreamWorkflowReplicationMessagesClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StreamWorkflowReplicationMessages indicates an expected call of StreamWorkflowReplicationMessages. +func (mr *MockHistoryServiceClientMockRecorder) StreamWorkflowReplicationMessages(ctx interface{}, opts ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StreamWorkflowReplicationMessages", reflect.TypeOf((*MockHistoryServiceClient)(nil).StreamWorkflowReplicationMessages), varargs...) +} + // SyncActivity mocks base method. func (m *MockHistoryServiceClient) SyncActivity(ctx context.Context, in *historyservice.SyncActivityRequest, opts ...grpc.CallOption) (*historyservice.SyncActivityResponse, error) { m.ctrl.T.Helper() @@ -980,6 +1001,143 @@ func (mr *MockHistoryServiceClientMockRecorder) VerifyFirstWorkflowTaskScheduled return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyFirstWorkflowTaskScheduled", reflect.TypeOf((*MockHistoryServiceClient)(nil).VerifyFirstWorkflowTaskScheduled), varargs...) } +// MockHistoryService_StreamWorkflowReplicationMessagesClient is a mock of HistoryService_StreamWorkflowReplicationMessagesClient interface. +type MockHistoryService_StreamWorkflowReplicationMessagesClient struct { + ctrl *gomock.Controller + recorder *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder +} + +// MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder is the mock recorder for MockHistoryService_StreamWorkflowReplicationMessagesClient. +type MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder struct { + mock *MockHistoryService_StreamWorkflowReplicationMessagesClient +} + +// NewMockHistoryService_StreamWorkflowReplicationMessagesClient creates a new mock instance. +func NewMockHistoryService_StreamWorkflowReplicationMessagesClient(ctrl *gomock.Controller) *MockHistoryService_StreamWorkflowReplicationMessagesClient { + mock := &MockHistoryService_StreamWorkflowReplicationMessagesClient{ctrl: ctrl} + mock.recorder = &MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesClient) EXPECT() *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder { + return m.recorder +} + +// CloseSend mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesClient) CloseSend() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CloseSend") + ret0, _ := ret[0].(error) + return ret0 +} + +// CloseSend indicates an expected call of CloseSend. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder) CloseSend() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CloseSend", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesClient)(nil).CloseSend)) +} + +// Context mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesClient) Context() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder) Context() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesClient)(nil).Context)) +} + +// Header mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesClient) Header() (metadata.MD, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Header") + ret0, _ := ret[0].(metadata.MD) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Header indicates an expected call of Header. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder) Header() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Header", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesClient)(nil).Header)) +} + +// Recv mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesClient) Recv() (*historyservice.StreamWorkflowReplicationMessagesResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Recv") + ret0, _ := ret[0].(*historyservice.StreamWorkflowReplicationMessagesResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Recv indicates an expected call of Recv. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder) Recv() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Recv", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesClient)(nil).Recv)) +} + +// RecvMsg mocks base method. +func (m_2 *MockHistoryService_StreamWorkflowReplicationMessagesClient) RecvMsg(m interface{}) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "RecvMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecvMsg indicates an expected call of RecvMsg. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder) RecvMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecvMsg", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesClient)(nil).RecvMsg), m) +} + +// Send mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesClient) Send(arg0 *historyservice.StreamWorkflowReplicationMessagesRequest) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Send", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Send indicates an expected call of Send. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder) Send(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Send", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesClient)(nil).Send), arg0) +} + +// SendMsg mocks base method. +func (m_2 *MockHistoryService_StreamWorkflowReplicationMessagesClient) SendMsg(m interface{}) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "SendMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendMsg indicates an expected call of SendMsg. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder) SendMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMsg", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesClient)(nil).SendMsg), m) +} + +// Trailer mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesClient) Trailer() metadata.MD { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Trailer") + ret0, _ := ret[0].(metadata.MD) + return ret0 +} + +// Trailer indicates an expected call of Trailer. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesClientMockRecorder) Trailer() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Trailer", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesClient)(nil).Trailer)) +} + // MockHistoryServiceServer is a mock of HistoryServiceServer interface. type MockHistoryServiceServer struct { ctrl *gomock.Controller @@ -1603,6 +1761,20 @@ func (mr *MockHistoryServiceServerMockRecorder) StartWorkflowExecution(arg0, arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartWorkflowExecution", reflect.TypeOf((*MockHistoryServiceServer)(nil).StartWorkflowExecution), arg0, arg1) } +// StreamWorkflowReplicationMessages mocks base method. +func (m *MockHistoryServiceServer) StreamWorkflowReplicationMessages(arg0 historyservice.HistoryService_StreamWorkflowReplicationMessagesServer) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StreamWorkflowReplicationMessages", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// StreamWorkflowReplicationMessages indicates an expected call of StreamWorkflowReplicationMessages. +func (mr *MockHistoryServiceServerMockRecorder) StreamWorkflowReplicationMessages(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StreamWorkflowReplicationMessages", reflect.TypeOf((*MockHistoryServiceServer)(nil).StreamWorkflowReplicationMessages), arg0) +} + // SyncActivity mocks base method. func (m *MockHistoryServiceServer) SyncActivity(arg0 context.Context, arg1 *historyservice.SyncActivityRequest) (*historyservice.SyncActivityResponse, error) { m.ctrl.T.Helper() @@ -1692,3 +1864,137 @@ func (mr *MockHistoryServiceServerMockRecorder) VerifyFirstWorkflowTaskScheduled mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyFirstWorkflowTaskScheduled", reflect.TypeOf((*MockHistoryServiceServer)(nil).VerifyFirstWorkflowTaskScheduled), arg0, arg1) } + +// MockHistoryService_StreamWorkflowReplicationMessagesServer is a mock of HistoryService_StreamWorkflowReplicationMessagesServer interface. +type MockHistoryService_StreamWorkflowReplicationMessagesServer struct { + ctrl *gomock.Controller + recorder *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder +} + +// MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder is the mock recorder for MockHistoryService_StreamWorkflowReplicationMessagesServer. +type MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder struct { + mock *MockHistoryService_StreamWorkflowReplicationMessagesServer +} + +// NewMockHistoryService_StreamWorkflowReplicationMessagesServer creates a new mock instance. +func NewMockHistoryService_StreamWorkflowReplicationMessagesServer(ctrl *gomock.Controller) *MockHistoryService_StreamWorkflowReplicationMessagesServer { + mock := &MockHistoryService_StreamWorkflowReplicationMessagesServer{ctrl: ctrl} + mock.recorder = &MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesServer) EXPECT() *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder { + return m.recorder +} + +// Context mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesServer) Context() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder) Context() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesServer)(nil).Context)) +} + +// Recv mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesServer) Recv() (*historyservice.StreamWorkflowReplicationMessagesRequest, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Recv") + ret0, _ := ret[0].(*historyservice.StreamWorkflowReplicationMessagesRequest) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Recv indicates an expected call of Recv. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder) Recv() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Recv", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesServer)(nil).Recv)) +} + +// RecvMsg mocks base method. +func (m_2 *MockHistoryService_StreamWorkflowReplicationMessagesServer) RecvMsg(m interface{}) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "RecvMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecvMsg indicates an expected call of RecvMsg. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder) RecvMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecvMsg", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesServer)(nil).RecvMsg), m) +} + +// Send mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesServer) Send(arg0 *historyservice.StreamWorkflowReplicationMessagesResponse) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Send", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Send indicates an expected call of Send. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder) Send(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Send", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesServer)(nil).Send), arg0) +} + +// SendHeader mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesServer) SendHeader(arg0 metadata.MD) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendHeader", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendHeader indicates an expected call of SendHeader. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder) SendHeader(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendHeader", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesServer)(nil).SendHeader), arg0) +} + +// SendMsg mocks base method. +func (m_2 *MockHistoryService_StreamWorkflowReplicationMessagesServer) SendMsg(m interface{}) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "SendMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendMsg indicates an expected call of SendMsg. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder) SendMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMsg", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesServer)(nil).SendMsg), m) +} + +// SetHeader mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesServer) SetHeader(arg0 metadata.MD) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetHeader", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetHeader indicates an expected call of SetHeader. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder) SetHeader(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetHeader", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesServer)(nil).SetHeader), arg0) +} + +// SetTrailer mocks base method. +func (m *MockHistoryService_StreamWorkflowReplicationMessagesServer) SetTrailer(arg0 metadata.MD) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "SetTrailer", arg0) +} + +// SetTrailer indicates an expected call of SetTrailer. +func (mr *MockHistoryService_StreamWorkflowReplicationMessagesServerMockRecorder) SetTrailer(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetTrailer", reflect.TypeOf((*MockHistoryService_StreamWorkflowReplicationMessagesServer)(nil).SetTrailer), arg0) +} diff --git a/api/replication/v1/message.pb.go b/api/replication/v1/message.pb.go index 043491596a1..045995056bf 100644 --- a/api/replication/v1/message.pb.go +++ b/api/replication/v1/message.pb.go @@ -323,6 +323,57 @@ func (m *SyncShardStatus) GetStatusTime() *time.Time { return nil } +type SyncReplicationState struct { + LastProcessedMessageId int64 `protobuf:"varint,1,opt,name=last_processed_message_id,json=lastProcessedMessageId,proto3" json:"last_processed_message_id,omitempty"` + LastProcessedMessageTime *time.Time `protobuf:"bytes,2,opt,name=last_processed_message_time,json=lastProcessedMessageTime,proto3,stdtime" json:"last_processed_message_time,omitempty"` +} + +func (m *SyncReplicationState) Reset() { *m = SyncReplicationState{} } +func (*SyncReplicationState) ProtoMessage() {} +func (*SyncReplicationState) Descriptor() ([]byte, []int) { + return fileDescriptor_edd9fae2af6b0532, []int{3} +} +func (m *SyncReplicationState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SyncReplicationState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SyncReplicationState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SyncReplicationState) XXX_Merge(src proto.Message) { + xxx_messageInfo_SyncReplicationState.Merge(m, src) +} +func (m *SyncReplicationState) XXX_Size() int { + return m.Size() +} +func (m *SyncReplicationState) XXX_DiscardUnknown() { + xxx_messageInfo_SyncReplicationState.DiscardUnknown(m) +} + +var xxx_messageInfo_SyncReplicationState proto.InternalMessageInfo + +func (m *SyncReplicationState) GetLastProcessedMessageId() int64 { + if m != nil { + return m.LastProcessedMessageId + } + return 0 +} + +func (m *SyncReplicationState) GetLastProcessedMessageTime() *time.Time { + if m != nil { + return m.LastProcessedMessageTime + } + return nil +} + type ReplicationMessages struct { ReplicationTasks []*ReplicationTask `protobuf:"bytes,1,rep,name=replication_tasks,json=replicationTasks,proto3" json:"replication_tasks,omitempty"` // This can be different than the last taskId in the above list, because sender can decide to skip tasks (e.g. for completed workflows). @@ -335,7 +386,7 @@ type ReplicationMessages struct { func (m *ReplicationMessages) Reset() { *m = ReplicationMessages{} } func (*ReplicationMessages) ProtoMessage() {} func (*ReplicationMessages) Descriptor() ([]byte, []int) { - return fileDescriptor_edd9fae2af6b0532, []int{3} + return fileDescriptor_edd9fae2af6b0532, []int{4} } func (m *ReplicationMessages) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -407,7 +458,7 @@ type ReplicationTaskInfo struct { func (m *ReplicationTaskInfo) Reset() { *m = ReplicationTaskInfo{} } func (*ReplicationTaskInfo) ProtoMessage() {} func (*ReplicationTaskInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_edd9fae2af6b0532, []int{4} + return fileDescriptor_edd9fae2af6b0532, []int{5} } func (m *ReplicationTaskInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -513,7 +564,7 @@ type NamespaceTaskAttributes struct { func (m *NamespaceTaskAttributes) Reset() { *m = NamespaceTaskAttributes{} } func (*NamespaceTaskAttributes) ProtoMessage() {} func (*NamespaceTaskAttributes) Descriptor() ([]byte, []int) { - return fileDescriptor_edd9fae2af6b0532, []int{5} + return fileDescriptor_edd9fae2af6b0532, []int{6} } func (m *NamespaceTaskAttributes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -607,7 +658,7 @@ type SyncShardStatusTaskAttributes struct { func (m *SyncShardStatusTaskAttributes) Reset() { *m = SyncShardStatusTaskAttributes{} } func (*SyncShardStatusTaskAttributes) ProtoMessage() {} func (*SyncShardStatusTaskAttributes) Descriptor() ([]byte, []int) { - return fileDescriptor_edd9fae2af6b0532, []int{6} + return fileDescriptor_edd9fae2af6b0532, []int{7} } func (m *SyncShardStatusTaskAttributes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -677,7 +728,7 @@ type SyncActivityTaskAttributes struct { func (m *SyncActivityTaskAttributes) Reset() { *m = SyncActivityTaskAttributes{} } func (*SyncActivityTaskAttributes) ProtoMessage() {} func (*SyncActivityTaskAttributes) Descriptor() ([]byte, []int) { - return fileDescriptor_edd9fae2af6b0532, []int{7} + return fileDescriptor_edd9fae2af6b0532, []int{8} } func (m *SyncActivityTaskAttributes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -817,7 +868,7 @@ type HistoryTaskAttributes struct { func (m *HistoryTaskAttributes) Reset() { *m = HistoryTaskAttributes{} } func (*HistoryTaskAttributes) ProtoMessage() {} func (*HistoryTaskAttributes) Descriptor() ([]byte, []int) { - return fileDescriptor_edd9fae2af6b0532, []int{8} + return fileDescriptor_edd9fae2af6b0532, []int{9} } func (m *HistoryTaskAttributes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -895,7 +946,7 @@ type SyncWorkflowStateTaskAttributes struct { func (m *SyncWorkflowStateTaskAttributes) Reset() { *m = SyncWorkflowStateTaskAttributes{} } func (*SyncWorkflowStateTaskAttributes) ProtoMessage() {} func (*SyncWorkflowStateTaskAttributes) Descriptor() ([]byte, []int) { - return fileDescriptor_edd9fae2af6b0532, []int{9} + return fileDescriptor_edd9fae2af6b0532, []int{10} } func (m *SyncWorkflowStateTaskAttributes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -935,6 +986,7 @@ func init() { proto.RegisterType((*ReplicationTask)(nil), "temporal.server.api.replication.v1.ReplicationTask") proto.RegisterType((*ReplicationToken)(nil), "temporal.server.api.replication.v1.ReplicationToken") proto.RegisterType((*SyncShardStatus)(nil), "temporal.server.api.replication.v1.SyncShardStatus") + proto.RegisterType((*SyncReplicationState)(nil), "temporal.server.api.replication.v1.SyncReplicationState") proto.RegisterType((*ReplicationMessages)(nil), "temporal.server.api.replication.v1.ReplicationMessages") proto.RegisterType((*ReplicationTaskInfo)(nil), "temporal.server.api.replication.v1.ReplicationTaskInfo") proto.RegisterType((*NamespaceTaskAttributes)(nil), "temporal.server.api.replication.v1.NamespaceTaskAttributes") @@ -949,101 +1001,103 @@ func init() { } var fileDescriptor_edd9fae2af6b0532 = []byte{ - // 1497 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4f, 0x6f, 0x1b, 0x45, - 0x1b, 0xcf, 0xfa, 0x7f, 0xc6, 0x89, 0xe3, 0x4e, 0xde, 0xbc, 0x71, 0xfc, 0xaa, 0x9b, 0xd4, 0x6f, - 0x0b, 0x29, 0x54, 0xeb, 0x26, 0x39, 0xd0, 0x52, 0x04, 0x4a, 0x02, 0xa5, 0xae, 0xd4, 0x52, 0x6d, - 0xa3, 0x56, 0xe2, 0xb2, 0x8c, 0xbd, 0x63, 0x7b, 0x14, 0x7b, 0x77, 0x35, 0x33, 0x76, 0xf0, 0x0d, - 0xc1, 0x05, 0x21, 0x21, 0x55, 0xe2, 0x0b, 0x70, 0xe0, 0xc0, 0x89, 0xcf, 0xc1, 0xb1, 0xc7, 0xde, - 0x68, 0xdd, 0x0b, 0x37, 0xfa, 0x11, 0xd0, 0xcc, 0xce, 0xda, 0xbb, 0xde, 0x8d, 0xeb, 0x16, 0x71, - 0xf3, 0x3e, 0xf3, 0x7b, 0x7e, 0xcf, 0x33, 0xcf, 0x3c, 0x7f, 0x66, 0x0c, 0xae, 0x73, 0xdc, 0xf7, - 0x5c, 0x8a, 0x7a, 0x75, 0x86, 0xe9, 0x10, 0xd3, 0x3a, 0xf2, 0x48, 0x9d, 0x62, 0xaf, 0x47, 0x5a, - 0x88, 0x13, 0xd7, 0xa9, 0x0f, 0xf7, 0xea, 0x7d, 0xcc, 0x18, 0xea, 0x60, 0xc3, 0xa3, 0x2e, 0x77, - 0x61, 0x2d, 0xd0, 0x30, 0x7c, 0x0d, 0x03, 0x79, 0xc4, 0x08, 0x69, 0x18, 0xc3, 0xbd, 0xea, 0x76, - 0xc7, 0x75, 0x3b, 0x3d, 0x5c, 0x97, 0x1a, 0xcd, 0x41, 0xbb, 0xce, 0x49, 0x1f, 0x33, 0x8e, 0xfa, - 0x9e, 0x4f, 0x52, 0xbd, 0x64, 0x63, 0x0f, 0x3b, 0x36, 0x76, 0x5a, 0x04, 0xb3, 0x7a, 0xc7, 0xed, - 0xb8, 0x52, 0x2e, 0x7f, 0x29, 0x88, 0x91, 0xe4, 0x19, 0x76, 0x06, 0x7d, 0x26, 0x7c, 0x0a, 0x1b, - 0xf4, 0xf1, 0xef, 0xce, 0xc5, 0x73, 0xc4, 0x4e, 0x15, 0xf0, 0x5a, 0x12, 0xb0, 0x4b, 0x18, 0x77, - 0xe9, 0x28, 0xb6, 0xdd, 0xea, 0x27, 0x49, 0x68, 0x0f, 0x53, 0x46, 0x18, 0xc7, 0x4e, 0x0b, 0x0b, - 0x8d, 0x33, 0x97, 0x9e, 0xb6, 0x7b, 0xee, 0x99, 0xd5, 0x1f, 0x70, 0xd4, 0xec, 0x61, 0x8b, 0x71, - 0xc4, 0x03, 0x82, 0xcb, 0x13, 0x02, 0xa1, 0xd9, 0x72, 0xfb, 0xfd, 0x84, 0xa8, 0x86, 0xbc, 0x17, - 0x28, 0x07, 0xf5, 0x31, 0xf3, 0x90, 0xcf, 0x1e, 0x05, 0x5e, 0x8d, 0x00, 0xe7, 0x9d, 0x54, 0xf5, - 0x4a, 0x04, 0xda, 0x46, 0xa4, 0x37, 0xa0, 0x71, 0xc6, 0xda, 0xf7, 0x79, 0xb0, 0x66, 0x4e, 0x79, - 0x4e, 0x10, 0x3b, 0x85, 0xf7, 0xc1, 0xb2, 0x88, 0x98, 0xc5, 0x47, 0x1e, 0xae, 0x68, 0x3b, 0xda, - 0x6e, 0x69, 0x7f, 0xcf, 0x48, 0x3a, 0x78, 0x19, 0x60, 0x63, 0xb8, 0x67, 0xcc, 0x30, 0x9c, 0x8c, - 0x3c, 0x6c, 0x16, 0xb8, 0xfa, 0x05, 0x2f, 0x83, 0x12, 0x73, 0x07, 0xb4, 0x85, 0x2d, 0x49, 0x4b, - 0xec, 0x4a, 0x6a, 0x47, 0xdb, 0x4d, 0x9b, 0x2b, 0xbe, 0x54, 0x68, 0x34, 0x6c, 0x38, 0x02, 0x5b, - 0x93, 0x9d, 0xfb, 0x40, 0xc4, 0x39, 0x25, 0xcd, 0x01, 0xc7, 0xac, 0x92, 0xde, 0xd1, 0x76, 0x8b, - 0xfb, 0xb7, 0x8c, 0xd7, 0xa7, 0x9f, 0x71, 0x3f, 0x20, 0x11, 0xbc, 0x87, 0x13, 0x8a, 0x3b, 0x4b, - 0xe6, 0xa6, 0x93, 0xbc, 0x04, 0x7f, 0xd4, 0xc0, 0x25, 0x36, 0x72, 0x5a, 0x16, 0xeb, 0x22, 0x6a, - 0xcb, 0x03, 0x1c, 0xb0, 0x98, 0x0f, 0x59, 0xe9, 0xc3, 0xe1, 0x22, 0x3e, 0x3c, 0x1c, 0x39, 0xad, - 0x87, 0x82, 0xeb, 0xa1, 0xa4, 0x8a, 0x79, 0x72, 0x91, 0xcd, 0x03, 0xc0, 0xef, 0x34, 0x20, 0x11, - 0x16, 0x6a, 0x71, 0x32, 0x24, 0x7c, 0x14, 0xf3, 0x25, 0x27, 0x7d, 0xf9, 0x78, 0x51, 0x5f, 0x0e, - 0x15, 0x4f, 0xcc, 0x91, 0x2a, 0x3b, 0x77, 0x15, 0x32, 0xb0, 0xa9, 0x0a, 0x23, 0x66, 0xbe, 0x20, - 0xcd, 0xdf, 0x5c, 0xc4, 0xfc, 0x1d, 0x9f, 0x22, 0x66, 0x79, 0xa3, 0x9b, 0xb4, 0x00, 0x7f, 0xd2, - 0xc0, 0xff, 0xe5, 0xd6, 0x27, 0x65, 0x25, 0xcb, 0x29, 0xe6, 0x01, 0x90, 0x1e, 0x1c, 0x2f, 0x1a, - 0x80, 0xc7, 0x8a, 0x4d, 0x84, 0x3b, 0x9e, 0x18, 0xdb, 0x6c, 0x3e, 0x04, 0x36, 0xc0, 0xda, 0x90, - 0x30, 0xd2, 0x24, 0x3d, 0x79, 0x18, 0xa4, 0x8f, 0x2b, 0xcb, 0xd2, 0x81, 0xaa, 0xe1, 0x37, 0x3b, - 0x23, 0x68, 0x76, 0xc6, 0x49, 0xd0, 0xec, 0x8e, 0x32, 0x4f, 0xfe, 0xd8, 0xd6, 0xcc, 0xd2, 0x54, - 0x51, 0x2c, 0x1d, 0xad, 0x00, 0x30, 0xdd, 0xc6, 0xdd, 0x4c, 0x21, 0x53, 0xce, 0xde, 0xcd, 0x14, - 0xf2, 0xe5, 0x42, 0xed, 0x87, 0x14, 0x28, 0x87, 0x0b, 0xc9, 0x3d, 0xc5, 0x0e, 0xdc, 0x02, 0x05, - 0x3f, 0x29, 0x89, 0x2d, 0x4b, 0x31, 0x6b, 0xe6, 0xe5, 0x77, 0xc3, 0x86, 0x37, 0xc1, 0x56, 0x0f, - 0x31, 0x6e, 0x51, 0xcc, 0x29, 0xc1, 0x43, 0x6c, 0x5b, 0xaa, 0xb4, 0xa7, 0x15, 0xf6, 0x5f, 0x01, - 0x30, 0x83, 0xf5, 0x7b, 0xfe, 0x72, 0x48, 0xd5, 0xa3, 0x6e, 0x0b, 0x33, 0x16, 0x55, 0x4d, 0x4f, - 0x55, 0x1f, 0x04, 0xeb, 0x53, 0x55, 0x0c, 0xf4, 0x19, 0xd5, 0xd9, 0xc8, 0x64, 0x16, 0x8c, 0xcc, - 0xff, 0x22, 0x16, 0x1e, 0x45, 0xc2, 0x54, 0x3b, 0x01, 0x6b, 0x33, 0x45, 0x04, 0x0f, 0x41, 0x31, - 0xa8, 0x4c, 0x61, 0x46, 0x5b, 0xd0, 0x0c, 0xf0, 0x95, 0x24, 0xeb, 0x6f, 0x29, 0xb0, 0x1e, 0x0a, - 0xb1, 0xda, 0x15, 0x83, 0x5f, 0x81, 0x0b, 0xa1, 0xa4, 0x91, 0xc9, 0xc6, 0x2a, 0xda, 0x4e, 0x7a, - 0xb7, 0xb8, 0x7f, 0xb0, 0x48, 0x8a, 0xcd, 0xf4, 0x3f, 0xb3, 0x4c, 0xa3, 0x02, 0xf6, 0x4f, 0x0e, - 0x6b, 0x0b, 0x14, 0xba, 0x88, 0x59, 0x7d, 0x97, 0x62, 0x79, 0x36, 0x05, 0x33, 0xdf, 0x45, 0xec, - 0x9e, 0x4b, 0x31, 0xb4, 0xc0, 0x85, 0x58, 0xdf, 0x52, 0xf1, 0x3f, 0x78, 0x8b, 0x3e, 0x65, 0xae, - 0xcd, 0xf4, 0xa5, 0xda, 0xf3, 0x68, 0xc0, 0x64, 0xab, 0x76, 0xda, 0x2e, 0xbc, 0x04, 0x56, 0xa6, - 0xcd, 0x5a, 0xa5, 0xe6, 0xb2, 0x59, 0x9c, 0xc8, 0x1a, 0x36, 0xdc, 0x06, 0xc5, 0x49, 0x0d, 0xab, - 0x3d, 0x2e, 0x9b, 0x20, 0x10, 0x35, 0x6c, 0xb8, 0x01, 0x72, 0x74, 0xe0, 0x04, 0x19, 0xb7, 0x6c, - 0x66, 0xe9, 0xc0, 0x69, 0xd8, 0xf0, 0x38, 0x3c, 0x7d, 0x32, 0x72, 0xfa, 0xbc, 0x33, 0x7f, 0xfa, - 0x24, 0x8c, 0x9c, 0x4d, 0x90, 0x0f, 0x66, 0x4d, 0x56, 0x06, 0x37, 0xc7, 0xfd, 0x29, 0x53, 0x01, - 0xf9, 0xa1, 0x98, 0xdf, 0xae, 0x23, 0x7b, 0x68, 0xda, 0x0c, 0x3e, 0xc5, 0x94, 0x6a, 0x13, 0xca, - 0xb8, 0x85, 0x87, 0xd8, 0xe1, 0x42, 0x33, 0xef, 0x4f, 0x29, 0x29, 0xfd, 0x4c, 0x08, 0x1b, 0x36, - 0xac, 0x81, 0x55, 0x07, 0x7f, 0x1d, 0x02, 0x15, 0x24, 0xa8, 0x28, 0x84, 0x01, 0xe6, 0x1a, 0x80, - 0xac, 0xd5, 0xc5, 0xf6, 0xa0, 0x87, 0xed, 0x29, 0x70, 0x59, 0x02, 0xcb, 0x93, 0x15, 0x85, 0xae, - 0xfd, 0x9c, 0x01, 0x9b, 0xe7, 0xcc, 0x2c, 0x88, 0xc0, 0xfa, 0x34, 0xcc, 0xae, 0x87, 0xa9, 0x3c, - 0x05, 0x35, 0x93, 0xaf, 0xcf, 0x8f, 0xca, 0x84, 0xf3, 0x8b, 0x40, 0xcf, 0x84, 0x4e, 0x4c, 0x06, - 0x4b, 0x20, 0x35, 0x39, 0x9d, 0x14, 0xb1, 0xe1, 0x47, 0x20, 0x43, 0x9c, 0xb6, 0xab, 0x26, 0xee, - 0xee, 0xd4, 0x86, 0x20, 0x9f, 0xe8, 0x47, 0x0c, 0x88, 0x8c, 0x30, 0xa5, 0x16, 0x3c, 0x02, 0xb9, - 0x96, 0xeb, 0xb4, 0x49, 0x47, 0x65, 0xe1, 0x7b, 0x8b, 0xe8, 0x1f, 0x4b, 0x0d, 0x53, 0x69, 0xc2, - 0x36, 0x80, 0xe1, 0x62, 0x54, 0x7c, 0xfe, 0xf4, 0xfd, 0x20, 0xca, 0x77, 0xde, 0xe8, 0x0f, 0xa5, - 0xac, 0x22, 0x0f, 0xd7, 0xb7, 0x2f, 0x82, 0x57, 0x40, 0xc9, 0xe7, 0xb6, 0xa2, 0x19, 0xb1, 0xea, - 0x4b, 0x1f, 0xa9, 0xbc, 0xb8, 0x0a, 0xca, 0xe2, 0xf6, 0xe4, 0x0e, 0x31, 0x9d, 0x00, 0xfd, 0xcc, - 0x58, 0x0b, 0xe4, 0x01, 0xf4, 0x51, 0x08, 0xaa, 0xc6, 0x5b, 0xa5, 0x20, 0xbb, 0xc8, 0xfb, 0x73, - 0xfd, 0xbe, 0xad, 0x94, 0x82, 0x2a, 0x0c, 0x48, 0xd4, 0xec, 0xac, 0xfd, 0xa2, 0x81, 0x8b, 0x73, - 0xaf, 0x14, 0x62, 0x2f, 0xea, 0x8a, 0xd5, 0xea, 0x0d, 0x18, 0xc7, 0x54, 0x55, 0xe4, 0xaa, 0x2f, - 0x3d, 0xf6, 0x85, 0x91, 0x69, 0x92, 0x8a, 0x4e, 0x93, 0x99, 0xee, 0x9a, 0x7e, 0x8b, 0xee, 0xfa, - 0x57, 0x16, 0x54, 0xcf, 0xbf, 0x6d, 0xfc, 0x9b, 0x3d, 0x23, 0x54, 0xd5, 0x99, 0x68, 0x55, 0x27, - 0xd7, 0x62, 0x36, 0xb9, 0x16, 0xe1, 0xe7, 0xa0, 0x34, 0x45, 0xcb, 0x38, 0xe4, 0x16, 0x8c, 0xc3, - 0xea, 0x44, 0x4f, 0xac, 0xc0, 0x5d, 0x50, 0x66, 0x1c, 0x51, 0x1e, 0x36, 0xea, 0x27, 0x4d, 0x49, - 0xc9, 0x03, 0x93, 0xc7, 0x60, 0x25, 0x40, 0x4a, 0x83, 0x85, 0x05, 0x0d, 0x16, 0x95, 0x96, 0x34, - 0xf7, 0x00, 0xac, 0xcb, 0xe9, 0xd2, 0xc5, 0x88, 0xf2, 0x26, 0x46, 0xfc, 0xcd, 0xee, 0x28, 0x17, - 0x84, 0xf2, 0x9d, 0x40, 0x57, 0x32, 0x7e, 0x08, 0xf2, 0x36, 0xe6, 0x88, 0xf4, 0x82, 0xab, 0xd6, - 0x4e, 0x34, 0x83, 0xfd, 0xa7, 0x8c, 0x48, 0xde, 0x07, 0x68, 0xd4, 0x73, 0x91, 0xcd, 0xcc, 0x40, - 0x41, 0x9c, 0x06, 0xe2, 0x02, 0xcd, 0x2b, 0x45, 0x3f, 0xc9, 0xd4, 0xa7, 0xd8, 0xac, 0xf4, 0x53, - 0x3d, 0x47, 0x2a, 0x2b, 0x49, 0xd4, 0x6a, 0x31, 0x28, 0x8c, 0x01, 0xc5, 0x66, 0x51, 0x68, 0xa9, - 0x0f, 0x78, 0x1d, 0xfc, 0x47, 0x92, 0x88, 0xb4, 0xc0, 0xd4, 0x22, 0x36, 0x76, 0x38, 0xe1, 0xa3, - 0xca, 0xaa, 0xcc, 0x08, 0x28, 0xd6, 0x1e, 0xcb, 0xa5, 0x86, 0x5a, 0x81, 0x8f, 0xc1, 0x9a, 0xca, - 0x87, 0x49, 0x59, 0x96, 0xa4, 0x65, 0x23, 0xb1, 0x85, 0x2a, 0x8c, 0x70, 0x40, 0x55, 0xb6, 0x2a, - 0x44, 0xb3, 0x34, 0x8c, 0x7c, 0xd7, 0xc6, 0x29, 0xb0, 0x91, 0x78, 0xc1, 0x8d, 0x25, 0x7b, 0xea, - 0xb5, 0xc9, 0x9e, 0x9e, 0x93, 0xec, 0x99, 0x70, 0xb2, 0xb7, 0xc1, 0xc6, 0xcc, 0x6e, 0x2c, 0xc2, - 0x71, 0x5f, 0x3c, 0x50, 0x44, 0xab, 0xd9, 0x7f, 0xb3, 0x3d, 0x35, 0x38, 0xee, 0x9b, 0xeb, 0xc3, - 0x98, 0x8c, 0xc1, 0x1b, 0x20, 0x27, 0x73, 0x37, 0x78, 0x6d, 0x9c, 0x9b, 0x01, 0x9f, 0x22, 0x8e, - 0x8e, 0x7a, 0x6e, 0xd3, 0x54, 0x78, 0x78, 0x1b, 0x94, 0x1c, 0x7c, 0x66, 0x09, 0xe7, 0x15, 0x43, - 0x7e, 0x41, 0x86, 0x15, 0x07, 0x9f, 0x99, 0x03, 0x47, 0x16, 0x87, 0xb8, 0x1d, 0x6b, 0xe5, 0x54, - 0xed, 0x5b, 0x0d, 0x6c, 0xbf, 0xe6, 0x0e, 0x0f, 0x2d, 0x50, 0x8a, 0x3e, 0x18, 0xd4, 0xf5, 0xf0, - 0x46, 0x62, 0x30, 0x42, 0x2f, 0x78, 0x61, 0x3d, 0x20, 0xbe, 0xe7, 0x3f, 0xe0, 0x25, 0xbf, 0xb9, - 0x7a, 0x16, 0x36, 0x77, 0x44, 0x9e, 0xbe, 0xd0, 0x97, 0x9e, 0xbd, 0xd0, 0x97, 0x5e, 0xbd, 0xd0, - 0xb5, 0x6f, 0xc6, 0xba, 0xf6, 0xeb, 0x58, 0xd7, 0x7e, 0x1f, 0xeb, 0xda, 0xd3, 0xb1, 0xae, 0x3d, - 0x1f, 0xeb, 0xda, 0x9f, 0x63, 0x7d, 0xe9, 0xd5, 0x58, 0xd7, 0x9e, 0xbc, 0xd4, 0x97, 0x9e, 0xbe, - 0xd4, 0x97, 0x9e, 0xbd, 0xd4, 0x97, 0xbe, 0x3c, 0xe8, 0xb8, 0x53, 0x07, 0x88, 0x7b, 0xfe, 0xdf, - 0x2c, 0xb7, 0x28, 0xf6, 0xd4, 0x57, 0x33, 0x27, 0xeb, 0xf4, 0xe0, 0xef, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xef, 0x7f, 0xb9, 0xb1, 0x9e, 0x11, 0x00, 0x00, + // 1531 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x41, 0x6f, 0x1b, 0xc5, + 0x17, 0xcf, 0x3a, 0x4e, 0xec, 0x3c, 0x27, 0x8e, 0x3b, 0x69, 0xfe, 0x71, 0x52, 0xd5, 0x49, 0xfd, + 0x6f, 0x21, 0x85, 0x6a, 0xdd, 0x24, 0x07, 0x5a, 0x8a, 0x40, 0x49, 0xa0, 0xd4, 0x95, 0x5a, 0xaa, + 0x6d, 0xd4, 0x4a, 0x5c, 0x96, 0x89, 0x77, 0x9c, 0x8c, 0x62, 0xef, 0xae, 0x66, 0xc6, 0x0e, 0xbe, + 0x21, 0xb8, 0x20, 0x24, 0xa4, 0x4a, 0x7c, 0x01, 0x0e, 0x1c, 0x38, 0x71, 0xe0, 0x53, 0x70, 0xec, + 0xb1, 0x37, 0x5a, 0xf7, 0xc2, 0x8d, 0x7e, 0x04, 0x34, 0xb3, 0xb3, 0xf6, 0xae, 0x77, 0xe3, 0xba, + 0x45, 0xdc, 0xbc, 0x6f, 0x7e, 0xbf, 0xdf, 0x7b, 0xfb, 0xe6, 0xbd, 0x79, 0xb3, 0x86, 0xeb, 0x82, + 0xb4, 0x7d, 0x8f, 0xe1, 0x56, 0x8d, 0x13, 0xd6, 0x25, 0xac, 0x86, 0x7d, 0x5a, 0x63, 0xc4, 0x6f, + 0xd1, 0x06, 0x16, 0xd4, 0x73, 0x6b, 0xdd, 0xad, 0x5a, 0x9b, 0x70, 0x8e, 0x8f, 0x88, 0xe9, 0x33, + 0x4f, 0x78, 0xa8, 0x1a, 0x32, 0xcc, 0x80, 0x61, 0x62, 0x9f, 0x9a, 0x11, 0x86, 0xd9, 0xdd, 0x5a, + 0x5b, 0x3f, 0xf2, 0xbc, 0xa3, 0x16, 0xa9, 0x29, 0xc6, 0x61, 0xa7, 0x59, 0x13, 0xb4, 0x4d, 0xb8, + 0xc0, 0x6d, 0x3f, 0x10, 0x59, 0xbb, 0xe4, 0x10, 0x9f, 0xb8, 0x0e, 0x71, 0x1b, 0x94, 0xf0, 0xda, + 0x91, 0x77, 0xe4, 0x29, 0xbb, 0xfa, 0xa5, 0x21, 0x66, 0x5a, 0x64, 0xc4, 0xed, 0xb4, 0xb9, 0x8c, + 0x29, 0xea, 0x30, 0xc0, 0xbf, 0x3b, 0x16, 0x2f, 0x30, 0x3f, 0xd1, 0xc0, 0x6b, 0x69, 0xc0, 0x63, + 0xca, 0x85, 0xc7, 0x7a, 0x89, 0xd7, 0x5d, 0xfb, 0x24, 0x0d, 0xed, 0x13, 0xc6, 0x29, 0x17, 0xc4, + 0x6d, 0x10, 0xc9, 0x38, 0xf5, 0xd8, 0x49, 0xb3, 0xe5, 0x9d, 0xda, 0xed, 0x8e, 0xc0, 0x87, 0x2d, + 0x62, 0x73, 0x81, 0x45, 0x28, 0x70, 0x79, 0x20, 0x20, 0x99, 0x0d, 0xaf, 0xdd, 0x4e, 0xc9, 0x6a, + 0x24, 0x7a, 0x89, 0x72, 0x71, 0x9b, 0x70, 0x1f, 0x07, 0xea, 0x71, 0xe0, 0xd5, 0x18, 0x70, 0xdc, + 0x4e, 0xad, 0x5d, 0x89, 0x41, 0x9b, 0x98, 0xb6, 0x3a, 0x2c, 0xa9, 0x58, 0xfd, 0x3e, 0x07, 0x8b, + 0xd6, 0x50, 0xe7, 0x00, 0xf3, 0x13, 0x74, 0x1f, 0xe6, 0x64, 0xc6, 0x6c, 0xd1, 0xf3, 0x49, 0xd9, + 0xd8, 0x30, 0x36, 0x8b, 0xdb, 0x5b, 0x66, 0xda, 0xc6, 0xab, 0x04, 0x9b, 0xdd, 0x2d, 0x73, 0x44, + 0xe1, 0xa0, 0xe7, 0x13, 0x2b, 0x2f, 0xf4, 0x2f, 0x74, 0x19, 0x8a, 0xdc, 0xeb, 0xb0, 0x06, 0xb1, + 0x95, 0x2c, 0x75, 0xca, 0x99, 0x0d, 0x63, 0x73, 0xda, 0x9a, 0x0f, 0xac, 0x92, 0x51, 0x77, 0x50, + 0x0f, 0x56, 0x07, 0x6f, 0x1e, 0x00, 0xb1, 0x10, 0x8c, 0x1e, 0x76, 0x04, 0xe1, 0xe5, 0xe9, 0x0d, + 0x63, 0xb3, 0xb0, 0x7d, 0xcb, 0x7c, 0x7d, 0xf9, 0x99, 0xf7, 0x43, 0x11, 0xa9, 0xbb, 0x3b, 0x90, + 0xb8, 0x33, 0x65, 0xad, 0xb8, 0xe9, 0x4b, 0xe8, 0x47, 0x03, 0x2e, 0xf1, 0x9e, 0xdb, 0xb0, 0xf9, + 0x31, 0x66, 0x8e, 0xda, 0xc0, 0x0e, 0x4f, 0xc4, 0x30, 0xa3, 0x62, 0xd8, 0x9d, 0x24, 0x86, 0x87, + 0x3d, 0xb7, 0xf1, 0x50, 0x6a, 0x3d, 0x54, 0x52, 0x89, 0x48, 0x2e, 0xf2, 0x71, 0x00, 0xf4, 0x9d, + 0x01, 0x0a, 0x61, 0xe3, 0x86, 0xa0, 0x5d, 0x2a, 0x7a, 0x89, 0x58, 0x66, 0x55, 0x2c, 0x1f, 0x4f, + 0x1a, 0xcb, 0xae, 0xd6, 0x49, 0x04, 0xb2, 0xc6, 0xcf, 0x5c, 0x45, 0x1c, 0x56, 0x74, 0x63, 0x24, + 0xdc, 0xe7, 0x95, 0xfb, 0x9b, 0x93, 0xb8, 0xbf, 0x13, 0x48, 0x24, 0x3c, 0x2f, 0x1f, 0xa7, 0x2d, + 0xa0, 0x9f, 0x0c, 0xf8, 0xbf, 0x7a, 0xf5, 0x41, 0x5b, 0xa9, 0x76, 0x4a, 0x44, 0x00, 0x2a, 0x82, + 0xfd, 0x49, 0x13, 0xf0, 0x58, 0xab, 0xc9, 0x74, 0x27, 0x0b, 0x63, 0x9d, 0x8f, 0x87, 0xa0, 0x3a, + 0x2c, 0x76, 0x29, 0xa7, 0x87, 0xb4, 0xa5, 0x36, 0x83, 0xb6, 0x49, 0x79, 0x4e, 0x05, 0xb0, 0x66, + 0x06, 0x87, 0x9d, 0x19, 0x1e, 0x76, 0xe6, 0x41, 0x78, 0xd8, 0xed, 0x65, 0x9f, 0xfc, 0xb9, 0x6e, + 0x58, 0xc5, 0x21, 0x51, 0x2e, 0xed, 0xcd, 0x03, 0x0c, 0x5f, 0xe3, 0x6e, 0x36, 0x9f, 0x2d, 0xcd, + 0xdc, 0xcd, 0xe6, 0x73, 0xa5, 0x7c, 0xf5, 0x87, 0x0c, 0x94, 0xa2, 0x8d, 0xe4, 0x9d, 0x10, 0x17, + 0xad, 0x42, 0x3e, 0x28, 0x4a, 0xea, 0xa8, 0x56, 0x9c, 0xb1, 0x72, 0xea, 0xb9, 0xee, 0xa0, 0x9b, + 0xb0, 0xda, 0xc2, 0x5c, 0xd8, 0x8c, 0x08, 0x46, 0x49, 0x97, 0x38, 0xb6, 0x6e, 0xed, 0x61, 0x87, + 0xfd, 0x4f, 0x02, 0xac, 0x70, 0xfd, 0x5e, 0xb0, 0x1c, 0xa1, 0xfa, 0xcc, 0x6b, 0x10, 0xce, 0xe3, + 0xd4, 0xe9, 0x21, 0xf5, 0x41, 0xb8, 0x3e, 0xa4, 0x12, 0xa8, 0x8c, 0x50, 0x47, 0x33, 0x93, 0x9d, + 0x30, 0x33, 0x17, 0x62, 0x1e, 0x1e, 0xc5, 0xd2, 0x54, 0x3d, 0x80, 0xc5, 0x91, 0x26, 0x42, 0xbb, + 0x50, 0x08, 0x3b, 0x53, 0xba, 0x31, 0x26, 0x74, 0x03, 0x01, 0x49, 0xa9, 0xfe, 0x6e, 0xc0, 0x79, + 0x29, 0x1b, 0x49, 0xb3, 0xda, 0xee, 0xf1, 0x09, 0x31, 0xc6, 0x26, 0xc4, 0x86, 0x0b, 0x67, 0x50, + 0x55, 0x98, 0x99, 0x09, 0xc3, 0x2c, 0xa7, 0xc9, 0xab, 0xa0, 0x7f, 0xcb, 0xc0, 0x52, 0x24, 0x60, + 0xbd, 0xc4, 0xd1, 0x57, 0x70, 0x2e, 0x52, 0xe9, 0xaa, 0x43, 0x78, 0xd9, 0xd8, 0x98, 0xde, 0x2c, + 0x6c, 0xef, 0x4c, 0xd2, 0x17, 0x23, 0x87, 0xb6, 0x55, 0x62, 0x71, 0x03, 0xff, 0x37, 0x15, 0xb6, + 0x0a, 0xf9, 0x63, 0xcc, 0xed, 0xb6, 0xc7, 0x88, 0x2a, 0xa8, 0xbc, 0x95, 0x3b, 0xc6, 0xfc, 0x9e, + 0xc7, 0x08, 0xb2, 0xe1, 0x5c, 0xe2, 0xb0, 0xd5, 0x45, 0xb3, 0xf3, 0x16, 0x87, 0xab, 0xb5, 0x38, + 0x72, 0x98, 0x56, 0x9f, 0xc7, 0x13, 0xa6, 0xe6, 0x8b, 0xdb, 0xf4, 0xd0, 0x25, 0x98, 0x1f, 0x4e, + 0x18, 0xbd, 0xaf, 0x73, 0x56, 0x61, 0x60, 0xab, 0x3b, 0x68, 0x1d, 0x0a, 0x83, 0x83, 0x47, 0xbf, + 0xe3, 0x9c, 0x05, 0xa1, 0xa9, 0xee, 0xa0, 0x65, 0x98, 0x65, 0x1d, 0x37, 0x6c, 0x93, 0x39, 0x6b, + 0x86, 0x75, 0xdc, 0xba, 0x83, 0xf6, 0xa3, 0x23, 0x33, 0xab, 0x46, 0xe6, 0x3b, 0xe3, 0x47, 0x66, + 0xca, 0x9c, 0x5c, 0x81, 0x5c, 0x38, 0x20, 0x67, 0x54, 0x72, 0x67, 0x45, 0x30, 0x1a, 0xcb, 0x90, + 0xeb, 0xca, 0x4b, 0x87, 0xe7, 0xaa, 0x83, 0x7f, 0xda, 0x0a, 0x1f, 0xe5, 0x68, 0x6d, 0x52, 0xc6, + 0x85, 0x4d, 0xba, 0xc4, 0x15, 0x92, 0x99, 0x0b, 0x46, 0xab, 0xb2, 0x7e, 0x26, 0x8d, 0x75, 0x07, + 0x55, 0x61, 0xc1, 0x25, 0x5f, 0x47, 0x40, 0x79, 0x05, 0x2a, 0x48, 0x63, 0x88, 0xb9, 0x06, 0x88, + 0x37, 0x8e, 0x89, 0xd3, 0x69, 0x11, 0x67, 0x08, 0x9c, 0x53, 0xc0, 0xd2, 0x60, 0x45, 0xa3, 0xab, + 0x3f, 0x67, 0x61, 0xe5, 0x8c, 0x41, 0x8b, 0x30, 0x2c, 0x0d, 0xd3, 0xec, 0xf9, 0x84, 0xa9, 0x5d, + 0xd0, 0x17, 0x89, 0xeb, 0xe3, 0xb3, 0x32, 0xd0, 0xfc, 0x22, 0xe4, 0x59, 0xc8, 0x4d, 0xd8, 0x50, + 0x11, 0x32, 0x83, 0xdd, 0xc9, 0x50, 0x07, 0x7d, 0x04, 0x59, 0xea, 0x36, 0x3d, 0x7d, 0x4d, 0xd8, + 0x1c, 0xfa, 0x90, 0xe2, 0x03, 0x7e, 0xcc, 0x81, 0xac, 0x08, 0x4b, 0xb1, 0xd0, 0x1e, 0xcc, 0x36, + 0x3c, 0xb7, 0x49, 0x8f, 0x74, 0x15, 0xbe, 0x37, 0x09, 0x7f, 0x5f, 0x31, 0x2c, 0xcd, 0x44, 0x4d, + 0x40, 0xd1, 0x66, 0xd4, 0x7a, 0xc1, 0x95, 0xe1, 0x83, 0xb8, 0xde, 0x59, 0xf7, 0x95, 0x48, 0xc9, + 0x6a, 0xf1, 0x68, 0x7f, 0x07, 0x26, 0x74, 0x05, 0x8a, 0x81, 0xb6, 0x1d, 0xaf, 0x88, 0x85, 0xc0, + 0xfa, 0x48, 0xd7, 0xc5, 0x55, 0x28, 0xc9, 0x2b, 0x9f, 0xd7, 0x25, 0x6c, 0x00, 0x0c, 0x2a, 0x63, + 0x31, 0xb4, 0x87, 0xd0, 0x47, 0x11, 0xa8, 0x9e, 0xc9, 0xe5, 0xbc, 0x3a, 0x45, 0xde, 0x1f, 0x1b, + 0xf7, 0x6d, 0x4d, 0x0a, 0xbb, 0x30, 0x14, 0xd1, 0x03, 0xbf, 0xfa, 0x8b, 0x01, 0x17, 0xc7, 0xde, + 0x83, 0xe4, 0xbb, 0xe8, 0x7b, 0x61, 0xa3, 0xd5, 0xe1, 0x82, 0x30, 0xdd, 0x91, 0x0b, 0x81, 0x75, + 0x3f, 0x30, 0xc6, 0x46, 0x60, 0x26, 0x3e, 0x02, 0x47, 0x46, 0xc2, 0xf4, 0x5b, 0x8c, 0x84, 0xbf, + 0x67, 0x60, 0xed, 0xec, 0x2b, 0xd2, 0x7f, 0x79, 0x66, 0x44, 0xba, 0x3a, 0x1b, 0xef, 0xea, 0xf4, + 0x5e, 0x9c, 0x49, 0xef, 0x45, 0xf4, 0x39, 0x14, 0x87, 0x68, 0x95, 0x87, 0xd9, 0x09, 0xf3, 0xb0, + 0x30, 0xe0, 0xc9, 0x15, 0xb4, 0x09, 0x25, 0x2e, 0x30, 0x13, 0x51, 0xa7, 0x41, 0xd1, 0x14, 0xb5, + 0x3d, 0x74, 0xb9, 0x0f, 0xf3, 0x21, 0x52, 0x39, 0xcc, 0x4f, 0xe8, 0xb0, 0xa0, 0x59, 0xca, 0xdd, + 0x03, 0x58, 0x52, 0xd3, 0xe5, 0x98, 0x60, 0x26, 0x0e, 0x09, 0x16, 0x6f, 0x76, 0xb1, 0x3a, 0x27, + 0xc9, 0x77, 0x42, 0xae, 0x52, 0xfc, 0x10, 0x72, 0x0e, 0x11, 0x98, 0xb6, 0xc2, 0xfb, 0xe1, 0x46, + 0xbc, 0x82, 0x83, 0xef, 0x2f, 0x59, 0xbc, 0x0f, 0x70, 0xaf, 0xe5, 0x61, 0x87, 0x5b, 0x21, 0x41, + 0xee, 0x06, 0x16, 0x12, 0x2d, 0xca, 0x85, 0xa0, 0xc8, 0xf4, 0xa3, 0x7c, 0x59, 0x15, 0xa7, 0xfe, + 0x86, 0x2a, 0xcf, 0xa7, 0x49, 0xeb, 0xc5, 0xb0, 0x31, 0x3a, 0x8c, 0x58, 0x05, 0xc9, 0xd2, 0x0f, + 0xe8, 0x3a, 0x9c, 0x57, 0x22, 0xb2, 0x2c, 0x08, 0xb3, 0xa9, 0x43, 0x5c, 0x41, 0x45, 0xaf, 0xbc, + 0xa0, 0x2a, 0x02, 0xc9, 0xb5, 0xc7, 0x6a, 0xa9, 0xae, 0x57, 0xd0, 0x63, 0x58, 0xd4, 0xf5, 0x30, + 0x68, 0xcb, 0xa2, 0xf2, 0x6c, 0xa6, 0x1e, 0xa1, 0x1a, 0x23, 0x03, 0xd0, 0x9d, 0xad, 0x1b, 0xd1, + 0x2a, 0x76, 0x63, 0xcf, 0xd5, 0x7e, 0x06, 0x96, 0x53, 0x6f, 0xe5, 0x89, 0x62, 0xcf, 0xbc, 0xb6, + 0xd8, 0xa7, 0xc7, 0x14, 0x7b, 0x36, 0x5a, 0xec, 0x4d, 0x58, 0x1e, 0x79, 0x1b, 0x9b, 0x0a, 0xd2, + 0x96, 0x5f, 0x55, 0xf2, 0xa8, 0xd9, 0x7e, 0xb3, 0x77, 0xaa, 0x0b, 0xd2, 0xb6, 0x96, 0xba, 0x09, + 0x1b, 0x47, 0x37, 0x60, 0x56, 0xd5, 0x6e, 0xf8, 0x89, 0x74, 0x66, 0x05, 0x7c, 0x8a, 0x05, 0xde, + 0x6b, 0x79, 0x87, 0x96, 0xc6, 0xa3, 0xdb, 0x50, 0x74, 0xc9, 0xa9, 0x2d, 0x83, 0xd7, 0x0a, 0xb9, + 0x09, 0x15, 0xe6, 0x5d, 0x72, 0x6a, 0x75, 0x5c, 0xd5, 0x1c, 0xf2, 0x4a, 0x6f, 0x94, 0x32, 0xd5, + 0x6f, 0x0d, 0x58, 0x7f, 0xcd, 0x87, 0x07, 0xb2, 0xa1, 0x18, 0xff, 0xca, 0xd1, 0x77, 0xda, 0x1b, + 0xa9, 0xc9, 0x88, 0xfc, 0xed, 0x20, 0xbd, 0x87, 0xc2, 0xf7, 0x82, 0x7f, 0x1d, 0x94, 0xbe, 0xb5, + 0x70, 0x1a, 0x75, 0xb7, 0x47, 0x9f, 0xbe, 0xa8, 0x4c, 0x3d, 0x7b, 0x51, 0x99, 0x7a, 0xf5, 0xa2, + 0x62, 0x7c, 0xd3, 0xaf, 0x18, 0xbf, 0xf6, 0x2b, 0xc6, 0x1f, 0xfd, 0x8a, 0xf1, 0xb4, 0x5f, 0x31, + 0x9e, 0xf7, 0x2b, 0xc6, 0x5f, 0xfd, 0xca, 0xd4, 0xab, 0x7e, 0xc5, 0x78, 0xf2, 0xb2, 0x32, 0xf5, + 0xf4, 0x65, 0x65, 0xea, 0xd9, 0xcb, 0xca, 0xd4, 0x97, 0x3b, 0x47, 0xde, 0x30, 0x00, 0xea, 0x9d, + 0xfd, 0xdf, 0xd0, 0x2d, 0x46, 0x7c, 0xfd, 0x74, 0x38, 0xab, 0xfa, 0x74, 0xe7, 0x9f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x50, 0x14, 0xae, 0x9d, 0x53, 0x12, 0x00, 0x00, } func (this *ReplicationTask) Equal(that interface{}) bool { @@ -1274,6 +1328,37 @@ func (this *SyncShardStatus) Equal(that interface{}) bool { } return true } +func (this *SyncReplicationState) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*SyncReplicationState) + if !ok { + that2, ok := that.(SyncReplicationState) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.LastProcessedMessageId != that1.LastProcessedMessageId { + return false + } + if that1.LastProcessedMessageTime == nil { + if this.LastProcessedMessageTime != nil { + return false + } + } else if !this.LastProcessedMessageTime.Equal(*that1.LastProcessedMessageTime) { + return false + } + return true +} func (this *ReplicationMessages) Equal(that interface{}) bool { if that == nil { return this == nil @@ -1665,6 +1750,17 @@ func (this *SyncShardStatus) GoString() string { s = append(s, "}") return strings.Join(s, "") } +func (this *SyncReplicationState) GoString() string { + if this == nil { + return "nil" + } + s := make([]string, 0, 6) + s = append(s, "&repication.SyncReplicationState{") + s = append(s, "LastProcessedMessageId: "+fmt.Sprintf("%#v", this.LastProcessedMessageId)+",\n") + s = append(s, "LastProcessedMessageTime: "+fmt.Sprintf("%#v", this.LastProcessedMessageTime)+",\n") + s = append(s, "}") + return strings.Join(s, "") +} func (this *ReplicationMessages) GoString() string { if this == nil { return "nil" @@ -2045,6 +2141,44 @@ func (m *SyncShardStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *SyncReplicationState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SyncReplicationState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SyncReplicationState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastProcessedMessageTime != nil { + n9, err9 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastProcessedMessageTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastProcessedMessageTime):]) + if err9 != nil { + return 0, err9 + } + i -= n9 + i = encodeVarintMessage(dAtA, i, uint64(n9)) + i-- + dAtA[i] = 0x12 + } + if m.LastProcessedMessageId != 0 { + i = encodeVarintMessage(dAtA, i, uint64(m.LastProcessedMessageId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *ReplicationMessages) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2299,12 +2433,12 @@ func (m *SyncShardStatusTaskAttributes) MarshalToSizedBuffer(dAtA []byte) (int, var l int _ = l if m.StatusTime != nil { - n13, err13 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.StatusTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.StatusTime):]) - if err13 != nil { - return 0, err13 + n14, err14 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.StatusTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.StatusTime):]) + if err14 != nil { + return 0, err14 } - i -= n13 - i = encodeVarintMessage(dAtA, i, uint64(n13)) + i -= n14 + i = encodeVarintMessage(dAtA, i, uint64(n14)) i-- dAtA[i] = 0x1a } @@ -2392,22 +2526,22 @@ func (m *SyncActivityTaskAttributes) MarshalToSizedBuffer(dAtA []byte) (int, err dAtA[i] = 0x52 } if m.LastHeartbeatTime != nil { - n17, err17 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastHeartbeatTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastHeartbeatTime):]) - if err17 != nil { - return 0, err17 + n18, err18 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastHeartbeatTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastHeartbeatTime):]) + if err18 != nil { + return 0, err18 } - i -= n17 - i = encodeVarintMessage(dAtA, i, uint64(n17)) + i -= n18 + i = encodeVarintMessage(dAtA, i, uint64(n18)) i-- dAtA[i] = 0x4a } if m.StartedTime != nil { - n18, err18 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.StartedTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.StartedTime):]) - if err18 != nil { - return 0, err18 + n19, err19 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.StartedTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.StartedTime):]) + if err19 != nil { + return 0, err19 } - i -= n18 - i = encodeVarintMessage(dAtA, i, uint64(n18)) + i -= n19 + i = encodeVarintMessage(dAtA, i, uint64(n19)) i-- dAtA[i] = 0x42 } @@ -2417,12 +2551,12 @@ func (m *SyncActivityTaskAttributes) MarshalToSizedBuffer(dAtA []byte) (int, err dAtA[i] = 0x38 } if m.ScheduledTime != nil { - n19, err19 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ScheduledTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ScheduledTime):]) - if err19 != nil { - return 0, err19 + n20, err20 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ScheduledTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ScheduledTime):]) + if err20 != nil { + return 0, err20 } - i -= n19 - i = encodeVarintMessage(dAtA, i, uint64(n19)) + i -= n20 + i = encodeVarintMessage(dAtA, i, uint64(n20)) i-- dAtA[i] = 0x32 } @@ -2705,6 +2839,22 @@ func (m *SyncShardStatus) Size() (n int) { return n } +func (m *SyncReplicationState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.LastProcessedMessageId != 0 { + n += 1 + sovMessage(uint64(m.LastProcessedMessageId)) + } + if m.LastProcessedMessageTime != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastProcessedMessageTime) + n += 1 + l + sovMessage(uint64(l)) + } + return n +} + func (m *ReplicationMessages) Size() (n int) { if m == nil { return 0 @@ -3030,6 +3180,17 @@ func (this *SyncShardStatus) String() string { }, "") return s } +func (this *SyncReplicationState) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SyncReplicationState{`, + `LastProcessedMessageId:` + fmt.Sprintf("%v", this.LastProcessedMessageId) + `,`, + `LastProcessedMessageTime:` + strings.Replace(fmt.Sprintf("%v", this.LastProcessedMessageTime), "Timestamp", "types.Timestamp", 1) + `,`, + `}`, + }, "") + return s +} func (this *ReplicationMessages) String() string { if this == nil { return "nil" @@ -3698,6 +3859,114 @@ func (m *SyncShardStatus) Unmarshal(dAtA []byte) error { } return nil } +func (m *SyncReplicationState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMessage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SyncReplicationState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SyncReplicationState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastProcessedMessageId", wireType) + } + m.LastProcessedMessageId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMessage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastProcessedMessageId |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastProcessedMessageTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMessage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthMessage + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthMessage + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastProcessedMessageTime == nil { + m.LastProcessedMessageTime = new(time.Time) + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.LastProcessedMessageTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipMessage(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthMessage + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthMessage + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ReplicationMessages) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/client/admin/client.go b/client/admin/client.go index a484ecaf6d1..12846e1e969 100644 --- a/client/admin/client.go +++ b/client/admin/client.go @@ -31,6 +31,8 @@ import ( "context" "time" + "google.golang.org/grpc" + "go.temporal.io/server/api/adminservice/v1" "go.temporal.io/server/common/debug" ) @@ -73,3 +75,12 @@ func (c *clientImpl) createContextWithLargeTimeout(parent context.Context) (cont } return context.WithTimeout(parent, c.largeTimeout) } + +func (c *clientImpl) StreamWorkflowReplicationMessages( + ctx context.Context, + opts ...grpc.CallOption, +) (adminservice.AdminService_StreamWorkflowReplicationMessagesClient, error) { + ctx, cancel := c.createContext(ctx) + defer cancel() + return c.client.StreamWorkflowReplicationMessages(ctx, opts...) +} diff --git a/client/admin/metric_client.go b/client/admin/metric_client.go index 7f7bdc00094..00e62ebf778 100644 --- a/client/admin/metric_client.go +++ b/client/admin/metric_client.go @@ -29,6 +29,7 @@ import ( "time" "go.temporal.io/api/serviceerror" + "google.golang.org/grpc" "go.temporal.io/server/api/adminservice/v1" "go.temporal.io/server/common/headers" @@ -90,3 +91,16 @@ func (c *metricClient) finishMetricsRecording( } metricsHandler.Timer(metrics.ClientLatency.GetMetricName()).Record(time.Since(startTime)) } + +func (c *metricClient) StreamWorkflowReplicationMessages( + ctx context.Context, + opts ...grpc.CallOption, +) (_ adminservice.AdminService_StreamWorkflowReplicationMessagesClient, retError error) { + + metricsHandler, startTime := c.startMetricsRecording(ctx, metrics.AdminStreamWorkflowReplicationMessagesScope) + defer func() { + c.finishMetricsRecording(metricsHandler, startTime, retError) + }() + + return c.client.StreamWorkflowReplicationMessages(ctx, opts...) +} diff --git a/client/admin/retryable_client.go b/client/admin/retryable_client.go index 471d301ae3c..51c9b91a3ab 100644 --- a/client/admin/retryable_client.go +++ b/client/admin/retryable_client.go @@ -25,6 +25,10 @@ package admin import ( + "context" + + "google.golang.org/grpc" + "go.temporal.io/server/api/adminservice/v1" "go.temporal.io/server/common/backoff" ) @@ -45,3 +49,17 @@ func NewRetryableClient(client adminservice.AdminServiceClient, policy backoff.R isRetryable: isRetryable, } } + +func (c *retryableClient) StreamWorkflowReplicationMessages( + ctx context.Context, + opts ...grpc.CallOption, +) (adminservice.AdminService_StreamWorkflowReplicationMessagesClient, error) { + var resp adminservice.AdminService_StreamWorkflowReplicationMessagesClient + op := func(ctx context.Context) error { + var err error + resp, err = c.client.StreamWorkflowReplicationMessages(ctx, opts...) + return err + } + err := backoff.ThrottleRetryContext(ctx, op, c.policy, c.isRetryable) + return resp, err +} diff --git a/client/history/client.go b/client/history/client.go index 17be345bb24..f10641b65a9 100644 --- a/client/history/client.go +++ b/client/history/client.go @@ -35,6 +35,7 @@ import ( "go.temporal.io/api/serviceerror" "google.golang.org/grpc" + "google.golang.org/grpc/metadata" "go.temporal.io/server/api/historyservice/v1" replicationspb "go.temporal.io/server/api/replication/v1" @@ -227,6 +228,25 @@ func (c *clientImpl) GetReplicationStatus( return response, nil } +func (c *clientImpl) StreamWorkflowReplicationMessages( + ctx context.Context, + opts ...grpc.CallOption, +) (historyservice.HistoryService_StreamWorkflowReplicationMessagesClient, error) { + ctxMetadata, ok := metadata.FromIncomingContext(ctx) + if !ok { + return nil, serviceerror.NewInvalidArgument("missing cluster & shard ID metadata") + } + _, targetClusterShardID, err := DecodeClusterShardMD(ctxMetadata) + if err != nil { + return nil, err + } + client, err := c.getClientForShardID(targetClusterShardID.ShardID) + if err != nil { + return nil, err + } + return client.StreamWorkflowReplicationMessages(ctx, opts...) +} + func (c *clientImpl) createContext(parent context.Context) (context.Context, context.CancelFunc) { return context.WithTimeout(parent, c.timeout) } diff --git a/client/history/metadata.go b/client/history/metadata.go new file mode 100644 index 00000000000..22d373098e1 --- /dev/null +++ b/client/history/metadata.go @@ -0,0 +1,116 @@ +// 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. + +package history + +import ( + "fmt" + "strconv" + + "go.temporal.io/api/serviceerror" + "google.golang.org/grpc/metadata" +) + +const ( + MetadataKeySourceClusterName = "temporal-source-cluster-name" + MetadataKeySourceShardID = "temporal-source-shard-id" + MetadataKeyTargetClusterName = "temporal-target-cluster-name" + MetadataKeyTargetShardID = "temporal-target-shard-id" +) + +type ( + ClusterShardID struct { + ClusterName string + ShardID int32 + } +) + +func EncodeClusterShardMD( + sourceClusterShardID ClusterShardID, + targetClusterShardID ClusterShardID, +) metadata.MD { + return metadata.Pairs( + MetadataKeySourceClusterName, sourceClusterShardID.ClusterName, + MetadataKeySourceShardID, strconv.Itoa(int(sourceClusterShardID.ShardID)), + MetadataKeyTargetClusterName, targetClusterShardID.ClusterName, + MetadataKeyTargetShardID, strconv.Itoa(int(targetClusterShardID.ShardID)), + ) +} + +func DecodeClusterShardMD( + clusterShardMD metadata.MD, +) (_ ClusterShardID, _ ClusterShardID, _ error) { + var sourceClusterShardID ClusterShardID + var targetClusterShardID ClusterShardID + + clusterNames := clusterShardMD.Get(MetadataKeySourceClusterName) + if len(clusterNames) != 1 { + return sourceClusterShardID, targetClusterShardID, serviceerror.NewInvalidArgument(fmt.Sprintf( + "unable to parse source cluster shard ID: %v", + clusterShardMD, + )) + } + sourceClusterShardID.ClusterName = clusterNames[0] + shardIDs := clusterShardMD.Get(MetadataKeySourceShardID) + if len(shardIDs) != 1 { + return sourceClusterShardID, targetClusterShardID, serviceerror.NewInvalidArgument(fmt.Sprintf( + "unable to parse source cluster shard ID: %v", + clusterShardMD, + )) + } + shardID, err := strconv.Atoi(shardIDs[0]) + if err != nil { + return sourceClusterShardID, targetClusterShardID, serviceerror.NewInvalidArgument(fmt.Sprintf( + "unable to parse source cluster shard ID: %v, err: %v", + clusterShardMD, + err.Error(), + )) + } + sourceClusterShardID.ShardID = int32(shardID) + clusterNames = clusterShardMD.Get(MetadataKeyTargetClusterName) + if len(clusterNames) != 1 { + return sourceClusterShardID, targetClusterShardID, serviceerror.NewInvalidArgument(fmt.Sprintf( + "unable to parse target cluster shard ID: %v", + clusterShardMD, + )) + } + targetClusterShardID.ClusterName = clusterNames[0] + shardIDs = clusterShardMD.Get(MetadataKeyTargetShardID) + if len(shardIDs) != 1 { + return sourceClusterShardID, targetClusterShardID, serviceerror.NewInvalidArgument(fmt.Sprintf( + "unable to parse source cluster shard ID: %v", + clusterShardMD, + )) + } + shardID, err = strconv.Atoi(shardIDs[0]) + if err != nil { + return sourceClusterShardID, targetClusterShardID, serviceerror.NewInvalidArgument(fmt.Sprintf( + "unable to parse source cluster shard ID: %v, err: %v", + clusterShardMD, + err.Error(), + )) + } + targetClusterShardID.ShardID = int32(shardID) + return sourceClusterShardID, targetClusterShardID, nil +} diff --git a/client/history/metadata_test.go b/client/history/metadata_test.go new file mode 100644 index 00000000000..3db26d99ea5 --- /dev/null +++ b/client/history/metadata_test.go @@ -0,0 +1,134 @@ +// 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. + +package history + +import ( + "math/rand" + "strconv" + "testing" + "time" + + "github.com/golang/mock/gomock" + "github.com/google/uuid" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + "google.golang.org/grpc/metadata" +) + +type ( + metadataSuite struct { + suite.Suite + *require.Assertions + + controller *gomock.Controller + } +) + +func TestMetadataSuite(t *testing.T) { + s := new(metadataSuite) + suite.Run(t, s) +} + +func (s *metadataSuite) SetupSuite() { + rand.Seed(time.Now().UnixNano()) +} + +func (s *metadataSuite) TearDownSuite() { + +} + +func (s *metadataSuite) SetupTest() { + s.Assertions = require.New(s.T()) + + s.controller = gomock.NewController(s.T()) + +} + +func (s *metadataSuite) TearDownTest() { + s.controller.Finish() +} + +func (s *metadataSuite) TestClusterShardMD_Encode_Decode() { + sourceClusterShardID := ClusterShardID{ + ClusterName: uuid.NewString(), + ShardID: rand.Int31(), + } + targetClusterShardID := ClusterShardID{ + ClusterName: uuid.NewString(), + ShardID: rand.Int31(), + } + + clusterShardMD := EncodeClusterShardMD( + sourceClusterShardID, + targetClusterShardID, + ) + actualSourceClusterShardID, actualTargetClusterShardID, err := DecodeClusterShardMD(clusterShardMD) + s.NoError(err) + s.Equal(sourceClusterShardID, actualSourceClusterShardID) + s.Equal(targetClusterShardID, actualTargetClusterShardID) +} + +func (s *metadataSuite) TestClusterShardMD_Decode_Error() { + clusterShardMD := metadata.Pairs( + MetadataKeySourceShardID, strconv.Itoa(int(rand.Int31())), + MetadataKeyTargetClusterName, uuid.NewString(), + MetadataKeyTargetShardID, strconv.Itoa(int(rand.Int31())), + ) + _, _, err := DecodeClusterShardMD(clusterShardMD) + s.Error(err) + + clusterShardMD = metadata.Pairs( + MetadataKeySourceClusterName, uuid.NewString(), + MetadataKeyTargetClusterName, uuid.NewString(), + MetadataKeyTargetShardID, strconv.Itoa(int(rand.Int31())), + ) + _, _, err = DecodeClusterShardMD(clusterShardMD) + s.Error(err) + + clusterShardMD = metadata.Pairs( + MetadataKeySourceClusterName, uuid.NewString(), + MetadataKeySourceShardID, strconv.Itoa(int(rand.Int31())), + MetadataKeyTargetShardID, strconv.Itoa(int(rand.Int31())), + ) + _, _, err = DecodeClusterShardMD(clusterShardMD) + s.Error(err) + + clusterShardMD = metadata.Pairs( + MetadataKeySourceClusterName, uuid.NewString(), + MetadataKeySourceShardID, strconv.Itoa(int(rand.Int31())), + MetadataKeyTargetClusterName, uuid.NewString(), + ) + _, _, err = DecodeClusterShardMD(clusterShardMD) + s.Error(err) + + clusterShardMD = metadata.Pairs( + MetadataKeySourceClusterName, uuid.NewString(), + MetadataKeySourceShardID, uuid.NewString(), + MetadataKeyTargetClusterName, uuid.NewString(), + MetadataKeyTargetShardID, uuid.NewString(), + ) + _, _, err = DecodeClusterShardMD(clusterShardMD) + s.Error(err) +} diff --git a/client/history/metric_client.go b/client/history/metric_client.go index 50af0bcbb47..e3e2cd4b9b2 100644 --- a/client/history/metric_client.go +++ b/client/history/metric_client.go @@ -29,6 +29,7 @@ import ( "time" "go.temporal.io/api/serviceerror" + "google.golang.org/grpc" "go.temporal.io/server/api/historyservice/v1" "go.temporal.io/server/common/headers" @@ -61,6 +62,19 @@ func NewMetricClient( } } +func (c *metricClient) StreamWorkflowReplicationMessages( + ctx context.Context, + opts ...grpc.CallOption, +) (_ historyservice.HistoryService_StreamWorkflowReplicationMessagesClient, retError error) { + + metricsHandler, startTime := c.startMetricsRecording(ctx, metrics.HistoryClientStreamWorkflowReplicationMessagesScope) + defer func() { + c.finishMetricsRecording(metricsHandler, startTime, retError) + }() + + return c.client.StreamWorkflowReplicationMessages(ctx, opts...) +} + func (c *metricClient) startMetricsRecording( ctx context.Context, operation string, diff --git a/client/history/retryable_client.go b/client/history/retryable_client.go index 50cd785339c..c4c0fd3358a 100644 --- a/client/history/retryable_client.go +++ b/client/history/retryable_client.go @@ -25,6 +25,10 @@ package history import ( + "context" + + "google.golang.org/grpc" + "go.temporal.io/server/api/historyservice/v1" "go.temporal.io/server/common/backoff" ) @@ -45,3 +49,17 @@ func NewRetryableClient(client historyservice.HistoryServiceClient, policy backo isRetryable: isRetryable, } } + +func (c *retryableClient) StreamWorkflowReplicationMessages( + ctx context.Context, + opts ...grpc.CallOption, +) (historyservice.HistoryService_StreamWorkflowReplicationMessagesClient, error) { + var resp historyservice.HistoryService_StreamWorkflowReplicationMessagesClient + op := func(ctx context.Context) error { + var err error + resp, err = c.client.StreamWorkflowReplicationMessages(ctx, opts...) + return err + } + err := backoff.ThrottleRetryContext(ctx, op, c.policy, c.isRetryable) + return resp, err +} diff --git a/cmd/tools/rpcwrappers/main.go b/cmd/tools/rpcwrappers/main.go index 7c9ddc296a2..8808bcbc110 100644 --- a/cmd/tools/rpcwrappers/main.go +++ b/cmd/tools/rpcwrappers/main.go @@ -83,6 +83,14 @@ var ( "client.admin.GetReplicationMessages": true, } ignoreMethod = map[string]bool{ + // TODO stream APIs are not supported. do not generate. + "client.admin.StreamWorkflowReplicationMessages": true, + "metricsClient.admin.StreamWorkflowReplicationMessages": true, + "retryableClient.admin.StreamWorkflowReplicationMessages": true, + "client.history.StreamWorkflowReplicationMessages": true, + "metricsClient.history.StreamWorkflowReplicationMessages": true, + "retryableClient.history.StreamWorkflowReplicationMessages": true, + // these are non-standard implementations. do not generate. "client.history.DescribeHistoryHost": true, "client.history.GetReplicationMessages": true, diff --git a/common/metrics/metric_defs.go b/common/metrics/metric_defs.go index 5ec5fc94cc5..4ba27e1e734 100644 --- a/common/metrics/metric_defs.go +++ b/common/metrics/metric_defs.go @@ -197,8 +197,8 @@ const ( AdminRemoveRemoteClusterScope = "AdminRemoveRemoteCluster" // AdminDeleteWorkflowExecutionScope is the metric scope for admin.AdminDeleteWorkflowExecution AdminDeleteWorkflowExecutionScope = "AdminDeleteWorkflowExecution" - // AdminStreamReplicationMessagesScope is the metric scope for admin.AdminStreamReplicationMessages - AdminStreamReplicationMessagesScope = "AdminStreamReplicationMessages" + // AdminStreamWorkflowReplicationMessagesScope is the metric scope for admin.AdminStreamReplicationMessages + AdminStreamWorkflowReplicationMessagesScope = "AdminStreamWorkflowReplicationMessages" // OperatorAddSearchAttributesScope is the metric scope for operator.AddSearchAttributes OperatorAddSearchAttributesScope @@ -435,8 +435,8 @@ const ( HistoryClientDescribeHistoryHostScope = "HistoryClientDescribeHistoryHost" // HistoryClientGetReplicationMessagesScope tracks RPC calls to history service HistoryClientGetReplicationMessagesScope = "HistoryClientGetReplicationMessages" - // HistoryClientStreamReplicationMessagesScope tracks RPC calls to history service - HistoryClientStreamReplicationMessagesScope = "HistoryClientStreamReplicationMessages" + // HistoryClientStreamWorkflowReplicationMessagesScope tracks RPC calls to history service + HistoryClientStreamWorkflowReplicationMessagesScope = "HistoryClientStreamWorkflowReplicationMessages" ) // Matching Client Operations diff --git a/go.mod b/go.mod index 043f58742cd..8c7c0692ca4 100644 --- a/go.mod +++ b/go.mod @@ -53,6 +53,7 @@ require ( go.uber.org/zap v1.24.0 golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb golang.org/x/oauth2 v0.5.0 + golang.org/x/sync v0.1.0 golang.org/x/time v0.3.0 google.golang.org/api v0.110.0 google.golang.org/grpc v1.53.0 diff --git a/proto/internal/temporal/server/api/adminservice/v1/request_response.proto b/proto/internal/temporal/server/api/adminservice/v1/request_response.proto index e004b1712d7..3d92995716c 100644 --- a/proto/internal/temporal/server/api/adminservice/v1/request_response.proto +++ b/proto/internal/temporal/server/api/adminservice/v1/request_response.proto @@ -376,3 +376,17 @@ message DeleteWorkflowExecutionRequest { message DeleteWorkflowExecutionResponse { repeated string warnings = 1; } + +message StreamWorkflowReplicationMessagesRequest { + int32 shard_id = 1; + oneof attributes { + temporal.server.api.replication.v1.SyncReplicationState sync_replication_state = 2; + } +} + +message StreamWorkflowReplicationMessagesResponse { + int32 shard_id = 1; + oneof attributes { + temporal.server.api.replication.v1.ReplicationMessages replication_messages = 2; + } +} \ No newline at end of file diff --git a/proto/internal/temporal/server/api/adminservice/v1/service.proto b/proto/internal/temporal/server/api/adminservice/v1/service.proto index c0e80018925..9a15f8b69d2 100644 --- a/proto/internal/temporal/server/api/adminservice/v1/service.proto +++ b/proto/internal/temporal/server/api/adminservice/v1/service.proto @@ -139,5 +139,8 @@ service AdminService { // DeleteWorkflowExecution force deletes a workflow's visibility record, current & concrete execution record and history if possible rpc DeleteWorkflowExecution(DeleteWorkflowExecutionRequest) returns (DeleteWorkflowExecutionResponse) { } + + rpc StreamWorkflowReplicationMessages(stream StreamWorkflowReplicationMessagesRequest) returns (stream StreamWorkflowReplicationMessagesResponse) { + } } diff --git a/proto/internal/temporal/server/api/historyservice/v1/request_response.proto b/proto/internal/temporal/server/api/historyservice/v1/request_response.proto index cceeaff1172..bcb488c5442 100644 --- a/proto/internal/temporal/server/api/historyservice/v1/request_response.proto +++ b/proto/internal/temporal/server/api/historyservice/v1/request_response.proto @@ -634,3 +634,17 @@ message UpdateWorkflowExecutionRequest { message UpdateWorkflowExecutionResponse { temporal.api.workflowservice.v1.UpdateWorkflowExecutionResponse response = 1; } + +message StreamWorkflowReplicationMessagesRequest { + int32 shard_id = 1; + oneof attributes { + temporal.server.api.replication.v1.SyncReplicationState sync_replication_state = 2; + } +} + +message StreamWorkflowReplicationMessagesResponse { + int32 shard_id = 1; + oneof attributes { + temporal.server.api.replication.v1.ReplicationMessages replication_messages = 2; + } +} \ No newline at end of file diff --git a/proto/internal/temporal/server/api/historyservice/v1/service.proto b/proto/internal/temporal/server/api/historyservice/v1/service.proto index 187cf661cf0..8cb7c1961d9 100644 --- a/proto/internal/temporal/server/api/historyservice/v1/service.proto +++ b/proto/internal/temporal/server/api/historyservice/v1/service.proto @@ -283,4 +283,7 @@ service HistoryService { // aip.dev/not-precedent: This service does not follow the update method API --) rpc UpdateWorkflowExecution(UpdateWorkflowExecutionRequest) returns (UpdateWorkflowExecutionResponse) { } + + rpc StreamWorkflowReplicationMessages(stream StreamWorkflowReplicationMessagesRequest) returns (stream StreamWorkflowReplicationMessagesResponse) { + } } diff --git a/proto/internal/temporal/server/api/replication/v1/message.proto b/proto/internal/temporal/server/api/replication/v1/message.proto index 8bfd736c5cb..89a6b4a4207 100644 --- a/proto/internal/temporal/server/api/replication/v1/message.proto +++ b/proto/internal/temporal/server/api/replication/v1/message.proto @@ -68,6 +68,11 @@ message SyncShardStatus { google.protobuf.Timestamp status_time = 1 [(gogoproto.stdtime) = true]; } +message SyncReplicationState { + int64 last_processed_message_id = 1; + google.protobuf.Timestamp last_processed_message_time = 2 [(gogoproto.stdtime) = true]; +} + message ReplicationMessages { repeated ReplicationTask replication_tasks = 1; // This can be different than the last taskId in the above list, because sender can decide to skip tasks (e.g. for completed workflows). diff --git a/service/frontend/adminHandler.go b/service/frontend/adminHandler.go index 89eeebd2ba8..e5bfee0591e 100644 --- a/service/frontend/adminHandler.go +++ b/service/frontend/adminHandler.go @@ -33,6 +33,8 @@ import ( "sync/atomic" "time" + "golang.org/x/sync/errgroup" + "go.temporal.io/server/common/clock" "go.temporal.io/server/common/primitives" "go.temporal.io/server/common/util" @@ -1923,3 +1925,66 @@ func (adh *AdminHandler) getWorkflowCompletionEvent( return nil, serviceerror.NewInternal("Unable to find closed event for workflow") } + +func (adh *AdminHandler) StreamWorkflowReplicationMessages( + targetCluster adminservice.AdminService_StreamWorkflowReplicationMessagesServer, +) (retError error) { + defer log.CapturePanic(adh.logger, &retError) + + ctx := targetCluster.Context() + sourceCluster, err := adh.historyClient.StreamWorkflowReplicationMessages(ctx) + if err != nil { + return err + } + + errGroup, ctx := errgroup.WithContext(ctx) + errGroup.Go(func() error { + for ctx.Err() == nil { + req, err := targetCluster.Recv() + if err != nil { + return err + } + switch attr := req.GetAttributes().(type) { + case *adminservice.StreamWorkflowReplicationMessagesRequest_SyncReplicationState: + if err = sourceCluster.Send(&historyservice.StreamWorkflowReplicationMessagesRequest{ + ShardId: req.ShardId, + Attributes: &historyservice.StreamWorkflowReplicationMessagesRequest_SyncReplicationState{ + SyncReplicationState: attr.SyncReplicationState, + }, + }); err != nil { + return err + } + default: + return serviceerror.NewInternal(fmt.Sprintf( + "StreamWorkflowReplicationMessages encountered unknown type: %T %v", attr, attr, + )) + } + } + return ctx.Err() + }) + errGroup.Go(func() error { + for ctx.Err() == nil { + resp, err := sourceCluster.Recv() + if err != nil { + return err + } + switch attr := resp.GetAttributes().(type) { + case *historyservice.StreamWorkflowReplicationMessagesResponse_ReplicationMessages: + if err = targetCluster.Send(&adminservice.StreamWorkflowReplicationMessagesResponse{ + ShardId: resp.ShardId, + Attributes: &adminservice.StreamWorkflowReplicationMessagesResponse_ReplicationMessages{ + ReplicationMessages: attr.ReplicationMessages, + }, + }); err != nil { + return err + } + default: + return serviceerror.NewInternal(fmt.Sprintf( + "StreamWorkflowReplicationMessages encountered unknown type: %T %v", attr, attr, + )) + } + } + return ctx.Err() + }) + return errGroup.Wait() +} diff --git a/service/history/configs/quotas.go b/service/history/configs/quotas.go index 5df33997258..d6e2022405d 100644 --- a/service/history/configs/quotas.go +++ b/service/history/configs/quotas.go @@ -76,6 +76,7 @@ var ( "GetReplicationStatus": 0, "DeleteWorkflowVisibilityRecord": 0, "UpdateWorkflowExecution": 0, + "StreamWorkflowReplicationMessages": 0, } APIPrioritiesOrdered = []int{0} diff --git a/service/history/handler.go b/service/history/handler.go index 00bb60543a0..b7918249b03 100644 --- a/service/history/handler.go +++ b/service/history/handler.go @@ -37,12 +37,14 @@ import ( enumspb "go.temporal.io/api/enums/v1" "go.temporal.io/api/serviceerror" "go.uber.org/fx" + "google.golang.org/grpc/metadata" enumsspb "go.temporal.io/server/api/enums/v1" "go.temporal.io/server/api/historyservice/v1" namespacespb "go.temporal.io/server/api/namespace/v1" replicationspb "go.temporal.io/server/api/replication/v1" tokenspb "go.temporal.io/server/api/token/v1" + "go.temporal.io/server/client/history" "go.temporal.io/server/common" "go.temporal.io/server/common/archiver" "go.temporal.io/server/common/clock" @@ -63,6 +65,7 @@ import ( "go.temporal.io/server/service/history/api" "go.temporal.io/server/service/history/configs" "go.temporal.io/server/service/history/events" + "go.temporal.io/server/service/history/ndc" "go.temporal.io/server/service/history/replication" "go.temporal.io/server/service/history/shard" "go.temporal.io/server/service/history/tasks" @@ -1846,6 +1849,38 @@ func (h *Handler) UpdateWorkflowExecution( return engine.UpdateWorkflowExecution(ctx, request) } +func (h *Handler) StreamWorkflowReplicationMessages( + server historyservice.HistoryService_StreamWorkflowReplicationMessagesServer, +) (retError error) { + defer log.CapturePanic(h.logger, &retError) + h.startWG.Wait() + + if h.isStopped() { + return errShuttingDown + } + + ctxMetadata, ok := metadata.FromIncomingContext(server.Context()) + if !ok { + return serviceerror.NewInvalidArgument("missing cluster & shard ID metadata") + } + sourceClusterShardID, targetClusterShardID, err := history.DecodeClusterShardMD(ctxMetadata) + if err != nil { + return err + } + if targetClusterShardID.ClusterName != h.clusterMetadata.GetCurrentClusterName() { + return serviceerror.NewInvalidArgument(fmt.Sprintf( + "wrong cluster: target: %v, current: %v", + targetClusterShardID.ClusterName, + h.clusterMetadata.GetCurrentClusterName(), + )) + } + shardContext, err := h.controller.GetShardByID(targetClusterShardID.ShardID) + if err != nil { + return err + } + return ndc.StreamReplicationTasks(server, shardContext, sourceClusterShardID, targetClusterShardID) +} + // convertError is a helper method to convert ShardOwnershipLostError from persistence layer returned by various // HistoryEngine API calls to ShardOwnershipLost error return by HistoryService for client to be redirected to the // correct shard. diff --git a/service/history/ndc/stream.go b/service/history/ndc/stream.go new file mode 100644 index 00000000000..f123bbcefea --- /dev/null +++ b/service/history/ndc/stream.go @@ -0,0 +1,111 @@ +// 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. + +package ndc + +import ( + "context" + "fmt" + + "go.temporal.io/api/serviceerror" + "golang.org/x/sync/errgroup" + + "go.temporal.io/server/api/historyservice/v1" + historyclient "go.temporal.io/server/client/history" + "go.temporal.io/server/common/log/tag" + "go.temporal.io/server/common/persistence" + "go.temporal.io/server/service/history/shard" + "go.temporal.io/server/service/history/tasks" +) + +func StreamReplicationTasks( + server historyservice.HistoryService_StreamWorkflowReplicationMessagesServer, + shardContext shard.Context, + sourceClusterShardID historyclient.ClusterShardID, + targetClusterShardID historyclient.ClusterShardID, +) error { + errGroup, ctx := errgroup.WithContext(server.Context()) + errGroup.Go(func() error { + return recvLoop(ctx, server, shardContext, sourceClusterShardID) + }) + errGroup.Go(func() error { + return sendLoop(ctx, server, shardContext, targetClusterShardID) + }) + return errGroup.Wait() +} + +func recvLoop( + ctx context.Context, + server historyservice.HistoryService_StreamWorkflowReplicationMessagesServer, + shardContext shard.Context, + sourceClusterShardID historyclient.ClusterShardID, +) error { + for ctx.Err() == nil { + req, err := server.Recv() + if err != nil { + return err + } + switch attr := req.GetAttributes().(type) { + case *historyservice.StreamWorkflowReplicationMessagesRequest_SyncReplicationState: + lastProcessedMessageID := attr.SyncReplicationState.GetLastProcessedMessageId() + lastProcessedMessageIDTime := attr.SyncReplicationState.GetLastProcessedMessageTime() + if lastProcessedMessageID != persistence.EmptyQueueMessageID { + if err := shardContext.UpdateQueueClusterAckLevel( + tasks.CategoryReplication, + sourceClusterShardID.ClusterName, + tasks.NewImmediateKey(lastProcessedMessageID), + ); err != nil { + shardContext.GetLogger().Error( + "error updating replication level for shard", + tag.Error(err), + tag.OperationFailed, + ) + } + shardContext.UpdateRemoteClusterInfo( + sourceClusterShardID.ClusterName, + lastProcessedMessageID, + *lastProcessedMessageIDTime, + ) + } + default: + return serviceerror.NewInternal(fmt.Sprintf( + "StreamReplicationMessages encountered unknown type: %T %v", attr, attr, + )) + } + } + return ctx.Err() +} + +func sendLoop( + ctx context.Context, + server historyservice.HistoryService_StreamWorkflowReplicationMessagesServer, + shardContext shard.Context, + targetClusterShardID historyclient.ClusterShardID, +) error { + for ctx.Err() == nil { + // TODO push replication tasks to target + panic(targetClusterShardID) + } + return ctx.Err() +}