diff --git a/api/deployment/v1/message.go-helpers.pb.go b/api/deployment/v1/message.go-helpers.pb.go index 7d37a2ccb03..ec2f3cd14e9 100644 --- a/api/deployment/v1/message.go-helpers.pb.go +++ b/api/deployment/v1/message.go-helpers.pb.go @@ -79,6 +79,43 @@ func (this *DeploymentVersionData) Equal(that interface{}) bool { return proto.Equal(this, that1) } +// Marshal an object of type WorkerDeploymentVersionData to the protobuf v3 wire format +func (val *WorkerDeploymentVersionData) Marshal() ([]byte, error) { + return proto.Marshal(val) +} + +// Unmarshal an object of type WorkerDeploymentVersionData from the protobuf v3 wire format +func (val *WorkerDeploymentVersionData) Unmarshal(buf []byte) error { + return proto.Unmarshal(buf, val) +} + +// Size returns the size of the object, in bytes, once serialized +func (val *WorkerDeploymentVersionData) Size() int { + return proto.Size(val) +} + +// Equal returns whether two WorkerDeploymentVersionData values are equivalent by recursively +// comparing the message's fields. +// For more information see the documentation for +// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal +func (this *WorkerDeploymentVersionData) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + var that1 *WorkerDeploymentVersionData + switch t := that.(type) { + case *WorkerDeploymentVersionData: + that1 = t + case WorkerDeploymentVersionData: + that1 = &t + default: + return false + } + + return proto.Equal(this, that1) +} + // Marshal an object of type VersionLocalState to the protobuf v3 wire format func (val *VersionLocalState) Marshal() ([]byte, error) { return proto.Marshal(val) diff --git a/api/deployment/v1/message.pb.go b/api/deployment/v1/message.pb.go index fe71cdbd84f..20b35c30bec 100644 --- a/api/deployment/v1/message.pb.go +++ b/api/deployment/v1/message.pb.go @@ -85,6 +85,7 @@ func (x *WorkerDeploymentVersion) GetBuildId() string { // The source of truth for this data is in the WorkerDeployment entity workflows, which is // synced to all TQs whenever the source changes. +// Deprecated. type DeploymentVersionData struct { state protoimpl.MessageState `protogen:"open.v1"` // Nil means unversioned. @@ -184,6 +185,52 @@ func (x *DeploymentVersionData) GetStatus() v1.WorkerDeploymentVersionStatus { return v1.WorkerDeploymentVersionStatus(0) } +// Information that a TQ should know about a particular Deployment Version. This info is not part of +// RoutingConfig and hence not protected by the revision number. +type WorkerDeploymentVersionData struct { + state protoimpl.MessageState `protogen:"open.v1"` + Status v1.WorkerDeploymentVersionStatus `protobuf:"varint,6,opt,name=status,proto3,enum=temporal.api.enums.v1.WorkerDeploymentVersionStatus" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WorkerDeploymentVersionData) Reset() { + *x = WorkerDeploymentVersionData{} + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WorkerDeploymentVersionData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkerDeploymentVersionData) ProtoMessage() {} + +func (x *WorkerDeploymentVersionData) ProtoReflect() protoreflect.Message { + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkerDeploymentVersionData.ProtoReflect.Descriptor instead. +func (*WorkerDeploymentVersionData) Descriptor() ([]byte, []int) { + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{2} +} + +func (x *WorkerDeploymentVersionData) GetStatus() v1.WorkerDeploymentVersionStatus { + if x != nil { + return x.Status + } + return v1.WorkerDeploymentVersionStatus(0) +} + // Local state for Worker Deployment Version type VersionLocalState struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -239,7 +286,7 @@ type VersionLocalState struct { func (x *VersionLocalState) Reset() { *x = VersionLocalState{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[2] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -251,7 +298,7 @@ func (x *VersionLocalState) String() string { func (*VersionLocalState) ProtoMessage() {} func (x *VersionLocalState) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[2] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -264,7 +311,7 @@ func (x *VersionLocalState) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionLocalState.ProtoReflect.Descriptor instead. func (*VersionLocalState) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{2} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{3} } func (x *VersionLocalState) GetVersion() *WorkerDeploymentVersion { @@ -374,7 +421,7 @@ type TaskQueueVersionData struct { func (x *TaskQueueVersionData) Reset() { *x = TaskQueueVersionData{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[3] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -386,7 +433,7 @@ func (x *TaskQueueVersionData) String() string { func (*TaskQueueVersionData) ProtoMessage() {} func (x *TaskQueueVersionData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[3] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -399,7 +446,7 @@ func (x *TaskQueueVersionData) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskQueueVersionData.ProtoReflect.Descriptor instead. func (*TaskQueueVersionData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{3} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{4} } // used as Worker Deployment Version workflow input: @@ -414,7 +461,7 @@ type WorkerDeploymentVersionWorkflowArgs struct { func (x *WorkerDeploymentVersionWorkflowArgs) Reset() { *x = WorkerDeploymentVersionWorkflowArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[4] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -426,7 +473,7 @@ func (x *WorkerDeploymentVersionWorkflowArgs) String() string { func (*WorkerDeploymentVersionWorkflowArgs) ProtoMessage() {} func (x *WorkerDeploymentVersionWorkflowArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[4] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -439,7 +486,7 @@ func (x *WorkerDeploymentVersionWorkflowArgs) ProtoReflect() protoreflect.Messag // Deprecated: Use WorkerDeploymentVersionWorkflowArgs.ProtoReflect.Descriptor instead. func (*WorkerDeploymentVersionWorkflowArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{4} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{5} } func (x *WorkerDeploymentVersionWorkflowArgs) GetNamespaceName() string { @@ -476,7 +523,7 @@ type WorkerDeploymentWorkflowArgs struct { func (x *WorkerDeploymentWorkflowArgs) Reset() { *x = WorkerDeploymentWorkflowArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[5] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -488,7 +535,7 @@ func (x *WorkerDeploymentWorkflowArgs) String() string { func (*WorkerDeploymentWorkflowArgs) ProtoMessage() {} func (x *WorkerDeploymentWorkflowArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[5] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -501,7 +548,7 @@ func (x *WorkerDeploymentWorkflowArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerDeploymentWorkflowArgs.ProtoReflect.Descriptor instead. func (*WorkerDeploymentWorkflowArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{5} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{6} } func (x *WorkerDeploymentWorkflowArgs) GetNamespaceName() string { @@ -550,7 +597,7 @@ type WorkerDeploymentLocalState struct { func (x *WorkerDeploymentLocalState) Reset() { *x = WorkerDeploymentLocalState{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[6] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -562,7 +609,7 @@ func (x *WorkerDeploymentLocalState) String() string { func (*WorkerDeploymentLocalState) ProtoMessage() {} func (x *WorkerDeploymentLocalState) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[6] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -575,7 +622,7 @@ func (x *WorkerDeploymentLocalState) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerDeploymentLocalState.ProtoReflect.Descriptor instead. func (*WorkerDeploymentLocalState) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{6} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{7} } func (x *WorkerDeploymentLocalState) GetCreateTime() *timestamppb.Timestamp { @@ -662,7 +709,7 @@ type WorkerDeploymentVersionSummary struct { func (x *WorkerDeploymentVersionSummary) Reset() { *x = WorkerDeploymentVersionSummary{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[7] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -674,7 +721,7 @@ func (x *WorkerDeploymentVersionSummary) String() string { func (*WorkerDeploymentVersionSummary) ProtoMessage() {} func (x *WorkerDeploymentVersionSummary) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[7] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -687,7 +734,7 @@ func (x *WorkerDeploymentVersionSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerDeploymentVersionSummary.ProtoReflect.Descriptor instead. func (*WorkerDeploymentVersionSummary) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{7} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{8} } func (x *WorkerDeploymentVersionSummary) GetVersion() string { @@ -774,7 +821,7 @@ type RegisterWorkerInVersionArgs struct { func (x *RegisterWorkerInVersionArgs) Reset() { *x = RegisterWorkerInVersionArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[8] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -786,7 +833,7 @@ func (x *RegisterWorkerInVersionArgs) String() string { func (*RegisterWorkerInVersionArgs) ProtoMessage() {} func (x *RegisterWorkerInVersionArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[8] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -799,7 +846,7 @@ func (x *RegisterWorkerInVersionArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterWorkerInVersionArgs.ProtoReflect.Descriptor instead. func (*RegisterWorkerInVersionArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{8} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{9} } func (x *RegisterWorkerInVersionArgs) GetTaskQueueName() string { @@ -843,7 +890,7 @@ type RegisterWorkerInWorkerDeploymentArgs struct { func (x *RegisterWorkerInWorkerDeploymentArgs) Reset() { *x = RegisterWorkerInWorkerDeploymentArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[9] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -855,7 +902,7 @@ func (x *RegisterWorkerInWorkerDeploymentArgs) String() string { func (*RegisterWorkerInWorkerDeploymentArgs) ProtoMessage() {} func (x *RegisterWorkerInWorkerDeploymentArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[9] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -868,7 +915,7 @@ func (x *RegisterWorkerInWorkerDeploymentArgs) ProtoReflect() protoreflect.Messa // Deprecated: Use RegisterWorkerInWorkerDeploymentArgs.ProtoReflect.Descriptor instead. func (*RegisterWorkerInWorkerDeploymentArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{9} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{10} } func (x *RegisterWorkerInWorkerDeploymentArgs) GetTaskQueueName() string { @@ -909,7 +956,7 @@ type DescribeVersionFromWorkerDeploymentActivityArgs struct { func (x *DescribeVersionFromWorkerDeploymentActivityArgs) Reset() { *x = DescribeVersionFromWorkerDeploymentActivityArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[10] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -921,7 +968,7 @@ func (x *DescribeVersionFromWorkerDeploymentActivityArgs) String() string { func (*DescribeVersionFromWorkerDeploymentActivityArgs) ProtoMessage() {} func (x *DescribeVersionFromWorkerDeploymentActivityArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[10] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -934,7 +981,7 @@ func (x *DescribeVersionFromWorkerDeploymentActivityArgs) ProtoReflect() protore // Deprecated: Use DescribeVersionFromWorkerDeploymentActivityArgs.ProtoReflect.Descriptor instead. func (*DescribeVersionFromWorkerDeploymentActivityArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{10} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{11} } func (x *DescribeVersionFromWorkerDeploymentActivityArgs) GetVersion() string { @@ -954,7 +1001,7 @@ type DescribeVersionFromWorkerDeploymentActivityResult struct { func (x *DescribeVersionFromWorkerDeploymentActivityResult) Reset() { *x = DescribeVersionFromWorkerDeploymentActivityResult{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[11] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -966,7 +1013,7 @@ func (x *DescribeVersionFromWorkerDeploymentActivityResult) String() string { func (*DescribeVersionFromWorkerDeploymentActivityResult) ProtoMessage() {} func (x *DescribeVersionFromWorkerDeploymentActivityResult) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[11] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -979,7 +1026,7 @@ func (x *DescribeVersionFromWorkerDeploymentActivityResult) ProtoReflect() proto // Deprecated: Use DescribeVersionFromWorkerDeploymentActivityResult.ProtoReflect.Descriptor instead. func (*DescribeVersionFromWorkerDeploymentActivityResult) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{11} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{12} } func (x *DescribeVersionFromWorkerDeploymentActivityResult) GetTaskQueueInfos() []*v11.WorkerDeploymentVersionInfo_VersionTaskQueueInfo { @@ -1015,7 +1062,7 @@ type SyncVersionStateUpdateArgs struct { func (x *SyncVersionStateUpdateArgs) Reset() { *x = SyncVersionStateUpdateArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[12] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1027,7 +1074,7 @@ func (x *SyncVersionStateUpdateArgs) String() string { func (*SyncVersionStateUpdateArgs) ProtoMessage() {} func (x *SyncVersionStateUpdateArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[12] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1040,7 +1087,7 @@ func (x *SyncVersionStateUpdateArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncVersionStateUpdateArgs.ProtoReflect.Descriptor instead. func (*SyncVersionStateUpdateArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{12} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{13} } func (x *SyncVersionStateUpdateArgs) GetRoutingUpdateTime() *timestamppb.Timestamp { @@ -1081,7 +1128,7 @@ type SyncVersionStateResponse struct { func (x *SyncVersionStateResponse) Reset() { *x = SyncVersionStateResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[13] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1093,7 +1140,7 @@ func (x *SyncVersionStateResponse) String() string { func (*SyncVersionStateResponse) ProtoMessage() {} func (x *SyncVersionStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[13] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1106,7 +1153,7 @@ func (x *SyncVersionStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncVersionStateResponse.ProtoReflect.Descriptor instead. func (*SyncVersionStateResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{13} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{14} } func (x *SyncVersionStateResponse) GetVersionState() *VersionLocalState { @@ -1127,7 +1174,7 @@ type AddVersionUpdateArgs struct { func (x *AddVersionUpdateArgs) Reset() { *x = AddVersionUpdateArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[14] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1139,7 +1186,7 @@ func (x *AddVersionUpdateArgs) String() string { func (*AddVersionUpdateArgs) ProtoMessage() {} func (x *AddVersionUpdateArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[14] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1152,7 +1199,7 @@ func (x *AddVersionUpdateArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use AddVersionUpdateArgs.ProtoReflect.Descriptor instead. func (*AddVersionUpdateArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{14} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{15} } func (x *AddVersionUpdateArgs) GetVersion() string { @@ -1179,7 +1226,7 @@ type SyncDrainageInfoSignalArgs struct { func (x *SyncDrainageInfoSignalArgs) Reset() { *x = SyncDrainageInfoSignalArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[15] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1191,7 +1238,7 @@ func (x *SyncDrainageInfoSignalArgs) String() string { func (*SyncDrainageInfoSignalArgs) ProtoMessage() {} func (x *SyncDrainageInfoSignalArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[15] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1204,7 +1251,7 @@ func (x *SyncDrainageInfoSignalArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncDrainageInfoSignalArgs.ProtoReflect.Descriptor instead. func (*SyncDrainageInfoSignalArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{15} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{16} } func (x *SyncDrainageInfoSignalArgs) GetDrainageInfo() *v11.VersionDrainageInfo { @@ -1225,7 +1272,7 @@ type SyncDrainageStatusSignalArgs struct { func (x *SyncDrainageStatusSignalArgs) Reset() { *x = SyncDrainageStatusSignalArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[16] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1237,7 +1284,7 @@ func (x *SyncDrainageStatusSignalArgs) String() string { func (*SyncDrainageStatusSignalArgs) ProtoMessage() {} func (x *SyncDrainageStatusSignalArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[16] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1250,7 +1297,7 @@ func (x *SyncDrainageStatusSignalArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncDrainageStatusSignalArgs.ProtoReflect.Descriptor instead. func (*SyncDrainageStatusSignalArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{16} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{17} } func (x *SyncDrainageStatusSignalArgs) GetVersion() string { @@ -1277,7 +1324,7 @@ type QueryDescribeVersionResponse struct { func (x *QueryDescribeVersionResponse) Reset() { *x = QueryDescribeVersionResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[17] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1289,7 +1336,7 @@ func (x *QueryDescribeVersionResponse) String() string { func (*QueryDescribeVersionResponse) ProtoMessage() {} func (x *QueryDescribeVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[17] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1302,7 +1349,7 @@ func (x *QueryDescribeVersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryDescribeVersionResponse.ProtoReflect.Descriptor instead. func (*QueryDescribeVersionResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{17} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{18} } func (x *QueryDescribeVersionResponse) GetVersionState() *VersionLocalState { @@ -1322,7 +1369,7 @@ type QueryDescribeWorkerDeploymentResponse struct { func (x *QueryDescribeWorkerDeploymentResponse) Reset() { *x = QueryDescribeWorkerDeploymentResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[18] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1334,7 +1381,7 @@ func (x *QueryDescribeWorkerDeploymentResponse) String() string { func (*QueryDescribeWorkerDeploymentResponse) ProtoMessage() {} func (x *QueryDescribeWorkerDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[18] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1347,7 +1394,7 @@ func (x *QueryDescribeWorkerDeploymentResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use QueryDescribeWorkerDeploymentResponse.ProtoReflect.Descriptor instead. func (*QueryDescribeWorkerDeploymentResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{18} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{19} } func (x *QueryDescribeWorkerDeploymentResponse) GetState() *WorkerDeploymentLocalState { @@ -1368,7 +1415,7 @@ type StartWorkerDeploymentRequest struct { func (x *StartWorkerDeploymentRequest) Reset() { *x = StartWorkerDeploymentRequest{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[19] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1380,7 +1427,7 @@ func (x *StartWorkerDeploymentRequest) String() string { func (*StartWorkerDeploymentRequest) ProtoMessage() {} func (x *StartWorkerDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[19] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1393,7 +1440,7 @@ func (x *StartWorkerDeploymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartWorkerDeploymentRequest.ProtoReflect.Descriptor instead. func (*StartWorkerDeploymentRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{19} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{20} } func (x *StartWorkerDeploymentRequest) GetDeploymentName() string { @@ -1422,7 +1469,7 @@ type StartWorkerDeploymentVersionRequest struct { func (x *StartWorkerDeploymentVersionRequest) Reset() { *x = StartWorkerDeploymentVersionRequest{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[20] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1434,7 +1481,7 @@ func (x *StartWorkerDeploymentVersionRequest) String() string { func (*StartWorkerDeploymentVersionRequest) ProtoMessage() {} func (x *StartWorkerDeploymentVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[20] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1447,7 +1494,7 @@ func (x *StartWorkerDeploymentVersionRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use StartWorkerDeploymentVersionRequest.ProtoReflect.Descriptor instead. func (*StartWorkerDeploymentVersionRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{20} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{21} } func (x *StartWorkerDeploymentVersionRequest) GetDeploymentName() string { @@ -1473,9 +1520,10 @@ func (x *StartWorkerDeploymentVersionRequest) GetRequestId() string { // used as Worker Deployment Version workflow activity input: type SyncDeploymentVersionUserDataRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - Version *WorkerDeploymentVersion `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - Sync []*SyncDeploymentVersionUserDataRequest_SyncUserData `protobuf:"bytes,2,rep,name=sync,proto3" json:"sync,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DeploymentName string `protobuf:"bytes,4,opt,name=deployment_name,json=deploymentName,proto3" json:"deployment_name,omitempty"` + Version *WorkerDeploymentVersion `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + Sync []*SyncDeploymentVersionUserDataRequest_SyncUserData `protobuf:"bytes,2,rep,name=sync,proto3" json:"sync,omitempty"` // if true, the version will be forgotten from the task queue user data. ForgetVersion bool `protobuf:"varint,3,opt,name=forget_version,json=forgetVersion,proto3" json:"forget_version,omitempty"` unknownFields protoimpl.UnknownFields @@ -1484,7 +1532,7 @@ type SyncDeploymentVersionUserDataRequest struct { func (x *SyncDeploymentVersionUserDataRequest) Reset() { *x = SyncDeploymentVersionUserDataRequest{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[21] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1496,7 +1544,7 @@ func (x *SyncDeploymentVersionUserDataRequest) String() string { func (*SyncDeploymentVersionUserDataRequest) ProtoMessage() {} func (x *SyncDeploymentVersionUserDataRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[21] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1509,7 +1557,14 @@ func (x *SyncDeploymentVersionUserDataRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use SyncDeploymentVersionUserDataRequest.ProtoReflect.Descriptor instead. func (*SyncDeploymentVersionUserDataRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{21} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{22} +} + +func (x *SyncDeploymentVersionUserDataRequest) GetDeploymentName() string { + if x != nil { + return x.DeploymentName + } + return "" } func (x *SyncDeploymentVersionUserDataRequest) GetVersion() *WorkerDeploymentVersion { @@ -1543,7 +1598,7 @@ type SyncDeploymentVersionUserDataResponse struct { func (x *SyncDeploymentVersionUserDataResponse) Reset() { *x = SyncDeploymentVersionUserDataResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[22] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1555,7 +1610,7 @@ func (x *SyncDeploymentVersionUserDataResponse) String() string { func (*SyncDeploymentVersionUserDataResponse) ProtoMessage() {} func (x *SyncDeploymentVersionUserDataResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[22] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1568,7 +1623,7 @@ func (x *SyncDeploymentVersionUserDataResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use SyncDeploymentVersionUserDataResponse.ProtoReflect.Descriptor instead. func (*SyncDeploymentVersionUserDataResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{22} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{23} } func (x *SyncDeploymentVersionUserDataResponse) GetTaskQueueMaxVersions() map[string]int64 { @@ -1588,7 +1643,7 @@ type CheckWorkerDeploymentUserDataPropagationRequest struct { func (x *CheckWorkerDeploymentUserDataPropagationRequest) Reset() { *x = CheckWorkerDeploymentUserDataPropagationRequest{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[23] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1600,7 +1655,7 @@ func (x *CheckWorkerDeploymentUserDataPropagationRequest) String() string { func (*CheckWorkerDeploymentUserDataPropagationRequest) ProtoMessage() {} func (x *CheckWorkerDeploymentUserDataPropagationRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[23] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1613,7 +1668,7 @@ func (x *CheckWorkerDeploymentUserDataPropagationRequest) ProtoReflect() protore // Deprecated: Use CheckWorkerDeploymentUserDataPropagationRequest.ProtoReflect.Descriptor instead. func (*CheckWorkerDeploymentUserDataPropagationRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{23} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{24} } func (x *CheckWorkerDeploymentUserDataPropagationRequest) GetTaskQueueMaxVersions() map[string]int64 { @@ -1634,7 +1689,7 @@ type SyncUnversionedRampActivityArgs struct { func (x *SyncUnversionedRampActivityArgs) Reset() { *x = SyncUnversionedRampActivityArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[24] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1646,7 +1701,7 @@ func (x *SyncUnversionedRampActivityArgs) String() string { func (*SyncUnversionedRampActivityArgs) ProtoMessage() {} func (x *SyncUnversionedRampActivityArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[24] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1659,7 +1714,7 @@ func (x *SyncUnversionedRampActivityArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncUnversionedRampActivityArgs.ProtoReflect.Descriptor instead. func (*SyncUnversionedRampActivityArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{24} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{25} } func (x *SyncUnversionedRampActivityArgs) GetCurrentVersion() string { @@ -1686,7 +1741,7 @@ type SyncUnversionedRampActivityResponse struct { func (x *SyncUnversionedRampActivityResponse) Reset() { *x = SyncUnversionedRampActivityResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[25] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1698,7 +1753,7 @@ func (x *SyncUnversionedRampActivityResponse) String() string { func (*SyncUnversionedRampActivityResponse) ProtoMessage() {} func (x *SyncUnversionedRampActivityResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[25] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1711,7 +1766,7 @@ func (x *SyncUnversionedRampActivityResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use SyncUnversionedRampActivityResponse.ProtoReflect.Descriptor instead. func (*SyncUnversionedRampActivityResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{25} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{26} } func (x *SyncUnversionedRampActivityResponse) GetTaskQueueMaxVersions() map[string]int64 { @@ -1733,7 +1788,7 @@ type UpdateVersionMetadataArgs struct { func (x *UpdateVersionMetadataArgs) Reset() { *x = UpdateVersionMetadataArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[26] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1745,7 +1800,7 @@ func (x *UpdateVersionMetadataArgs) String() string { func (*UpdateVersionMetadataArgs) ProtoMessage() {} func (x *UpdateVersionMetadataArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[26] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1758,7 +1813,7 @@ func (x *UpdateVersionMetadataArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateVersionMetadataArgs.ProtoReflect.Descriptor instead. func (*UpdateVersionMetadataArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{26} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{27} } func (x *UpdateVersionMetadataArgs) GetUpsertEntries() map[string]*v12.Payload { @@ -1792,7 +1847,7 @@ type UpdateVersionMetadataResponse struct { func (x *UpdateVersionMetadataResponse) Reset() { *x = UpdateVersionMetadataResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[27] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1804,7 +1859,7 @@ func (x *UpdateVersionMetadataResponse) String() string { func (*UpdateVersionMetadataResponse) ProtoMessage() {} func (x *UpdateVersionMetadataResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[27] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1817,7 +1872,7 @@ func (x *UpdateVersionMetadataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateVersionMetadataResponse.ProtoReflect.Descriptor instead. func (*UpdateVersionMetadataResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{27} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{28} } func (x *UpdateVersionMetadataResponse) GetMetadata() *v11.VersionMetadata { @@ -1841,7 +1896,7 @@ type SetCurrentVersionArgs struct { func (x *SetCurrentVersionArgs) Reset() { *x = SetCurrentVersionArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[28] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1853,7 +1908,7 @@ func (x *SetCurrentVersionArgs) String() string { func (*SetCurrentVersionArgs) ProtoMessage() {} func (x *SetCurrentVersionArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[28] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1866,7 +1921,7 @@ func (x *SetCurrentVersionArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SetCurrentVersionArgs.ProtoReflect.Descriptor instead. func (*SetCurrentVersionArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{28} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{29} } func (x *SetCurrentVersionArgs) GetIdentity() string { @@ -1915,7 +1970,7 @@ type SetCurrentVersionResponse struct { func (x *SetCurrentVersionResponse) Reset() { *x = SetCurrentVersionResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[29] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1927,7 +1982,7 @@ func (x *SetCurrentVersionResponse) String() string { func (*SetCurrentVersionResponse) ProtoMessage() {} func (x *SetCurrentVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[29] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1940,7 +1995,7 @@ func (x *SetCurrentVersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetCurrentVersionResponse.ProtoReflect.Descriptor instead. func (*SetCurrentVersionResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{29} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{30} } func (x *SetCurrentVersionResponse) GetPreviousVersion() string { @@ -1969,7 +2024,7 @@ type DeleteVersionArgs struct { func (x *DeleteVersionArgs) Reset() { *x = DeleteVersionArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[30] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1981,7 +2036,7 @@ func (x *DeleteVersionArgs) String() string { func (*DeleteVersionArgs) ProtoMessage() {} func (x *DeleteVersionArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[30] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1994,7 +2049,7 @@ func (x *DeleteVersionArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteVersionArgs.ProtoReflect.Descriptor instead. func (*DeleteVersionArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{30} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{31} } func (x *DeleteVersionArgs) GetIdentity() string { @@ -2032,7 +2087,7 @@ type DeleteVersionActivityArgs struct { func (x *DeleteVersionActivityArgs) Reset() { *x = DeleteVersionActivityArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[31] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2044,7 +2099,7 @@ func (x *DeleteVersionActivityArgs) String() string { func (*DeleteVersionActivityArgs) ProtoMessage() {} func (x *DeleteVersionActivityArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[31] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2057,7 +2112,7 @@ func (x *DeleteVersionActivityArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteVersionActivityArgs.ProtoReflect.Descriptor instead. func (*DeleteVersionActivityArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{31} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{32} } func (x *DeleteVersionActivityArgs) GetIdentity() string { @@ -2107,7 +2162,7 @@ type CheckTaskQueuesHavePollersActivityArgs struct { func (x *CheckTaskQueuesHavePollersActivityArgs) Reset() { *x = CheckTaskQueuesHavePollersActivityArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[32] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2119,7 +2174,7 @@ func (x *CheckTaskQueuesHavePollersActivityArgs) String() string { func (*CheckTaskQueuesHavePollersActivityArgs) ProtoMessage() {} func (x *CheckTaskQueuesHavePollersActivityArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[32] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2132,7 +2187,7 @@ func (x *CheckTaskQueuesHavePollersActivityArgs) ProtoReflect() protoreflect.Mes // Deprecated: Use CheckTaskQueuesHavePollersActivityArgs.ProtoReflect.Descriptor instead. func (*CheckTaskQueuesHavePollersActivityArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{32} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{33} } func (x *CheckTaskQueuesHavePollersActivityArgs) GetTaskQueuesAndTypes() map[string]*CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes { @@ -2159,7 +2214,7 @@ type DeleteDeploymentArgs struct { func (x *DeleteDeploymentArgs) Reset() { *x = DeleteDeploymentArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[33] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2171,7 +2226,7 @@ func (x *DeleteDeploymentArgs) String() string { func (*DeleteDeploymentArgs) ProtoMessage() {} func (x *DeleteDeploymentArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[33] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2184,7 +2239,7 @@ func (x *DeleteDeploymentArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteDeploymentArgs.ProtoReflect.Descriptor instead. func (*DeleteDeploymentArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{33} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{34} } func (x *DeleteDeploymentArgs) GetIdentity() string { @@ -2206,7 +2261,7 @@ type SetRampingVersionResponse struct { func (x *SetRampingVersionResponse) Reset() { *x = SetRampingVersionResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[34] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2218,7 +2273,7 @@ func (x *SetRampingVersionResponse) String() string { func (*SetRampingVersionResponse) ProtoMessage() {} func (x *SetRampingVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[34] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2231,7 +2286,7 @@ func (x *SetRampingVersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetRampingVersionResponse.ProtoReflect.Descriptor instead. func (*SetRampingVersionResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{34} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{35} } func (x *SetRampingVersionResponse) GetPreviousVersion() string { @@ -2270,7 +2325,7 @@ type SetRampingVersionArgs struct { func (x *SetRampingVersionArgs) Reset() { *x = SetRampingVersionArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[35] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2282,7 +2337,7 @@ func (x *SetRampingVersionArgs) String() string { func (*SetRampingVersionArgs) ProtoMessage() {} func (x *SetRampingVersionArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[35] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2295,7 +2350,7 @@ func (x *SetRampingVersionArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SetRampingVersionArgs.ProtoReflect.Descriptor instead. func (*SetRampingVersionArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{35} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{36} } func (x *SetRampingVersionArgs) GetIdentity() string { @@ -2354,7 +2409,7 @@ type SetManagerIdentityArgs struct { func (x *SetManagerIdentityArgs) Reset() { *x = SetManagerIdentityArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[36] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2366,7 +2421,7 @@ func (x *SetManagerIdentityArgs) String() string { func (*SetManagerIdentityArgs) ProtoMessage() {} func (x *SetManagerIdentityArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[36] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2379,7 +2434,7 @@ func (x *SetManagerIdentityArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SetManagerIdentityArgs.ProtoReflect.Descriptor instead. func (*SetManagerIdentityArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{36} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{37} } func (x *SetManagerIdentityArgs) GetIdentity() string { @@ -2414,7 +2469,7 @@ type SetManagerIdentityResponse struct { func (x *SetManagerIdentityResponse) Reset() { *x = SetManagerIdentityResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[37] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2426,7 +2481,7 @@ func (x *SetManagerIdentityResponse) String() string { func (*SetManagerIdentityResponse) ProtoMessage() {} func (x *SetManagerIdentityResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[37] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2439,7 +2494,7 @@ func (x *SetManagerIdentityResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetManagerIdentityResponse.ProtoReflect.Descriptor instead. func (*SetManagerIdentityResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{37} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{38} } func (x *SetManagerIdentityResponse) GetPreviousManagerIdentity() string { @@ -2470,7 +2525,7 @@ type SyncVersionStateActivityArgs struct { func (x *SyncVersionStateActivityArgs) Reset() { *x = SyncVersionStateActivityArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[38] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2482,7 +2537,7 @@ func (x *SyncVersionStateActivityArgs) String() string { func (*SyncVersionStateActivityArgs) ProtoMessage() {} func (x *SyncVersionStateActivityArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[38] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2495,7 +2550,7 @@ func (x *SyncVersionStateActivityArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncVersionStateActivityArgs.ProtoReflect.Descriptor instead. func (*SyncVersionStateActivityArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{38} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{39} } func (x *SyncVersionStateActivityArgs) GetDeploymentName() string { @@ -2536,7 +2591,7 @@ type SyncVersionStateActivityResult struct { func (x *SyncVersionStateActivityResult) Reset() { *x = SyncVersionStateActivityResult{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[39] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2548,7 +2603,7 @@ func (x *SyncVersionStateActivityResult) String() string { func (*SyncVersionStateActivityResult) ProtoMessage() {} func (x *SyncVersionStateActivityResult) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[39] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2561,7 +2616,7 @@ func (x *SyncVersionStateActivityResult) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncVersionStateActivityResult.ProtoReflect.Descriptor instead. func (*SyncVersionStateActivityResult) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{39} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{40} } func (x *SyncVersionStateActivityResult) GetVersionState() *VersionLocalState { @@ -2582,7 +2637,7 @@ type IsVersionMissingTaskQueuesArgs struct { func (x *IsVersionMissingTaskQueuesArgs) Reset() { *x = IsVersionMissingTaskQueuesArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[40] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2594,7 +2649,7 @@ func (x *IsVersionMissingTaskQueuesArgs) String() string { func (*IsVersionMissingTaskQueuesArgs) ProtoMessage() {} func (x *IsVersionMissingTaskQueuesArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[40] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2607,7 +2662,7 @@ func (x *IsVersionMissingTaskQueuesArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use IsVersionMissingTaskQueuesArgs.ProtoReflect.Descriptor instead. func (*IsVersionMissingTaskQueuesArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{40} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{41} } func (x *IsVersionMissingTaskQueuesArgs) GetPrevCurrentVersion() string { @@ -2634,7 +2689,7 @@ type IsVersionMissingTaskQueuesResult struct { func (x *IsVersionMissingTaskQueuesResult) Reset() { *x = IsVersionMissingTaskQueuesResult{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[41] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2646,7 +2701,7 @@ func (x *IsVersionMissingTaskQueuesResult) String() string { func (*IsVersionMissingTaskQueuesResult) ProtoMessage() {} func (x *IsVersionMissingTaskQueuesResult) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[41] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2659,7 +2714,7 @@ func (x *IsVersionMissingTaskQueuesResult) ProtoReflect() protoreflect.Message { // Deprecated: Use IsVersionMissingTaskQueuesResult.ProtoReflect.Descriptor instead. func (*IsVersionMissingTaskQueuesResult) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{41} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{42} } func (x *IsVersionMissingTaskQueuesResult) GetIsMissingTaskQueues() bool { @@ -2684,7 +2739,7 @@ type WorkerDeploymentWorkflowMemo struct { func (x *WorkerDeploymentWorkflowMemo) Reset() { *x = WorkerDeploymentWorkflowMemo{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[42] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2696,7 +2751,7 @@ func (x *WorkerDeploymentWorkflowMemo) String() string { func (*WorkerDeploymentWorkflowMemo) ProtoMessage() {} func (x *WorkerDeploymentWorkflowMemo) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[42] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2709,7 +2764,7 @@ func (x *WorkerDeploymentWorkflowMemo) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerDeploymentWorkflowMemo.ProtoReflect.Descriptor instead. func (*WorkerDeploymentWorkflowMemo) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{42} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{43} } func (x *WorkerDeploymentWorkflowMemo) GetDeploymentName() string { @@ -2769,7 +2824,7 @@ type WorkerDeploymentSummary struct { func (x *WorkerDeploymentSummary) Reset() { *x = WorkerDeploymentSummary{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[43] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2781,7 +2836,7 @@ func (x *WorkerDeploymentSummary) String() string { func (*WorkerDeploymentSummary) ProtoMessage() {} func (x *WorkerDeploymentSummary) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[43] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2794,7 +2849,7 @@ func (x *WorkerDeploymentSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerDeploymentSummary.ProtoReflect.Descriptor instead. func (*WorkerDeploymentSummary) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{43} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{44} } func (x *WorkerDeploymentSummary) GetName() string { @@ -2851,7 +2906,7 @@ type AddVersionToWorkerDeploymentRequest struct { func (x *AddVersionToWorkerDeploymentRequest) Reset() { *x = AddVersionToWorkerDeploymentRequest{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[44] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2863,7 +2918,7 @@ func (x *AddVersionToWorkerDeploymentRequest) String() string { func (*AddVersionToWorkerDeploymentRequest) ProtoMessage() {} func (x *AddVersionToWorkerDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[44] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2876,7 +2931,7 @@ func (x *AddVersionToWorkerDeploymentRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use AddVersionToWorkerDeploymentRequest.ProtoReflect.Descriptor instead. func (*AddVersionToWorkerDeploymentRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{44} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{45} } func (x *AddVersionToWorkerDeploymentRequest) GetDeploymentName() string { @@ -2909,7 +2964,7 @@ type AddVersionToWorkerDeploymentResponse struct { func (x *AddVersionToWorkerDeploymentResponse) Reset() { *x = AddVersionToWorkerDeploymentResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[45] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2921,7 +2976,7 @@ func (x *AddVersionToWorkerDeploymentResponse) String() string { func (*AddVersionToWorkerDeploymentResponse) ProtoMessage() {} func (x *AddVersionToWorkerDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[45] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2934,7 +2989,7 @@ func (x *AddVersionToWorkerDeploymentResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use AddVersionToWorkerDeploymentResponse.ProtoReflect.Descriptor instead. func (*AddVersionToWorkerDeploymentResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{45} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{46} } // //////////////////////////////////////////////////////////////////////// @@ -2952,7 +3007,7 @@ type TaskQueueData struct { func (x *TaskQueueData) Reset() { *x = TaskQueueData{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[46] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2964,7 +3019,7 @@ func (x *TaskQueueData) String() string { func (*TaskQueueData) ProtoMessage() {} func (x *TaskQueueData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[46] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2977,7 +3032,7 @@ func (x *TaskQueueData) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskQueueData.ProtoReflect.Descriptor instead. func (*TaskQueueData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{46} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{47} } func (x *TaskQueueData) GetFirstPollerTime() *timestamppb.Timestamp { @@ -3009,7 +3064,7 @@ type DeploymentLocalState struct { func (x *DeploymentLocalState) Reset() { *x = DeploymentLocalState{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3021,7 +3076,7 @@ func (x *DeploymentLocalState) String() string { func (*DeploymentLocalState) ProtoMessage() {} func (x *DeploymentLocalState) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3034,7 +3089,7 @@ func (x *DeploymentLocalState) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentLocalState.ProtoReflect.Descriptor instead. func (*DeploymentLocalState) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{47} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{48} } func (x *DeploymentLocalState) GetDeployment() *v11.Deployment { @@ -3098,7 +3153,7 @@ type DeploymentWorkflowArgs struct { func (x *DeploymentWorkflowArgs) Reset() { *x = DeploymentWorkflowArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3110,7 +3165,7 @@ func (x *DeploymentWorkflowArgs) String() string { func (*DeploymentWorkflowArgs) ProtoMessage() {} func (x *DeploymentWorkflowArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3123,7 +3178,7 @@ func (x *DeploymentWorkflowArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentWorkflowArgs.ProtoReflect.Descriptor instead. func (*DeploymentWorkflowArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{48} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{49} } func (x *DeploymentWorkflowArgs) GetNamespaceName() string { @@ -3160,7 +3215,7 @@ type DeploymentSeriesWorkflowArgs struct { func (x *DeploymentSeriesWorkflowArgs) Reset() { *x = DeploymentSeriesWorkflowArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[49] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3172,7 +3227,7 @@ func (x *DeploymentSeriesWorkflowArgs) String() string { func (*DeploymentSeriesWorkflowArgs) ProtoMessage() {} func (x *DeploymentSeriesWorkflowArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[49] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3185,7 +3240,7 @@ func (x *DeploymentSeriesWorkflowArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentSeriesWorkflowArgs.ProtoReflect.Descriptor instead. func (*DeploymentSeriesWorkflowArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{49} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{50} } func (x *DeploymentSeriesWorkflowArgs) GetNamespaceName() string { @@ -3226,7 +3281,7 @@ type SeriesLocalState struct { func (x *SeriesLocalState) Reset() { *x = SeriesLocalState{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3238,7 +3293,7 @@ func (x *SeriesLocalState) String() string { func (*SeriesLocalState) ProtoMessage() {} func (x *SeriesLocalState) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3251,7 +3306,7 @@ func (x *SeriesLocalState) ProtoReflect() protoreflect.Message { // Deprecated: Use SeriesLocalState.ProtoReflect.Descriptor instead. func (*SeriesLocalState) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{50} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{51} } func (x *SeriesLocalState) GetCurrentBuildId() string { @@ -3281,7 +3336,7 @@ type RegisterWorkerInDeploymentArgs struct { func (x *RegisterWorkerInDeploymentArgs) Reset() { *x = RegisterWorkerInDeploymentArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[51] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3293,7 +3348,7 @@ func (x *RegisterWorkerInDeploymentArgs) String() string { func (*RegisterWorkerInDeploymentArgs) ProtoMessage() {} func (x *RegisterWorkerInDeploymentArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[51] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3306,7 +3361,7 @@ func (x *RegisterWorkerInDeploymentArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterWorkerInDeploymentArgs.ProtoReflect.Descriptor instead. func (*RegisterWorkerInDeploymentArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{51} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{52} } func (x *RegisterWorkerInDeploymentArgs) GetTaskQueueName() string { @@ -3350,7 +3405,7 @@ type SyncDeploymentStateArgs struct { func (x *SyncDeploymentStateArgs) Reset() { *x = SyncDeploymentStateArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3362,7 +3417,7 @@ func (x *SyncDeploymentStateArgs) String() string { func (*SyncDeploymentStateArgs) ProtoMessage() {} func (x *SyncDeploymentStateArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3375,7 +3430,7 @@ func (x *SyncDeploymentStateArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncDeploymentStateArgs.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{52} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{53} } func (x *SyncDeploymentStateArgs) GetSetCurrent() *SyncDeploymentStateArgs_SetCurrent { @@ -3402,7 +3457,7 @@ type SyncDeploymentStateResponse struct { func (x *SyncDeploymentStateResponse) Reset() { *x = SyncDeploymentStateResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[53] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3414,7 +3469,7 @@ func (x *SyncDeploymentStateResponse) String() string { func (*SyncDeploymentStateResponse) ProtoMessage() {} func (x *SyncDeploymentStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[53] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3427,7 +3482,7 @@ func (x *SyncDeploymentStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncDeploymentStateResponse.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{53} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{54} } func (x *SyncDeploymentStateResponse) GetDeploymentLocalState() *DeploymentLocalState { @@ -3447,7 +3502,7 @@ type QueryDescribeDeploymentResponse struct { func (x *QueryDescribeDeploymentResponse) Reset() { *x = QueryDescribeDeploymentResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[54] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3459,7 +3514,7 @@ func (x *QueryDescribeDeploymentResponse) String() string { func (*QueryDescribeDeploymentResponse) ProtoMessage() {} func (x *QueryDescribeDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[54] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3472,7 +3527,7 @@ func (x *QueryDescribeDeploymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryDescribeDeploymentResponse.ProtoReflect.Descriptor instead. func (*QueryDescribeDeploymentResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{54} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{55} } func (x *QueryDescribeDeploymentResponse) GetDeploymentLocalState() *DeploymentLocalState { @@ -3494,7 +3549,7 @@ type DeploymentWorkflowMemo struct { func (x *DeploymentWorkflowMemo) Reset() { *x = DeploymentWorkflowMemo{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[55] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3506,7 +3561,7 @@ func (x *DeploymentWorkflowMemo) String() string { func (*DeploymentWorkflowMemo) ProtoMessage() {} func (x *DeploymentWorkflowMemo) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[55] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3519,7 +3574,7 @@ func (x *DeploymentWorkflowMemo) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentWorkflowMemo.ProtoReflect.Descriptor instead. func (*DeploymentWorkflowMemo) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{55} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{56} } func (x *DeploymentWorkflowMemo) GetDeployment() *v11.Deployment { @@ -3554,7 +3609,7 @@ type StartDeploymentSeriesRequest struct { func (x *StartDeploymentSeriesRequest) Reset() { *x = StartDeploymentSeriesRequest{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[56] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3566,7 +3621,7 @@ func (x *StartDeploymentSeriesRequest) String() string { func (*StartDeploymentSeriesRequest) ProtoMessage() {} func (x *StartDeploymentSeriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[56] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3579,7 +3634,7 @@ func (x *StartDeploymentSeriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartDeploymentSeriesRequest.ProtoReflect.Descriptor instead. func (*StartDeploymentSeriesRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{56} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{57} } func (x *StartDeploymentSeriesRequest) GetSeriesName() string { @@ -3607,7 +3662,7 @@ type SyncUserDataRequest struct { func (x *SyncUserDataRequest) Reset() { *x = SyncUserDataRequest{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[57] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3619,7 +3674,7 @@ func (x *SyncUserDataRequest) String() string { func (*SyncUserDataRequest) ProtoMessage() {} func (x *SyncUserDataRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[57] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3632,7 +3687,7 @@ func (x *SyncUserDataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncUserDataRequest.ProtoReflect.Descriptor instead. func (*SyncUserDataRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{57} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{58} } func (x *SyncUserDataRequest) GetDeployment() *v11.Deployment { @@ -3659,7 +3714,7 @@ type SyncUserDataResponse struct { func (x *SyncUserDataResponse) Reset() { *x = SyncUserDataResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[58] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3671,7 +3726,7 @@ func (x *SyncUserDataResponse) String() string { func (*SyncUserDataResponse) ProtoMessage() {} func (x *SyncUserDataResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[58] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3684,7 +3739,7 @@ func (x *SyncUserDataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncUserDataResponse.ProtoReflect.Descriptor instead. func (*SyncUserDataResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{58} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{59} } func (x *SyncUserDataResponse) GetTaskQueueMaxVersions() map[string]int64 { @@ -3704,7 +3759,7 @@ type CheckUserDataPropagationRequest struct { func (x *CheckUserDataPropagationRequest) Reset() { *x = CheckUserDataPropagationRequest{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[59] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3716,7 +3771,7 @@ func (x *CheckUserDataPropagationRequest) String() string { func (*CheckUserDataPropagationRequest) ProtoMessage() {} func (x *CheckUserDataPropagationRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[59] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3729,7 +3784,7 @@ func (x *CheckUserDataPropagationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckUserDataPropagationRequest.ProtoReflect.Descriptor instead. func (*CheckUserDataPropagationRequest) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{59} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{60} } func (x *CheckUserDataPropagationRequest) GetTaskQueueMaxVersions() map[string]int64 { @@ -3752,7 +3807,7 @@ type SetCurrentDeploymentArgs struct { func (x *SetCurrentDeploymentArgs) Reset() { *x = SetCurrentDeploymentArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[60] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3764,7 +3819,7 @@ func (x *SetCurrentDeploymentArgs) String() string { func (*SetCurrentDeploymentArgs) ProtoMessage() {} func (x *SetCurrentDeploymentArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[60] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3777,7 +3832,7 @@ func (x *SetCurrentDeploymentArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SetCurrentDeploymentArgs.ProtoReflect.Descriptor instead. func (*SetCurrentDeploymentArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{60} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{61} } func (x *SetCurrentDeploymentArgs) GetIdentity() string { @@ -3819,7 +3874,7 @@ type SetCurrentDeploymentResponse struct { func (x *SetCurrentDeploymentResponse) Reset() { *x = SetCurrentDeploymentResponse{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[61] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3831,7 +3886,7 @@ func (x *SetCurrentDeploymentResponse) String() string { func (*SetCurrentDeploymentResponse) ProtoMessage() {} func (x *SetCurrentDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[61] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3844,7 +3899,7 @@ func (x *SetCurrentDeploymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetCurrentDeploymentResponse.ProtoReflect.Descriptor instead. func (*SetCurrentDeploymentResponse) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{61} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{62} } func (x *SetCurrentDeploymentResponse) GetCurrentDeploymentState() *DeploymentLocalState { @@ -3873,7 +3928,7 @@ type SyncDeploymentStateActivityArgs struct { func (x *SyncDeploymentStateActivityArgs) Reset() { *x = SyncDeploymentStateActivityArgs{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[62] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3885,7 +3940,7 @@ func (x *SyncDeploymentStateActivityArgs) String() string { func (*SyncDeploymentStateActivityArgs) ProtoMessage() {} func (x *SyncDeploymentStateActivityArgs) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[62] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3898,7 +3953,7 @@ func (x *SyncDeploymentStateActivityArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncDeploymentStateActivityArgs.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateActivityArgs) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{62} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{63} } func (x *SyncDeploymentStateActivityArgs) GetDeployment() *v11.Deployment { @@ -3932,7 +3987,7 @@ type SyncDeploymentStateActivityResult struct { func (x *SyncDeploymentStateActivityResult) Reset() { *x = SyncDeploymentStateActivityResult{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[63] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3944,7 +3999,7 @@ func (x *SyncDeploymentStateActivityResult) String() string { func (*SyncDeploymentStateActivityResult) ProtoMessage() {} func (x *SyncDeploymentStateActivityResult) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[63] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3957,7 +4012,7 @@ func (x *SyncDeploymentStateActivityResult) ProtoReflect() protoreflect.Message // Deprecated: Use SyncDeploymentStateActivityResult.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateActivityResult) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{63} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{64} } func (x *SyncDeploymentStateActivityResult) GetState() *DeploymentLocalState { @@ -3979,7 +4034,7 @@ type DeploymentSeriesWorkflowMemo struct { func (x *DeploymentSeriesWorkflowMemo) Reset() { *x = DeploymentSeriesWorkflowMemo{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[64] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3991,7 +4046,7 @@ func (x *DeploymentSeriesWorkflowMemo) String() string { func (*DeploymentSeriesWorkflowMemo) ProtoMessage() {} func (x *DeploymentSeriesWorkflowMemo) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[64] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4004,7 +4059,7 @@ func (x *DeploymentSeriesWorkflowMemo) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentSeriesWorkflowMemo.ProtoReflect.Descriptor instead. func (*DeploymentSeriesWorkflowMemo) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{64} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{65} } func (x *DeploymentSeriesWorkflowMemo) GetSeriesName() string { @@ -4038,7 +4093,7 @@ type VersionLocalState_TaskQueueFamilyData struct { func (x *VersionLocalState_TaskQueueFamilyData) Reset() { *x = VersionLocalState_TaskQueueFamilyData{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[66] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4050,7 +4105,7 @@ func (x *VersionLocalState_TaskQueueFamilyData) String() string { func (*VersionLocalState_TaskQueueFamilyData) ProtoMessage() {} func (x *VersionLocalState_TaskQueueFamilyData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[66] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4063,7 +4118,7 @@ func (x *VersionLocalState_TaskQueueFamilyData) ProtoReflect() protoreflect.Mess // Deprecated: Use VersionLocalState_TaskQueueFamilyData.ProtoReflect.Descriptor instead. func (*VersionLocalState_TaskQueueFamilyData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{2, 1} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{3, 1} } func (x *VersionLocalState_TaskQueueFamilyData) GetTaskQueues() map[int32]*TaskQueueVersionData { @@ -4084,7 +4139,7 @@ type SyncDeploymentVersionUserDataRequest_SyncUserData struct { func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) Reset() { *x = SyncDeploymentVersionUserDataRequest_SyncUserData{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[69] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4096,7 +4151,7 @@ func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) String() string { func (*SyncDeploymentVersionUserDataRequest_SyncUserData) ProtoMessage() {} func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[69] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4109,7 +4164,7 @@ func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) ProtoReflect() proto // Deprecated: Use SyncDeploymentVersionUserDataRequest_SyncUserData.ProtoReflect.Descriptor instead. func (*SyncDeploymentVersionUserDataRequest_SyncUserData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{21, 0} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{22, 0} } func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) GetName() string { @@ -4142,7 +4197,7 @@ type CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes struct { func (x *CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) Reset() { *x = CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[75] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4154,7 +4209,7 @@ func (x *CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) String() string func (*CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) ProtoMessage() {} func (x *CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[75] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4167,7 +4222,7 @@ func (x *CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) ProtoReflect() p // Deprecated: Use CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes.ProtoReflect.Descriptor instead. func (*CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{32, 1} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{33, 1} } func (x *CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) GetTypes() []v1.TaskQueueType { @@ -4189,7 +4244,7 @@ type DeploymentLocalState_TaskQueueFamilyData struct { func (x *DeploymentLocalState_TaskQueueFamilyData) Reset() { *x = DeploymentLocalState_TaskQueueFamilyData{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[78] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4201,7 +4256,7 @@ func (x *DeploymentLocalState_TaskQueueFamilyData) String() string { func (*DeploymentLocalState_TaskQueueFamilyData) ProtoMessage() {} func (x *DeploymentLocalState_TaskQueueFamilyData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[78] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4214,7 +4269,7 @@ func (x *DeploymentLocalState_TaskQueueFamilyData) ProtoReflect() protoreflect.M // Deprecated: Use DeploymentLocalState_TaskQueueFamilyData.ProtoReflect.Descriptor instead. func (*DeploymentLocalState_TaskQueueFamilyData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{47, 2} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{48, 2} } func (x *DeploymentLocalState_TaskQueueFamilyData) GetTaskQueues() map[int32]*TaskQueueData { @@ -4236,7 +4291,7 @@ type SyncDeploymentStateArgs_SetCurrent struct { func (x *SyncDeploymentStateArgs_SetCurrent) Reset() { *x = SyncDeploymentStateArgs_SetCurrent{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[80] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4248,7 +4303,7 @@ func (x *SyncDeploymentStateArgs_SetCurrent) String() string { func (*SyncDeploymentStateArgs_SetCurrent) ProtoMessage() {} func (x *SyncDeploymentStateArgs_SetCurrent) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[80] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4261,7 +4316,7 @@ func (x *SyncDeploymentStateArgs_SetCurrent) ProtoReflect() protoreflect.Message // Deprecated: Use SyncDeploymentStateArgs_SetCurrent.ProtoReflect.Descriptor instead. func (*SyncDeploymentStateArgs_SetCurrent) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{52, 0} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{53, 0} } func (x *SyncDeploymentStateArgs_SetCurrent) GetLastBecameCurrentTime() *timestamppb.Timestamp { @@ -4282,7 +4337,7 @@ type SyncUserDataRequest_SyncUserData struct { func (x *SyncUserDataRequest_SyncUserData) Reset() { *x = SyncUserDataRequest_SyncUserData{} - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[81] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4294,7 +4349,7 @@ func (x *SyncUserDataRequest_SyncUserData) String() string { func (*SyncUserDataRequest_SyncUserData) ProtoMessage() {} func (x *SyncUserDataRequest_SyncUserData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[81] + mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4307,7 +4362,7 @@ func (x *SyncUserDataRequest_SyncUserData) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncUserDataRequest_SyncUserData.ProtoReflect.Descriptor instead. func (*SyncUserDataRequest_SyncUserData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{57, 0} + return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{58, 0} } func (x *SyncUserDataRequest_SyncUserData) GetName() string { @@ -4345,6 +4400,8 @@ const file_temporal_server_api_deployment_v1_message_proto_rawDesc = "" + "\x12current_since_time\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\x10currentSinceTime\x12H\n" + "\x12ramping_since_time\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\x10rampingSinceTime\x12'\n" + "\x0framp_percentage\x18\x05 \x01(\x02R\x0erampPercentage\x12L\n" + + "\x06status\x18\x06 \x01(\x0e24.temporal.api.enums.v1.WorkerDeploymentVersionStatusR\x06status\"k\n" + + "\x1bWorkerDeploymentVersionData\x12L\n" + "\x06status\x18\x06 \x01(\x0e24.temporal.api.enums.v1.WorkerDeploymentVersionStatusR\x06status\"\xbf\v\n" + "\x11VersionLocalState\x12T\n" + "\aversion\x18\x01 \x01(\v2:.temporal.server.api.deployment.v1.WorkerDeploymentVersionR\aversion\x12;\n" + @@ -4449,8 +4506,9 @@ const file_temporal_server_api_deployment_v1_message_proto_rawDesc = "" + "\x0fdeployment_name\x18\x01 \x01(\tR\x0edeploymentName\x12\x19\n" + "\bbuild_id\x18\x02 \x01(\tR\abuildId\x12\x1d\n" + "\n" + - "request_id\x18\x03 \x01(\tR\trequestId\"\xbc\x03\n" + - "$SyncDeploymentVersionUserDataRequest\x12T\n" + + "request_id\x18\x03 \x01(\tR\trequestId\"\xe5\x03\n" + + "$SyncDeploymentVersionUserDataRequest\x12'\n" + + "\x0fdeployment_name\x18\x04 \x01(\tR\x0edeploymentName\x12T\n" + "\aversion\x18\x01 \x01(\v2:.temporal.server.api.deployment.v1.WorkerDeploymentVersionR\aversion\x12h\n" + "\x04sync\x18\x02 \x03(\v2T.temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserDataR\x04sync\x12%\n" + "\x0eforget_version\x18\x03 \x01(\bR\rforgetVersion\x1a\xac\x01\n" + @@ -4696,222 +4754,224 @@ func file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP() []byte { return file_temporal_server_api_deployment_v1_message_proto_rawDescData } -var file_temporal_server_api_deployment_v1_message_proto_msgTypes = make([]protoimpl.MessageInfo, 84) +var file_temporal_server_api_deployment_v1_message_proto_msgTypes = make([]protoimpl.MessageInfo, 85) var file_temporal_server_api_deployment_v1_message_proto_goTypes = []any{ (*WorkerDeploymentVersion)(nil), // 0: temporal.server.api.deployment.v1.WorkerDeploymentVersion (*DeploymentVersionData)(nil), // 1: temporal.server.api.deployment.v1.DeploymentVersionData - (*VersionLocalState)(nil), // 2: temporal.server.api.deployment.v1.VersionLocalState - (*TaskQueueVersionData)(nil), // 3: temporal.server.api.deployment.v1.TaskQueueVersionData - (*WorkerDeploymentVersionWorkflowArgs)(nil), // 4: temporal.server.api.deployment.v1.WorkerDeploymentVersionWorkflowArgs - (*WorkerDeploymentWorkflowArgs)(nil), // 5: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowArgs - (*WorkerDeploymentLocalState)(nil), // 6: temporal.server.api.deployment.v1.WorkerDeploymentLocalState - (*WorkerDeploymentVersionSummary)(nil), // 7: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary - (*RegisterWorkerInVersionArgs)(nil), // 8: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs - (*RegisterWorkerInWorkerDeploymentArgs)(nil), // 9: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs - (*DescribeVersionFromWorkerDeploymentActivityArgs)(nil), // 10: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityArgs - (*DescribeVersionFromWorkerDeploymentActivityResult)(nil), // 11: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityResult - (*SyncVersionStateUpdateArgs)(nil), // 12: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs - (*SyncVersionStateResponse)(nil), // 13: temporal.server.api.deployment.v1.SyncVersionStateResponse - (*AddVersionUpdateArgs)(nil), // 14: temporal.server.api.deployment.v1.AddVersionUpdateArgs - (*SyncDrainageInfoSignalArgs)(nil), // 15: temporal.server.api.deployment.v1.SyncDrainageInfoSignalArgs - (*SyncDrainageStatusSignalArgs)(nil), // 16: temporal.server.api.deployment.v1.SyncDrainageStatusSignalArgs - (*QueryDescribeVersionResponse)(nil), // 17: temporal.server.api.deployment.v1.QueryDescribeVersionResponse - (*QueryDescribeWorkerDeploymentResponse)(nil), // 18: temporal.server.api.deployment.v1.QueryDescribeWorkerDeploymentResponse - (*StartWorkerDeploymentRequest)(nil), // 19: temporal.server.api.deployment.v1.StartWorkerDeploymentRequest - (*StartWorkerDeploymentVersionRequest)(nil), // 20: temporal.server.api.deployment.v1.StartWorkerDeploymentVersionRequest - (*SyncDeploymentVersionUserDataRequest)(nil), // 21: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest - (*SyncDeploymentVersionUserDataResponse)(nil), // 22: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse - (*CheckWorkerDeploymentUserDataPropagationRequest)(nil), // 23: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest - (*SyncUnversionedRampActivityArgs)(nil), // 24: temporal.server.api.deployment.v1.SyncUnversionedRampActivityArgs - (*SyncUnversionedRampActivityResponse)(nil), // 25: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse - (*UpdateVersionMetadataArgs)(nil), // 26: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs - (*UpdateVersionMetadataResponse)(nil), // 27: temporal.server.api.deployment.v1.UpdateVersionMetadataResponse - (*SetCurrentVersionArgs)(nil), // 28: temporal.server.api.deployment.v1.SetCurrentVersionArgs - (*SetCurrentVersionResponse)(nil), // 29: temporal.server.api.deployment.v1.SetCurrentVersionResponse - (*DeleteVersionArgs)(nil), // 30: temporal.server.api.deployment.v1.DeleteVersionArgs - (*DeleteVersionActivityArgs)(nil), // 31: temporal.server.api.deployment.v1.DeleteVersionActivityArgs - (*CheckTaskQueuesHavePollersActivityArgs)(nil), // 32: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs - (*DeleteDeploymentArgs)(nil), // 33: temporal.server.api.deployment.v1.DeleteDeploymentArgs - (*SetRampingVersionResponse)(nil), // 34: temporal.server.api.deployment.v1.SetRampingVersionResponse - (*SetRampingVersionArgs)(nil), // 35: temporal.server.api.deployment.v1.SetRampingVersionArgs - (*SetManagerIdentityArgs)(nil), // 36: temporal.server.api.deployment.v1.SetManagerIdentityArgs - (*SetManagerIdentityResponse)(nil), // 37: temporal.server.api.deployment.v1.SetManagerIdentityResponse - (*SyncVersionStateActivityArgs)(nil), // 38: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs - (*SyncVersionStateActivityResult)(nil), // 39: temporal.server.api.deployment.v1.SyncVersionStateActivityResult - (*IsVersionMissingTaskQueuesArgs)(nil), // 40: temporal.server.api.deployment.v1.IsVersionMissingTaskQueuesArgs - (*IsVersionMissingTaskQueuesResult)(nil), // 41: temporal.server.api.deployment.v1.IsVersionMissingTaskQueuesResult - (*WorkerDeploymentWorkflowMemo)(nil), // 42: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo - (*WorkerDeploymentSummary)(nil), // 43: temporal.server.api.deployment.v1.WorkerDeploymentSummary - (*AddVersionToWorkerDeploymentRequest)(nil), // 44: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentRequest - (*AddVersionToWorkerDeploymentResponse)(nil), // 45: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentResponse - (*TaskQueueData)(nil), // 46: temporal.server.api.deployment.v1.TaskQueueData - (*DeploymentLocalState)(nil), // 47: temporal.server.api.deployment.v1.DeploymentLocalState - (*DeploymentWorkflowArgs)(nil), // 48: temporal.server.api.deployment.v1.DeploymentWorkflowArgs - (*DeploymentSeriesWorkflowArgs)(nil), // 49: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowArgs - (*SeriesLocalState)(nil), // 50: temporal.server.api.deployment.v1.SeriesLocalState - (*RegisterWorkerInDeploymentArgs)(nil), // 51: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs - (*SyncDeploymentStateArgs)(nil), // 52: temporal.server.api.deployment.v1.SyncDeploymentStateArgs - (*SyncDeploymentStateResponse)(nil), // 53: temporal.server.api.deployment.v1.SyncDeploymentStateResponse - (*QueryDescribeDeploymentResponse)(nil), // 54: temporal.server.api.deployment.v1.QueryDescribeDeploymentResponse - (*DeploymentWorkflowMemo)(nil), // 55: temporal.server.api.deployment.v1.DeploymentWorkflowMemo - (*StartDeploymentSeriesRequest)(nil), // 56: temporal.server.api.deployment.v1.StartDeploymentSeriesRequest - (*SyncUserDataRequest)(nil), // 57: temporal.server.api.deployment.v1.SyncUserDataRequest - (*SyncUserDataResponse)(nil), // 58: temporal.server.api.deployment.v1.SyncUserDataResponse - (*CheckUserDataPropagationRequest)(nil), // 59: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest - (*SetCurrentDeploymentArgs)(nil), // 60: temporal.server.api.deployment.v1.SetCurrentDeploymentArgs - (*SetCurrentDeploymentResponse)(nil), // 61: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse - (*SyncDeploymentStateActivityArgs)(nil), // 62: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs - (*SyncDeploymentStateActivityResult)(nil), // 63: temporal.server.api.deployment.v1.SyncDeploymentStateActivityResult - (*DeploymentSeriesWorkflowMemo)(nil), // 64: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowMemo - nil, // 65: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry - (*VersionLocalState_TaskQueueFamilyData)(nil), // 66: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData - nil, // 67: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry - nil, // 68: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry - (*SyncDeploymentVersionUserDataRequest_SyncUserData)(nil), // 69: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData - nil, // 70: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry - nil, // 71: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry - nil, // 72: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry - nil, // 73: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry - nil, // 74: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry - (*CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes)(nil), // 75: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes - nil, // 76: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry - nil, // 77: temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry - (*DeploymentLocalState_TaskQueueFamilyData)(nil), // 78: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData - nil, // 79: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry - (*SyncDeploymentStateArgs_SetCurrent)(nil), // 80: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent - (*SyncUserDataRequest_SyncUserData)(nil), // 81: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData - nil, // 82: temporal.server.api.deployment.v1.SyncUserDataResponse.TaskQueueMaxVersionsEntry - nil, // 83: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.TaskQueueMaxVersionsEntry - (*timestamppb.Timestamp)(nil), // 84: google.protobuf.Timestamp - (v1.WorkerDeploymentVersionStatus)(0), // 85: temporal.api.enums.v1.WorkerDeploymentVersionStatus - (*v11.VersionDrainageInfo)(nil), // 86: temporal.api.deployment.v1.VersionDrainageInfo - (*v11.VersionMetadata)(nil), // 87: temporal.api.deployment.v1.VersionMetadata - (*v11.RoutingConfig)(nil), // 88: temporal.api.deployment.v1.RoutingConfig - (v1.VersionDrainageStatus)(0), // 89: temporal.api.enums.v1.VersionDrainageStatus - (v1.TaskQueueType)(0), // 90: temporal.api.enums.v1.TaskQueueType - (*v11.WorkerDeploymentVersionInfo_VersionTaskQueueInfo)(nil), // 91: temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo - (*v11.WorkerDeploymentInfo_WorkerDeploymentVersionSummary)(nil), // 92: temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - (*v11.Deployment)(nil), // 93: temporal.api.deployment.v1.Deployment - (*v11.UpdateDeploymentMetadata)(nil), // 94: temporal.api.deployment.v1.UpdateDeploymentMetadata - (*v12.Payload)(nil), // 95: temporal.api.common.v1.Payload + (*WorkerDeploymentVersionData)(nil), // 2: temporal.server.api.deployment.v1.WorkerDeploymentVersionData + (*VersionLocalState)(nil), // 3: temporal.server.api.deployment.v1.VersionLocalState + (*TaskQueueVersionData)(nil), // 4: temporal.server.api.deployment.v1.TaskQueueVersionData + (*WorkerDeploymentVersionWorkflowArgs)(nil), // 5: temporal.server.api.deployment.v1.WorkerDeploymentVersionWorkflowArgs + (*WorkerDeploymentWorkflowArgs)(nil), // 6: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowArgs + (*WorkerDeploymentLocalState)(nil), // 7: temporal.server.api.deployment.v1.WorkerDeploymentLocalState + (*WorkerDeploymentVersionSummary)(nil), // 8: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary + (*RegisterWorkerInVersionArgs)(nil), // 9: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs + (*RegisterWorkerInWorkerDeploymentArgs)(nil), // 10: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs + (*DescribeVersionFromWorkerDeploymentActivityArgs)(nil), // 11: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityArgs + (*DescribeVersionFromWorkerDeploymentActivityResult)(nil), // 12: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityResult + (*SyncVersionStateUpdateArgs)(nil), // 13: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs + (*SyncVersionStateResponse)(nil), // 14: temporal.server.api.deployment.v1.SyncVersionStateResponse + (*AddVersionUpdateArgs)(nil), // 15: temporal.server.api.deployment.v1.AddVersionUpdateArgs + (*SyncDrainageInfoSignalArgs)(nil), // 16: temporal.server.api.deployment.v1.SyncDrainageInfoSignalArgs + (*SyncDrainageStatusSignalArgs)(nil), // 17: temporal.server.api.deployment.v1.SyncDrainageStatusSignalArgs + (*QueryDescribeVersionResponse)(nil), // 18: temporal.server.api.deployment.v1.QueryDescribeVersionResponse + (*QueryDescribeWorkerDeploymentResponse)(nil), // 19: temporal.server.api.deployment.v1.QueryDescribeWorkerDeploymentResponse + (*StartWorkerDeploymentRequest)(nil), // 20: temporal.server.api.deployment.v1.StartWorkerDeploymentRequest + (*StartWorkerDeploymentVersionRequest)(nil), // 21: temporal.server.api.deployment.v1.StartWorkerDeploymentVersionRequest + (*SyncDeploymentVersionUserDataRequest)(nil), // 22: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest + (*SyncDeploymentVersionUserDataResponse)(nil), // 23: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse + (*CheckWorkerDeploymentUserDataPropagationRequest)(nil), // 24: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest + (*SyncUnversionedRampActivityArgs)(nil), // 25: temporal.server.api.deployment.v1.SyncUnversionedRampActivityArgs + (*SyncUnversionedRampActivityResponse)(nil), // 26: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse + (*UpdateVersionMetadataArgs)(nil), // 27: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs + (*UpdateVersionMetadataResponse)(nil), // 28: temporal.server.api.deployment.v1.UpdateVersionMetadataResponse + (*SetCurrentVersionArgs)(nil), // 29: temporal.server.api.deployment.v1.SetCurrentVersionArgs + (*SetCurrentVersionResponse)(nil), // 30: temporal.server.api.deployment.v1.SetCurrentVersionResponse + (*DeleteVersionArgs)(nil), // 31: temporal.server.api.deployment.v1.DeleteVersionArgs + (*DeleteVersionActivityArgs)(nil), // 32: temporal.server.api.deployment.v1.DeleteVersionActivityArgs + (*CheckTaskQueuesHavePollersActivityArgs)(nil), // 33: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs + (*DeleteDeploymentArgs)(nil), // 34: temporal.server.api.deployment.v1.DeleteDeploymentArgs + (*SetRampingVersionResponse)(nil), // 35: temporal.server.api.deployment.v1.SetRampingVersionResponse + (*SetRampingVersionArgs)(nil), // 36: temporal.server.api.deployment.v1.SetRampingVersionArgs + (*SetManagerIdentityArgs)(nil), // 37: temporal.server.api.deployment.v1.SetManagerIdentityArgs + (*SetManagerIdentityResponse)(nil), // 38: temporal.server.api.deployment.v1.SetManagerIdentityResponse + (*SyncVersionStateActivityArgs)(nil), // 39: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs + (*SyncVersionStateActivityResult)(nil), // 40: temporal.server.api.deployment.v1.SyncVersionStateActivityResult + (*IsVersionMissingTaskQueuesArgs)(nil), // 41: temporal.server.api.deployment.v1.IsVersionMissingTaskQueuesArgs + (*IsVersionMissingTaskQueuesResult)(nil), // 42: temporal.server.api.deployment.v1.IsVersionMissingTaskQueuesResult + (*WorkerDeploymentWorkflowMemo)(nil), // 43: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo + (*WorkerDeploymentSummary)(nil), // 44: temporal.server.api.deployment.v1.WorkerDeploymentSummary + (*AddVersionToWorkerDeploymentRequest)(nil), // 45: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentRequest + (*AddVersionToWorkerDeploymentResponse)(nil), // 46: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentResponse + (*TaskQueueData)(nil), // 47: temporal.server.api.deployment.v1.TaskQueueData + (*DeploymentLocalState)(nil), // 48: temporal.server.api.deployment.v1.DeploymentLocalState + (*DeploymentWorkflowArgs)(nil), // 49: temporal.server.api.deployment.v1.DeploymentWorkflowArgs + (*DeploymentSeriesWorkflowArgs)(nil), // 50: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowArgs + (*SeriesLocalState)(nil), // 51: temporal.server.api.deployment.v1.SeriesLocalState + (*RegisterWorkerInDeploymentArgs)(nil), // 52: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs + (*SyncDeploymentStateArgs)(nil), // 53: temporal.server.api.deployment.v1.SyncDeploymentStateArgs + (*SyncDeploymentStateResponse)(nil), // 54: temporal.server.api.deployment.v1.SyncDeploymentStateResponse + (*QueryDescribeDeploymentResponse)(nil), // 55: temporal.server.api.deployment.v1.QueryDescribeDeploymentResponse + (*DeploymentWorkflowMemo)(nil), // 56: temporal.server.api.deployment.v1.DeploymentWorkflowMemo + (*StartDeploymentSeriesRequest)(nil), // 57: temporal.server.api.deployment.v1.StartDeploymentSeriesRequest + (*SyncUserDataRequest)(nil), // 58: temporal.server.api.deployment.v1.SyncUserDataRequest + (*SyncUserDataResponse)(nil), // 59: temporal.server.api.deployment.v1.SyncUserDataResponse + (*CheckUserDataPropagationRequest)(nil), // 60: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest + (*SetCurrentDeploymentArgs)(nil), // 61: temporal.server.api.deployment.v1.SetCurrentDeploymentArgs + (*SetCurrentDeploymentResponse)(nil), // 62: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse + (*SyncDeploymentStateActivityArgs)(nil), // 63: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs + (*SyncDeploymentStateActivityResult)(nil), // 64: temporal.server.api.deployment.v1.SyncDeploymentStateActivityResult + (*DeploymentSeriesWorkflowMemo)(nil), // 65: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowMemo + nil, // 66: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry + (*VersionLocalState_TaskQueueFamilyData)(nil), // 67: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData + nil, // 68: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry + nil, // 69: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry + (*SyncDeploymentVersionUserDataRequest_SyncUserData)(nil), // 70: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData + nil, // 71: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry + nil, // 72: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry + nil, // 73: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry + nil, // 74: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry + nil, // 75: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry + (*CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes)(nil), // 76: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes + nil, // 77: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry + nil, // 78: temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry + (*DeploymentLocalState_TaskQueueFamilyData)(nil), // 79: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData + nil, // 80: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry + (*SyncDeploymentStateArgs_SetCurrent)(nil), // 81: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent + (*SyncUserDataRequest_SyncUserData)(nil), // 82: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData + nil, // 83: temporal.server.api.deployment.v1.SyncUserDataResponse.TaskQueueMaxVersionsEntry + nil, // 84: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.TaskQueueMaxVersionsEntry + (*timestamppb.Timestamp)(nil), // 85: google.protobuf.Timestamp + (v1.WorkerDeploymentVersionStatus)(0), // 86: temporal.api.enums.v1.WorkerDeploymentVersionStatus + (*v11.VersionDrainageInfo)(nil), // 87: temporal.api.deployment.v1.VersionDrainageInfo + (*v11.VersionMetadata)(nil), // 88: temporal.api.deployment.v1.VersionMetadata + (*v11.RoutingConfig)(nil), // 89: temporal.api.deployment.v1.RoutingConfig + (v1.VersionDrainageStatus)(0), // 90: temporal.api.enums.v1.VersionDrainageStatus + (v1.TaskQueueType)(0), // 91: temporal.api.enums.v1.TaskQueueType + (*v11.WorkerDeploymentVersionInfo_VersionTaskQueueInfo)(nil), // 92: temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo + (*v11.WorkerDeploymentInfo_WorkerDeploymentVersionSummary)(nil), // 93: temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + (*v11.Deployment)(nil), // 94: temporal.api.deployment.v1.Deployment + (*v11.UpdateDeploymentMetadata)(nil), // 95: temporal.api.deployment.v1.UpdateDeploymentMetadata + (*v12.Payload)(nil), // 96: temporal.api.common.v1.Payload } var file_temporal_server_api_deployment_v1_message_proto_depIdxs = []int32{ 0, // 0: temporal.server.api.deployment.v1.DeploymentVersionData.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 84, // 1: temporal.server.api.deployment.v1.DeploymentVersionData.routing_update_time:type_name -> google.protobuf.Timestamp - 84, // 2: temporal.server.api.deployment.v1.DeploymentVersionData.current_since_time:type_name -> google.protobuf.Timestamp - 84, // 3: temporal.server.api.deployment.v1.DeploymentVersionData.ramping_since_time:type_name -> google.protobuf.Timestamp - 85, // 4: temporal.server.api.deployment.v1.DeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus - 0, // 5: temporal.server.api.deployment.v1.VersionLocalState.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 84, // 6: temporal.server.api.deployment.v1.VersionLocalState.create_time:type_name -> google.protobuf.Timestamp - 84, // 7: temporal.server.api.deployment.v1.VersionLocalState.routing_update_time:type_name -> google.protobuf.Timestamp - 84, // 8: temporal.server.api.deployment.v1.VersionLocalState.current_since_time:type_name -> google.protobuf.Timestamp - 84, // 9: temporal.server.api.deployment.v1.VersionLocalState.ramping_since_time:type_name -> google.protobuf.Timestamp - 84, // 10: temporal.server.api.deployment.v1.VersionLocalState.first_activation_time:type_name -> google.protobuf.Timestamp - 84, // 11: temporal.server.api.deployment.v1.VersionLocalState.last_deactivation_time:type_name -> google.protobuf.Timestamp - 86, // 12: temporal.server.api.deployment.v1.VersionLocalState.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo - 87, // 13: temporal.server.api.deployment.v1.VersionLocalState.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata - 65, // 14: temporal.server.api.deployment.v1.VersionLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry - 85, // 15: temporal.server.api.deployment.v1.VersionLocalState.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus - 2, // 16: temporal.server.api.deployment.v1.WorkerDeploymentVersionWorkflowArgs.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 6, // 17: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState - 84, // 18: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp - 88, // 19: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 68, // 20: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.versions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry - 84, // 21: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.create_time:type_name -> google.protobuf.Timestamp - 89, // 22: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus - 86, // 23: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo - 84, // 24: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.routing_update_time:type_name -> google.protobuf.Timestamp - 84, // 25: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.current_since_time:type_name -> google.protobuf.Timestamp - 84, // 26: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.ramping_since_time:type_name -> google.protobuf.Timestamp - 84, // 27: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.first_activation_time:type_name -> google.protobuf.Timestamp - 84, // 28: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_deactivation_time:type_name -> google.protobuf.Timestamp - 85, // 29: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus - 90, // 30: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 90, // 31: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 0, // 32: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 91, // 33: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityResult.task_queue_infos:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo - 84, // 34: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_update_time:type_name -> google.protobuf.Timestamp - 84, // 35: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.current_since_time:type_name -> google.protobuf.Timestamp - 84, // 36: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.ramping_since_time:type_name -> google.protobuf.Timestamp - 2, // 37: temporal.server.api.deployment.v1.SyncVersionStateResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 84, // 38: temporal.server.api.deployment.v1.AddVersionUpdateArgs.create_time:type_name -> google.protobuf.Timestamp - 86, // 39: temporal.server.api.deployment.v1.SyncDrainageInfoSignalArgs.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo - 89, // 40: temporal.server.api.deployment.v1.SyncDrainageStatusSignalArgs.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus - 2, // 41: temporal.server.api.deployment.v1.QueryDescribeVersionResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 6, // 42: temporal.server.api.deployment.v1.QueryDescribeWorkerDeploymentResponse.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState - 0, // 43: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 69, // 44: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData - 70, // 45: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry - 71, // 46: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry - 12, // 47: temporal.server.api.deployment.v1.SyncUnversionedRampActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs - 72, // 48: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry - 73, // 49: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.upsert_entries:type_name -> temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry - 87, // 50: temporal.server.api.deployment.v1.UpdateVersionMetadataResponse.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata - 74, // 51: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.task_queues_and_types:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry - 0, // 52: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.worker_deployment_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 12, // 53: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs - 2, // 54: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 84, // 55: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp - 88, // 56: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 92, // 57: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 92, // 58: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 92, // 59: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 84, // 60: temporal.server.api.deployment.v1.WorkerDeploymentSummary.create_time:type_name -> google.protobuf.Timestamp - 88, // 61: temporal.server.api.deployment.v1.WorkerDeploymentSummary.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 92, // 62: temporal.server.api.deployment.v1.WorkerDeploymentSummary.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 92, // 63: temporal.server.api.deployment.v1.WorkerDeploymentSummary.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 92, // 64: temporal.server.api.deployment.v1.WorkerDeploymentSummary.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 14, // 65: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentRequest.update_args:type_name -> temporal.server.api.deployment.v1.AddVersionUpdateArgs - 84, // 66: temporal.server.api.deployment.v1.TaskQueueData.first_poller_time:type_name -> google.protobuf.Timestamp - 84, // 67: temporal.server.api.deployment.v1.TaskQueueData.last_became_current_time:type_name -> google.protobuf.Timestamp - 93, // 68: temporal.server.api.deployment.v1.DeploymentLocalState.deployment:type_name -> temporal.api.deployment.v1.Deployment - 76, // 69: temporal.server.api.deployment.v1.DeploymentLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry - 84, // 70: temporal.server.api.deployment.v1.DeploymentLocalState.last_became_current_time:type_name -> google.protobuf.Timestamp - 84, // 71: temporal.server.api.deployment.v1.DeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp - 77, // 72: temporal.server.api.deployment.v1.DeploymentLocalState.metadata:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry - 47, // 73: temporal.server.api.deployment.v1.DeploymentWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 50, // 74: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.SeriesLocalState - 84, // 75: temporal.server.api.deployment.v1.SeriesLocalState.current_changed_time:type_name -> google.protobuf.Timestamp - 90, // 76: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 84, // 77: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs.first_poller_time:type_name -> google.protobuf.Timestamp - 80, // 78: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.set_current:type_name -> temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent - 94, // 79: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.update_metadata:type_name -> temporal.api.deployment.v1.UpdateDeploymentMetadata - 47, // 80: temporal.server.api.deployment.v1.SyncDeploymentStateResponse.deployment_local_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 47, // 81: temporal.server.api.deployment.v1.QueryDescribeDeploymentResponse.deployment_local_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 93, // 82: temporal.server.api.deployment.v1.DeploymentWorkflowMemo.deployment:type_name -> temporal.api.deployment.v1.Deployment - 84, // 83: temporal.server.api.deployment.v1.DeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp - 93, // 84: temporal.server.api.deployment.v1.SyncUserDataRequest.deployment:type_name -> temporal.api.deployment.v1.Deployment - 81, // 85: temporal.server.api.deployment.v1.SyncUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData - 82, // 86: temporal.server.api.deployment.v1.SyncUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUserDataResponse.TaskQueueMaxVersionsEntry - 83, // 87: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.TaskQueueMaxVersionsEntry - 94, // 88: temporal.server.api.deployment.v1.SetCurrentDeploymentArgs.update_metadata:type_name -> temporal.api.deployment.v1.UpdateDeploymentMetadata - 47, // 89: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse.current_deployment_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 47, // 90: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse.previous_deployment_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 93, // 91: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs.deployment:type_name -> temporal.api.deployment.v1.Deployment - 52, // 92: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs.args:type_name -> temporal.server.api.deployment.v1.SyncDeploymentStateArgs - 47, // 93: temporal.server.api.deployment.v1.SyncDeploymentStateActivityResult.state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState - 84, // 94: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowMemo.current_changed_time:type_name -> google.protobuf.Timestamp - 66, // 95: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData - 67, // 96: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry - 3, // 97: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueVersionData - 7, // 98: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry.value:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary - 90, // 99: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.types:type_name -> temporal.api.enums.v1.TaskQueueType - 1, // 100: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData - 95, // 101: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry.value:type_name -> temporal.api.common.v1.Payload - 75, // 102: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry.value:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes - 90, // 103: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes.types:type_name -> temporal.api.enums.v1.TaskQueueType - 78, // 104: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData - 95, // 105: temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry.value:type_name -> temporal.api.common.v1.Payload - 79, // 106: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry - 46, // 107: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueData - 84, // 108: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent.last_became_current_time:type_name -> google.protobuf.Timestamp - 90, // 109: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData.type:type_name -> temporal.api.enums.v1.TaskQueueType - 46, // 110: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData - 111, // [111:111] is the sub-list for method output_type - 111, // [111:111] is the sub-list for method input_type - 111, // [111:111] is the sub-list for extension type_name - 111, // [111:111] is the sub-list for extension extendee - 0, // [0:111] is the sub-list for field type_name + 85, // 1: temporal.server.api.deployment.v1.DeploymentVersionData.routing_update_time:type_name -> google.protobuf.Timestamp + 85, // 2: temporal.server.api.deployment.v1.DeploymentVersionData.current_since_time:type_name -> google.protobuf.Timestamp + 85, // 3: temporal.server.api.deployment.v1.DeploymentVersionData.ramping_since_time:type_name -> google.protobuf.Timestamp + 86, // 4: temporal.server.api.deployment.v1.DeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus + 86, // 5: temporal.server.api.deployment.v1.WorkerDeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus + 0, // 6: temporal.server.api.deployment.v1.VersionLocalState.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 85, // 7: temporal.server.api.deployment.v1.VersionLocalState.create_time:type_name -> google.protobuf.Timestamp + 85, // 8: temporal.server.api.deployment.v1.VersionLocalState.routing_update_time:type_name -> google.protobuf.Timestamp + 85, // 9: temporal.server.api.deployment.v1.VersionLocalState.current_since_time:type_name -> google.protobuf.Timestamp + 85, // 10: temporal.server.api.deployment.v1.VersionLocalState.ramping_since_time:type_name -> google.protobuf.Timestamp + 85, // 11: temporal.server.api.deployment.v1.VersionLocalState.first_activation_time:type_name -> google.protobuf.Timestamp + 85, // 12: temporal.server.api.deployment.v1.VersionLocalState.last_deactivation_time:type_name -> google.protobuf.Timestamp + 87, // 13: temporal.server.api.deployment.v1.VersionLocalState.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo + 88, // 14: temporal.server.api.deployment.v1.VersionLocalState.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata + 66, // 15: temporal.server.api.deployment.v1.VersionLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry + 86, // 16: temporal.server.api.deployment.v1.VersionLocalState.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus + 3, // 17: temporal.server.api.deployment.v1.WorkerDeploymentVersionWorkflowArgs.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 7, // 18: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState + 85, // 19: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp + 89, // 20: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 69, // 21: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.versions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry + 85, // 22: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.create_time:type_name -> google.protobuf.Timestamp + 90, // 23: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus + 87, // 24: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo + 85, // 25: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.routing_update_time:type_name -> google.protobuf.Timestamp + 85, // 26: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.current_since_time:type_name -> google.protobuf.Timestamp + 85, // 27: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.ramping_since_time:type_name -> google.protobuf.Timestamp + 85, // 28: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.first_activation_time:type_name -> google.protobuf.Timestamp + 85, // 29: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_deactivation_time:type_name -> google.protobuf.Timestamp + 86, // 30: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus + 91, // 31: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 91, // 32: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 0, // 33: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 92, // 34: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityResult.task_queue_infos:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo + 85, // 35: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_update_time:type_name -> google.protobuf.Timestamp + 85, // 36: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.current_since_time:type_name -> google.protobuf.Timestamp + 85, // 37: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.ramping_since_time:type_name -> google.protobuf.Timestamp + 3, // 38: temporal.server.api.deployment.v1.SyncVersionStateResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 85, // 39: temporal.server.api.deployment.v1.AddVersionUpdateArgs.create_time:type_name -> google.protobuf.Timestamp + 87, // 40: temporal.server.api.deployment.v1.SyncDrainageInfoSignalArgs.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo + 90, // 41: temporal.server.api.deployment.v1.SyncDrainageStatusSignalArgs.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus + 3, // 42: temporal.server.api.deployment.v1.QueryDescribeVersionResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 7, // 43: temporal.server.api.deployment.v1.QueryDescribeWorkerDeploymentResponse.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState + 0, // 44: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 70, // 45: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData + 71, // 46: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry + 72, // 47: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry + 13, // 48: temporal.server.api.deployment.v1.SyncUnversionedRampActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs + 73, // 49: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry + 74, // 50: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.upsert_entries:type_name -> temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry + 88, // 51: temporal.server.api.deployment.v1.UpdateVersionMetadataResponse.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata + 75, // 52: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.task_queues_and_types:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry + 0, // 53: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.worker_deployment_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 13, // 54: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs + 3, // 55: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 85, // 56: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp + 89, // 57: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 93, // 58: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 93, // 59: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 93, // 60: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 85, // 61: temporal.server.api.deployment.v1.WorkerDeploymentSummary.create_time:type_name -> google.protobuf.Timestamp + 89, // 62: temporal.server.api.deployment.v1.WorkerDeploymentSummary.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 93, // 63: temporal.server.api.deployment.v1.WorkerDeploymentSummary.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 93, // 64: temporal.server.api.deployment.v1.WorkerDeploymentSummary.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 93, // 65: temporal.server.api.deployment.v1.WorkerDeploymentSummary.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 15, // 66: temporal.server.api.deployment.v1.AddVersionToWorkerDeploymentRequest.update_args:type_name -> temporal.server.api.deployment.v1.AddVersionUpdateArgs + 85, // 67: temporal.server.api.deployment.v1.TaskQueueData.first_poller_time:type_name -> google.protobuf.Timestamp + 85, // 68: temporal.server.api.deployment.v1.TaskQueueData.last_became_current_time:type_name -> google.protobuf.Timestamp + 94, // 69: temporal.server.api.deployment.v1.DeploymentLocalState.deployment:type_name -> temporal.api.deployment.v1.Deployment + 77, // 70: temporal.server.api.deployment.v1.DeploymentLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry + 85, // 71: temporal.server.api.deployment.v1.DeploymentLocalState.last_became_current_time:type_name -> google.protobuf.Timestamp + 85, // 72: temporal.server.api.deployment.v1.DeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp + 78, // 73: temporal.server.api.deployment.v1.DeploymentLocalState.metadata:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry + 48, // 74: temporal.server.api.deployment.v1.DeploymentWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 51, // 75: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.SeriesLocalState + 85, // 76: temporal.server.api.deployment.v1.SeriesLocalState.current_changed_time:type_name -> google.protobuf.Timestamp + 91, // 77: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 85, // 78: temporal.server.api.deployment.v1.RegisterWorkerInDeploymentArgs.first_poller_time:type_name -> google.protobuf.Timestamp + 81, // 79: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.set_current:type_name -> temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent + 95, // 80: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.update_metadata:type_name -> temporal.api.deployment.v1.UpdateDeploymentMetadata + 48, // 81: temporal.server.api.deployment.v1.SyncDeploymentStateResponse.deployment_local_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 48, // 82: temporal.server.api.deployment.v1.QueryDescribeDeploymentResponse.deployment_local_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 94, // 83: temporal.server.api.deployment.v1.DeploymentWorkflowMemo.deployment:type_name -> temporal.api.deployment.v1.Deployment + 85, // 84: temporal.server.api.deployment.v1.DeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp + 94, // 85: temporal.server.api.deployment.v1.SyncUserDataRequest.deployment:type_name -> temporal.api.deployment.v1.Deployment + 82, // 86: temporal.server.api.deployment.v1.SyncUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData + 83, // 87: temporal.server.api.deployment.v1.SyncUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUserDataResponse.TaskQueueMaxVersionsEntry + 84, // 88: temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckUserDataPropagationRequest.TaskQueueMaxVersionsEntry + 95, // 89: temporal.server.api.deployment.v1.SetCurrentDeploymentArgs.update_metadata:type_name -> temporal.api.deployment.v1.UpdateDeploymentMetadata + 48, // 90: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse.current_deployment_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 48, // 91: temporal.server.api.deployment.v1.SetCurrentDeploymentResponse.previous_deployment_state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 94, // 92: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs.deployment:type_name -> temporal.api.deployment.v1.Deployment + 53, // 93: temporal.server.api.deployment.v1.SyncDeploymentStateActivityArgs.args:type_name -> temporal.server.api.deployment.v1.SyncDeploymentStateArgs + 48, // 94: temporal.server.api.deployment.v1.SyncDeploymentStateActivityResult.state:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState + 85, // 95: temporal.server.api.deployment.v1.DeploymentSeriesWorkflowMemo.current_changed_time:type_name -> google.protobuf.Timestamp + 67, // 96: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData + 68, // 97: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry + 4, // 98: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueVersionData + 8, // 99: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry.value:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary + 91, // 100: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.types:type_name -> temporal.api.enums.v1.TaskQueueType + 1, // 101: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData + 96, // 102: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry.value:type_name -> temporal.api.common.v1.Payload + 76, // 103: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry.value:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes + 91, // 104: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes.types:type_name -> temporal.api.enums.v1.TaskQueueType + 79, // 105: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData + 96, // 106: temporal.server.api.deployment.v1.DeploymentLocalState.MetadataEntry.value:type_name -> temporal.api.common.v1.Payload + 80, // 107: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry + 47, // 108: temporal.server.api.deployment.v1.DeploymentLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueData + 85, // 109: temporal.server.api.deployment.v1.SyncDeploymentStateArgs.SetCurrent.last_became_current_time:type_name -> google.protobuf.Timestamp + 91, // 110: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData.type:type_name -> temporal.api.enums.v1.TaskQueueType + 47, // 111: temporal.server.api.deployment.v1.SyncUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData + 112, // [112:112] is the sub-list for method output_type + 112, // [112:112] is the sub-list for method input_type + 112, // [112:112] is the sub-list for extension type_name + 112, // [112:112] is the sub-list for extension extendee + 0, // [0:112] is the sub-list for field type_name } func init() { file_temporal_server_api_deployment_v1_message_proto_init() } @@ -4925,7 +4985,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_temporal_server_api_deployment_v1_message_proto_rawDesc), len(file_temporal_server_api_deployment_v1_message_proto_rawDesc)), NumEnums: 0, - NumMessages: 84, + NumMessages: 85, NumExtensions: 0, NumServices: 0, }, diff --git a/api/historyservice/v1/request_response.pb.go b/api/historyservice/v1/request_response.pb.go index 5edbffc98b9..1e609451556 100644 --- a/api/historyservice/v1/request_response.pb.go +++ b/api/historyservice/v1/request_response.pb.go @@ -1134,9 +1134,12 @@ type RecordWorkflowTaskStartedRequest struct { // Versioning directive that was sent by history when scheduling the task. VersionDirective *v112.TaskVersionDirective `protobuf:"bytes,10,opt,name=version_directive,json=versionDirective,proto3" json:"version_directive,omitempty"` // Stamp value from when the workflow task was scheduled. Used to validate the task is still relevant. - Stamp int32 `protobuf:"varint,11,opt,name=stamp,proto3" json:"stamp,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Stamp int32 `protobuf:"varint,11,opt,name=stamp,proto3" json:"stamp,omitempty"` + // Revision number that was sent by matching when the task was dispatched. Used to resolve eventual consistency issues + // that may arise due to stale routing configs in task queue partitions. + TaskDispatchRevisionNumber int64 `protobuf:"varint,12,opt,name=task_dispatch_revision_number,json=taskDispatchRevisionNumber,proto3" json:"task_dispatch_revision_number,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RecordWorkflowTaskStartedRequest) Reset() { @@ -1239,6 +1242,13 @@ func (x *RecordWorkflowTaskStartedRequest) GetStamp() int32 { return 0 } +func (x *RecordWorkflowTaskStartedRequest) GetTaskDispatchRevisionNumber() int64 { + if x != nil { + return x.TaskDispatchRevisionNumber + } + return 0 +} + type RecordWorkflowTaskStartedResponse struct { state protoimpl.MessageState `protogen:"open.v1"` WorkflowType *v14.WorkflowType `protobuf:"bytes,1,opt,name=workflow_type,json=workflowType,proto3" json:"workflow_type,omitempty"` @@ -1636,8 +1646,11 @@ type RecordActivityTaskStartedRequest struct { ScheduledDeployment *v16.Deployment `protobuf:"bytes,10,opt,name=scheduled_deployment,json=scheduledDeployment,proto3" json:"scheduled_deployment,omitempty"` // Versioning directive that was sent by history when scheduling the task. VersionDirective *v112.TaskVersionDirective `protobuf:"bytes,12,opt,name=version_directive,json=versionDirective,proto3" json:"version_directive,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Revision number that was sent by matching when the task was dispatched. Used to resolve eventual consistency issues + // that may arise due to stale routing configs in task queue partitions. + TaskDispatchRevisionNumber int64 `protobuf:"varint,13,opt,name=task_dispatch_revision_number,json=taskDispatchRevisionNumber,proto3" json:"task_dispatch_revision_number,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RecordActivityTaskStartedRequest) Reset() { @@ -1740,6 +1753,13 @@ func (x *RecordActivityTaskStartedRequest) GetVersionDirective() *v112.TaskVersi return nil } +func (x *RecordActivityTaskStartedRequest) GetTaskDispatchRevisionNumber() int64 { + if x != nil { + return x.TaskDispatchRevisionNumber + } + return 0 +} + type RecordActivityTaskStartedResponse struct { state protoimpl.MessageState `protogen:"open.v1"` ScheduledEvent *v115.HistoryEvent `protobuf:"bytes,1,opt,name=scheduled_event,json=scheduledEvent,proto3" json:"scheduled_event,omitempty"` @@ -9934,7 +9954,7 @@ const file_temporal_server_api_historyservice_v1_request_response_proto_rawDesc "\x0estart_workflow\x18\x01 \x01(\v2E.temporal.server.api.historyservice.v1.StartWorkflowExecutionResponseH\x00R\rstartWorkflow\x12q\n" + "\x0fupdate_workflow\x18\x02 \x01(\v2F.temporal.server.api.historyservice.v1.UpdateWorkflowExecutionResponseH\x00R\x0eupdateWorkflowB\n" + "\n" + - "\bresponse\"\xfd\x05\n" + + "\bresponse\"\xc0\x06\n" + " RecordWorkflowTaskStartedRequest\x12!\n" + "\fnamespace_id\x18\x01 \x01(\tR\vnamespaceId\x12X\n" + "\x12workflow_execution\x18\x02 \x01(\v2).temporal.api.common.v1.WorkflowExecutionR\x11workflowExecution\x12,\n" + @@ -9947,7 +9967,8 @@ const file_temporal_server_api_historyservice_v1_request_response_proto_rawDesc "\x14scheduled_deployment\x18\t \x01(\v2&.temporal.api.deployment.v1.DeploymentR\x13scheduledDeployment\x12c\n" + "\x11version_directive\x18\n" + " \x01(\v26.temporal.server.api.taskqueue.v1.TaskVersionDirectiveR\x10versionDirective\x12\x14\n" + - "\x05stamp\x18\v \x01(\x05R\x05stamp:$\x92\xc4\x03 *\x1eworkflow_execution.workflow_idJ\x04\b\x04\x10\x05\"\x94\n" + + "\x05stamp\x18\v \x01(\x05R\x05stamp\x12A\n" + + "\x1dtask_dispatch_revision_number\x18\f \x01(\x03R\x1ataskDispatchRevisionNumber:$\x92\xc4\x03 *\x1eworkflow_execution.workflow_idJ\x04\b\x04\x10\x05\"\x94\n" + "\n" + "!RecordWorkflowTaskStartedResponse\x12I\n" + "\rworkflow_type\x18\x01 \x01(\v2$.temporal.api.common.v1.WorkflowTypeR\fworkflowType\x129\n" + @@ -9999,7 +10020,7 @@ const file_temporal_server_api_historyservice_v1_request_response_proto_rawDesc "\fQueriesEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12:\n" + "\x05value\x18\x02 \x01(\v2$.temporal.api.query.v1.WorkflowQueryR\x05value:\x028\x01J\x04\b\n" + - "\x10\v\"\x83\x06\n" + + "\x10\v\"\xc6\x06\n" + " RecordActivityTaskStartedRequest\x12!\n" + "\fnamespace_id\x18\x01 \x01(\tR\vnamespaceId\x12X\n" + "\x12workflow_execution\x18\x02 \x01(\v2).temporal.api.common.v1.WorkflowExecutionR\x11workflowExecution\x12,\n" + @@ -10012,7 +10033,8 @@ const file_temporal_server_api_historyservice_v1_request_response_proto_rawDesc "\x05stamp\x18\t \x01(\x05R\x05stamp\x12Y\n" + "\x14scheduled_deployment\x18\n" + " \x01(\v2&.temporal.api.deployment.v1.DeploymentR\x13scheduledDeployment\x12c\n" + - "\x11version_directive\x18\f \x01(\v26.temporal.server.api.taskqueue.v1.TaskVersionDirectiveR\x10versionDirective:$\x92\xc4\x03 *\x1eworkflow_execution.workflow_idJ\x04\b\x04\x10\x05J\x04\b\v\x10\f\"\xfc\x05\n" + + "\x11version_directive\x18\f \x01(\v26.temporal.server.api.taskqueue.v1.TaskVersionDirectiveR\x10versionDirective\x12A\n" + + "\x1dtask_dispatch_revision_number\x18\r \x01(\x03R\x1ataskDispatchRevisionNumber:$\x92\xc4\x03 *\x1eworkflow_execution.workflow_idJ\x04\b\x04\x10\x05J\x04\b\v\x10\f\"\xfc\x05\n" + "!RecordActivityTaskStartedResponse\x12N\n" + "\x0fscheduled_event\x18\x01 \x01(\v2%.temporal.api.history.v1.HistoryEventR\x0escheduledEvent\x12=\n" + "\fstarted_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\vstartedTime\x12\x18\n" + diff --git a/api/matchingservice/v1/request_response.pb.go b/api/matchingservice/v1/request_response.pb.go index fb9794466a7..48503959c8b 100644 --- a/api/matchingservice/v1/request_response.pb.go +++ b/api/matchingservice/v1/request_response.pb.go @@ -2374,6 +2374,11 @@ type SyncDeploymentUserDataRequest struct { state protoimpl.MessageState `protogen:"open.v1"` NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` TaskQueue string `protobuf:"bytes,2,opt,name=task_queue,json=taskQueue,proto3" json:"task_queue,omitempty"` + // Required, unless deprecated fields are used. + // (-- api-linter: core::0203::required=disabled + // + // aip.dev/not-precedent: Not following Google API format --) + DeploymentName string `protobuf:"bytes,9,opt,name=deployment_name,json=deploymentName,proto3" json:"deployment_name,omitempty"` // Note: this is the task queue type being modified, but this field should not be used for // routing, the user data is owned by the WORKFLOW task queue. // Deprecated. Use `task_queue_types`. @@ -2389,9 +2394,21 @@ type SyncDeploymentUserDataRequest struct { // // *SyncDeploymentUserDataRequest_UpdateVersionData // *SyncDeploymentUserDataRequest_ForgetVersion - Operation isSyncDeploymentUserDataRequest_Operation `protobuf_oneof:"operation"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Operation isSyncDeploymentUserDataRequest_Operation `protobuf_oneof:"operation"` + // Absent means no change. + // Ignored by the task queue if new revision number is not greater that what it has. + UpdateRoutingConfig *v112.RoutingConfig `protobuf:"bytes,10,opt,name=update_routing_config,json=updateRoutingConfig,proto3" json:"update_routing_config,omitempty"` + // Optional map of build id to upsert version data. + // Ignored if `update_routing_config` is present and has an outdated revision number. + // (-- api-linter: core::0203::required=disabled + // + // aip.dev/not-precedent: Not following Google API format --) + UpsertVersionsData map[string]*v110.WorkerDeploymentVersionData `protobuf:"bytes,11,rep,name=upsert_versions_data,json=upsertVersionsData,proto3" json:"upsert_versions_data,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // List of build ids to forget from task queue. + // Ignored if `update_routing_config` is present and has an outdated revision number. + ForgetVersions []string `protobuf:"bytes,12,rep,name=forget_versions,json=forgetVersions,proto3" json:"forget_versions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SyncDeploymentUserDataRequest) Reset() { @@ -2438,6 +2455,13 @@ func (x *SyncDeploymentUserDataRequest) GetTaskQueue() string { return "" } +func (x *SyncDeploymentUserDataRequest) GetDeploymentName() string { + if x != nil { + return x.DeploymentName + } + return "" +} + func (x *SyncDeploymentUserDataRequest) GetTaskQueueType() v19.TaskQueueType { if x != nil { return x.TaskQueueType @@ -2473,6 +2497,7 @@ func (x *SyncDeploymentUserDataRequest) GetOperation() isSyncDeploymentUserDataR return nil } +// Deprecated: Marked as deprecated in temporal/server/api/matchingservice/v1/request_response.proto. func (x *SyncDeploymentUserDataRequest) GetUpdateVersionData() *v110.DeploymentVersionData { if x != nil { if x, ok := x.Operation.(*SyncDeploymentUserDataRequest_UpdateVersionData); ok { @@ -2482,6 +2507,7 @@ func (x *SyncDeploymentUserDataRequest) GetUpdateVersionData() *v110.DeploymentV return nil } +// Deprecated: Marked as deprecated in temporal/server/api/matchingservice/v1/request_response.proto. func (x *SyncDeploymentUserDataRequest) GetForgetVersion() *v110.WorkerDeploymentVersion { if x != nil { if x, ok := x.Operation.(*SyncDeploymentUserDataRequest_ForgetVersion); ok { @@ -2491,17 +2517,42 @@ func (x *SyncDeploymentUserDataRequest) GetForgetVersion() *v110.WorkerDeploymen return nil } +func (x *SyncDeploymentUserDataRequest) GetUpdateRoutingConfig() *v112.RoutingConfig { + if x != nil { + return x.UpdateRoutingConfig + } + return nil +} + +func (x *SyncDeploymentUserDataRequest) GetUpsertVersionsData() map[string]*v110.WorkerDeploymentVersionData { + if x != nil { + return x.UpsertVersionsData + } + return nil +} + +func (x *SyncDeploymentUserDataRequest) GetForgetVersions() []string { + if x != nil { + return x.ForgetVersions + } + return nil +} + type isSyncDeploymentUserDataRequest_Operation interface { isSyncDeploymentUserDataRequest_Operation() } type SyncDeploymentUserDataRequest_UpdateVersionData struct { // The deployment version and its data that is being updated. + // + // Deprecated: Marked as deprecated in temporal/server/api/matchingservice/v1/request_response.proto. UpdateVersionData *v110.DeploymentVersionData `protobuf:"bytes,6,opt,name=update_version_data,json=updateVersionData,proto3,oneof"` } type SyncDeploymentUserDataRequest_ForgetVersion struct { // The version whose data should be cleaned from the task queue. + // + // Deprecated: Marked as deprecated in temporal/server/api/matchingservice/v1/request_response.proto. ForgetVersion *v110.WorkerDeploymentVersion `protobuf:"bytes,7,opt,name=forget_version,json=forgetVersion,proto3,oneof"` } @@ -2512,9 +2563,11 @@ func (*SyncDeploymentUserDataRequest_ForgetVersion) isSyncDeploymentUserDataRequ type SyncDeploymentUserDataResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // New task queue user data version. Can be used to wait for propagation. - Version int64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Version int64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + // If the routing config changed after applying this operation. Compared base on revision number. + RoutingConfigChanged bool `protobuf:"varint,2,opt,name=routing_config_changed,json=routingConfigChanged,proto3" json:"routing_config_changed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SyncDeploymentUserDataResponse) Reset() { @@ -2554,6 +2607,13 @@ func (x *SyncDeploymentUserDataResponse) GetVersion() int64 { return 0 } +func (x *SyncDeploymentUserDataResponse) GetRoutingConfigChanged() bool { + if x != nil { + return x.RoutingConfigChanged + } + return false +} + type ApplyTaskQueueUserDataReplicationEventRequest struct { state protoimpl.MessageState `protogen:"open.v1"` NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` @@ -4925,7 +4985,7 @@ type DispatchNexusTaskResponse_Timeout struct { func (x *DispatchNexusTaskResponse_Timeout) Reset() { *x = DispatchNexusTaskResponse_Timeout{} - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[81] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4937,7 +4997,7 @@ func (x *DispatchNexusTaskResponse_Timeout) String() string { func (*DispatchNexusTaskResponse_Timeout) ProtoMessage() {} func (x *DispatchNexusTaskResponse_Timeout) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[81] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5163,22 +5223,31 @@ const file_temporal_server_api_matchingservice_v1_request_response_proto_rawDesc "\rwait_new_data\x18\x04 \x01(\bR\vwaitNewData\x12$\n" + "\x0eonly_if_loaded\x18\x06 \x01(\bR\fonlyIfLoaded\"\x81\x01\n" + "\x1cGetTaskQueueUserDataResponse\x12[\n" + - "\tuser_data\x18\x02 \x01(\v2>.temporal.server.api.persistence.v1.VersionedTaskQueueUserDataR\buserDataJ\x04\b\x01\x10\x02\"\xeb\x04\n" + + "\tuser_data\x18\x02 \x01(\v2>.temporal.server.api.persistence.v1.VersionedTaskQueueUserDataR\buserDataJ\x04\b\x01\x10\x02\"\xbe\b\n" + "\x1dSyncDeploymentUserDataRequest\x12!\n" + "\fnamespace_id\x18\x01 \x01(\tR\vnamespaceId\x12\x1d\n" + "\n" + - "task_queue\x18\x02 \x01(\tR\ttaskQueue\x12L\n" + + "task_queue\x18\x02 \x01(\tR\ttaskQueue\x12'\n" + + "\x0fdeployment_name\x18\t \x01(\tR\x0edeploymentName\x12L\n" + "\x0ftask_queue_type\x18\x03 \x01(\x0e2$.temporal.api.enums.v1.TaskQueueTypeR\rtaskQueueType\x12N\n" + "\x10task_queue_types\x18\b \x03(\x0e2$.temporal.api.enums.v1.TaskQueueTypeR\x0etaskQueueTypes\x12F\n" + "\n" + "deployment\x18\x04 \x01(\v2&.temporal.api.deployment.v1.DeploymentR\n" + "deployment\x12D\n" + - "\x04data\x18\x05 \x01(\v20.temporal.server.api.deployment.v1.TaskQueueDataR\x04data\x12j\n" + - "\x13update_version_data\x18\x06 \x01(\v28.temporal.server.api.deployment.v1.DeploymentVersionDataH\x00R\x11updateVersionData\x12c\n" + - "\x0eforget_version\x18\a \x01(\v2:.temporal.server.api.deployment.v1.WorkerDeploymentVersionH\x00R\rforgetVersionB\v\n" + - "\toperation\":\n" + + "\x04data\x18\x05 \x01(\v20.temporal.server.api.deployment.v1.TaskQueueDataR\x04data\x12n\n" + + "\x13update_version_data\x18\x06 \x01(\v28.temporal.server.api.deployment.v1.DeploymentVersionDataB\x02\x18\x01H\x00R\x11updateVersionData\x12g\n" + + "\x0eforget_version\x18\a \x01(\v2:.temporal.server.api.deployment.v1.WorkerDeploymentVersionB\x02\x18\x01H\x00R\rforgetVersion\x12]\n" + + "\x15update_routing_config\x18\n" + + " \x01(\v2).temporal.api.deployment.v1.RoutingConfigR\x13updateRoutingConfig\x12\x8f\x01\n" + + "\x14upsert_versions_data\x18\v \x03(\v2].temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.UpsertVersionsDataEntryR\x12upsertVersionsData\x12'\n" + + "\x0fforget_versions\x18\f \x03(\tR\x0eforgetVersions\x1a\x85\x01\n" + + "\x17UpsertVersionsDataEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12T\n" + + "\x05value\x18\x02 \x01(\v2>.temporal.server.api.deployment.v1.WorkerDeploymentVersionDataR\x05value:\x028\x01B\v\n" + + "\toperation\"p\n" + "\x1eSyncDeploymentUserDataResponse\x12\x18\n" + - "\aversion\x18\x01 \x01(\x03R\aversion\"\xc5\x01\n" + + "\aversion\x18\x01 \x01(\x03R\aversion\x124\n" + + "\x16routing_config_changed\x18\x02 \x01(\bR\x14routingConfigChanged\"\xc5\x01\n" + "-ApplyTaskQueueUserDataReplicationEventRequest\x12!\n" + "\fnamespace_id\x18\x01 \x01(\tR\vnamespaceId\x12\x1d\n" + "\n" + @@ -5319,7 +5388,7 @@ func file_temporal_server_api_matchingservice_v1_request_response_proto_rawDescG return file_temporal_server_api_matchingservice_v1_request_response_proto_rawDescData } -var file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes = make([]protoimpl.MessageInfo, 82) +var file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes = make([]protoimpl.MessageInfo, 83) var file_temporal_server_api_matchingservice_v1_request_response_proto_goTypes = []any{ (*PollWorkflowTaskQueueRequest)(nil), // 0: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueRequest (*PollWorkflowTaskQueueResponse)(nil), // 1: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse @@ -5402,194 +5471,200 @@ var file_temporal_server_api_matchingservice_v1_request_response_proto_goTypes = nil, // 78: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry (*UpdateWorkerBuildIdCompatibilityRequest_ApplyPublicRequest)(nil), // 79: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.ApplyPublicRequest (*UpdateWorkerBuildIdCompatibilityRequest_RemoveBuildIds)(nil), // 80: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.RemoveBuildIds - (*DispatchNexusTaskResponse_Timeout)(nil), // 81: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.Timeout - (*v1.PollWorkflowTaskQueueRequest)(nil), // 82: temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest - (*v11.WorkflowExecution)(nil), // 83: temporal.api.common.v1.WorkflowExecution - (*v11.WorkflowType)(nil), // 84: temporal.api.common.v1.WorkflowType - (*v12.WorkflowQuery)(nil), // 85: temporal.api.query.v1.WorkflowQuery - (*v13.TransientWorkflowTaskInfo)(nil), // 86: temporal.server.api.history.v1.TransientWorkflowTaskInfo - (*v14.TaskQueue)(nil), // 87: temporal.api.taskqueue.v1.TaskQueue - (*timestamppb.Timestamp)(nil), // 88: google.protobuf.Timestamp - (*v15.Message)(nil), // 89: temporal.api.protocol.v1.Message - (*v16.History)(nil), // 90: temporal.api.history.v1.History - (*v14.PollerScalingDecision)(nil), // 91: temporal.api.taskqueue.v1.PollerScalingDecision - (*v1.PollActivityTaskQueueRequest)(nil), // 92: temporal.api.workflowservice.v1.PollActivityTaskQueueRequest - (*v11.ActivityType)(nil), // 93: temporal.api.common.v1.ActivityType - (*v11.Payloads)(nil), // 94: temporal.api.common.v1.Payloads - (*durationpb.Duration)(nil), // 95: google.protobuf.Duration - (*v11.Header)(nil), // 96: temporal.api.common.v1.Header - (*v11.Priority)(nil), // 97: temporal.api.common.v1.Priority - (*v11.RetryPolicy)(nil), // 98: temporal.api.common.v1.RetryPolicy - (*v17.VectorClock)(nil), // 99: temporal.server.api.clock.v1.VectorClock - (*v18.TaskVersionDirective)(nil), // 100: temporal.server.api.taskqueue.v1.TaskVersionDirective - (*v18.TaskForwardInfo)(nil), // 101: temporal.server.api.taskqueue.v1.TaskForwardInfo - (*v1.QueryWorkflowRequest)(nil), // 102: temporal.api.workflowservice.v1.QueryWorkflowRequest - (*v12.QueryRejected)(nil), // 103: temporal.api.query.v1.QueryRejected - (*v1.RespondQueryTaskCompletedRequest)(nil), // 104: temporal.api.workflowservice.v1.RespondQueryTaskCompletedRequest - (v19.TaskQueueType)(0), // 105: temporal.api.enums.v1.TaskQueueType - (*v1.DescribeTaskQueueRequest)(nil), // 106: temporal.api.workflowservice.v1.DescribeTaskQueueRequest - (*v110.WorkerDeploymentVersion)(nil), // 107: temporal.server.api.deployment.v1.WorkerDeploymentVersion - (*v1.DescribeTaskQueueResponse)(nil), // 108: temporal.api.workflowservice.v1.DescribeTaskQueueResponse - (*v18.TaskQueuePartition)(nil), // 109: temporal.server.api.taskqueue.v1.TaskQueuePartition - (*v14.TaskQueueVersionSelection)(nil), // 110: temporal.api.taskqueue.v1.TaskQueueVersionSelection - (*v14.TaskQueuePartitionMetadata)(nil), // 111: temporal.api.taskqueue.v1.TaskQueuePartitionMetadata - (*v1.GetWorkerVersioningRulesRequest)(nil), // 112: temporal.api.workflowservice.v1.GetWorkerVersioningRulesRequest - (*v1.GetWorkerVersioningRulesResponse)(nil), // 113: temporal.api.workflowservice.v1.GetWorkerVersioningRulesResponse - (*v1.UpdateWorkerVersioningRulesRequest)(nil), // 114: temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesRequest - (*v1.UpdateWorkerVersioningRulesResponse)(nil), // 115: temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesResponse - (*v1.GetWorkerBuildIdCompatibilityRequest)(nil), // 116: temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityRequest - (*v1.GetWorkerBuildIdCompatibilityResponse)(nil), // 117: temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityResponse - (*v111.VersionedTaskQueueUserData)(nil), // 118: temporal.server.api.persistence.v1.VersionedTaskQueueUserData - (*v112.Deployment)(nil), // 119: temporal.api.deployment.v1.Deployment - (*v110.TaskQueueData)(nil), // 120: temporal.server.api.deployment.v1.TaskQueueData - (*v110.DeploymentVersionData)(nil), // 121: temporal.server.api.deployment.v1.DeploymentVersionData - (*v111.TaskQueueUserData)(nil), // 122: temporal.server.api.persistence.v1.TaskQueueUserData - (*v113.Request)(nil), // 123: temporal.api.nexus.v1.Request - (*v113.HandlerError)(nil), // 124: temporal.api.nexus.v1.HandlerError - (*v113.Response)(nil), // 125: temporal.api.nexus.v1.Response - (*v1.PollNexusTaskQueueRequest)(nil), // 126: temporal.api.workflowservice.v1.PollNexusTaskQueueRequest - (*v1.PollNexusTaskQueueResponse)(nil), // 127: temporal.api.workflowservice.v1.PollNexusTaskQueueResponse - (*v1.RespondNexusTaskCompletedRequest)(nil), // 128: temporal.api.workflowservice.v1.RespondNexusTaskCompletedRequest - (*v1.RespondNexusTaskFailedRequest)(nil), // 129: temporal.api.workflowservice.v1.RespondNexusTaskFailedRequest - (*v111.NexusEndpointSpec)(nil), // 130: temporal.server.api.persistence.v1.NexusEndpointSpec - (*v111.NexusEndpointEntry)(nil), // 131: temporal.server.api.persistence.v1.NexusEndpointEntry - (*v1.RecordWorkerHeartbeatRequest)(nil), // 132: temporal.api.workflowservice.v1.RecordWorkerHeartbeatRequest - (*v1.ListWorkersRequest)(nil), // 133: temporal.api.workflowservice.v1.ListWorkersRequest - (*v114.WorkerInfo)(nil), // 134: temporal.api.worker.v1.WorkerInfo - (*v1.UpdateTaskQueueConfigRequest)(nil), // 135: temporal.api.workflowservice.v1.UpdateTaskQueueConfigRequest - (*v14.TaskQueueConfig)(nil), // 136: temporal.api.taskqueue.v1.TaskQueueConfig - (*v1.DescribeWorkerRequest)(nil), // 137: temporal.api.workflowservice.v1.DescribeWorkerRequest - (*v14.TaskQueueStats)(nil), // 138: temporal.api.taskqueue.v1.TaskQueueStats - (*v18.TaskQueueVersionInfoInternal)(nil), // 139: temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal - (*v1.UpdateWorkerBuildIdCompatibilityRequest)(nil), // 140: temporal.api.workflowservice.v1.UpdateWorkerBuildIdCompatibilityRequest + nil, // 81: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.UpsertVersionsDataEntry + (*DispatchNexusTaskResponse_Timeout)(nil), // 82: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.Timeout + (*v1.PollWorkflowTaskQueueRequest)(nil), // 83: temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest + (*v11.WorkflowExecution)(nil), // 84: temporal.api.common.v1.WorkflowExecution + (*v11.WorkflowType)(nil), // 85: temporal.api.common.v1.WorkflowType + (*v12.WorkflowQuery)(nil), // 86: temporal.api.query.v1.WorkflowQuery + (*v13.TransientWorkflowTaskInfo)(nil), // 87: temporal.server.api.history.v1.TransientWorkflowTaskInfo + (*v14.TaskQueue)(nil), // 88: temporal.api.taskqueue.v1.TaskQueue + (*timestamppb.Timestamp)(nil), // 89: google.protobuf.Timestamp + (*v15.Message)(nil), // 90: temporal.api.protocol.v1.Message + (*v16.History)(nil), // 91: temporal.api.history.v1.History + (*v14.PollerScalingDecision)(nil), // 92: temporal.api.taskqueue.v1.PollerScalingDecision + (*v1.PollActivityTaskQueueRequest)(nil), // 93: temporal.api.workflowservice.v1.PollActivityTaskQueueRequest + (*v11.ActivityType)(nil), // 94: temporal.api.common.v1.ActivityType + (*v11.Payloads)(nil), // 95: temporal.api.common.v1.Payloads + (*durationpb.Duration)(nil), // 96: google.protobuf.Duration + (*v11.Header)(nil), // 97: temporal.api.common.v1.Header + (*v11.Priority)(nil), // 98: temporal.api.common.v1.Priority + (*v11.RetryPolicy)(nil), // 99: temporal.api.common.v1.RetryPolicy + (*v17.VectorClock)(nil), // 100: temporal.server.api.clock.v1.VectorClock + (*v18.TaskVersionDirective)(nil), // 101: temporal.server.api.taskqueue.v1.TaskVersionDirective + (*v18.TaskForwardInfo)(nil), // 102: temporal.server.api.taskqueue.v1.TaskForwardInfo + (*v1.QueryWorkflowRequest)(nil), // 103: temporal.api.workflowservice.v1.QueryWorkflowRequest + (*v12.QueryRejected)(nil), // 104: temporal.api.query.v1.QueryRejected + (*v1.RespondQueryTaskCompletedRequest)(nil), // 105: temporal.api.workflowservice.v1.RespondQueryTaskCompletedRequest + (v19.TaskQueueType)(0), // 106: temporal.api.enums.v1.TaskQueueType + (*v1.DescribeTaskQueueRequest)(nil), // 107: temporal.api.workflowservice.v1.DescribeTaskQueueRequest + (*v110.WorkerDeploymentVersion)(nil), // 108: temporal.server.api.deployment.v1.WorkerDeploymentVersion + (*v1.DescribeTaskQueueResponse)(nil), // 109: temporal.api.workflowservice.v1.DescribeTaskQueueResponse + (*v18.TaskQueuePartition)(nil), // 110: temporal.server.api.taskqueue.v1.TaskQueuePartition + (*v14.TaskQueueVersionSelection)(nil), // 111: temporal.api.taskqueue.v1.TaskQueueVersionSelection + (*v14.TaskQueuePartitionMetadata)(nil), // 112: temporal.api.taskqueue.v1.TaskQueuePartitionMetadata + (*v1.GetWorkerVersioningRulesRequest)(nil), // 113: temporal.api.workflowservice.v1.GetWorkerVersioningRulesRequest + (*v1.GetWorkerVersioningRulesResponse)(nil), // 114: temporal.api.workflowservice.v1.GetWorkerVersioningRulesResponse + (*v1.UpdateWorkerVersioningRulesRequest)(nil), // 115: temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesRequest + (*v1.UpdateWorkerVersioningRulesResponse)(nil), // 116: temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesResponse + (*v1.GetWorkerBuildIdCompatibilityRequest)(nil), // 117: temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityRequest + (*v1.GetWorkerBuildIdCompatibilityResponse)(nil), // 118: temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityResponse + (*v111.VersionedTaskQueueUserData)(nil), // 119: temporal.server.api.persistence.v1.VersionedTaskQueueUserData + (*v112.Deployment)(nil), // 120: temporal.api.deployment.v1.Deployment + (*v110.TaskQueueData)(nil), // 121: temporal.server.api.deployment.v1.TaskQueueData + (*v110.DeploymentVersionData)(nil), // 122: temporal.server.api.deployment.v1.DeploymentVersionData + (*v112.RoutingConfig)(nil), // 123: temporal.api.deployment.v1.RoutingConfig + (*v111.TaskQueueUserData)(nil), // 124: temporal.server.api.persistence.v1.TaskQueueUserData + (*v113.Request)(nil), // 125: temporal.api.nexus.v1.Request + (*v113.HandlerError)(nil), // 126: temporal.api.nexus.v1.HandlerError + (*v113.Response)(nil), // 127: temporal.api.nexus.v1.Response + (*v1.PollNexusTaskQueueRequest)(nil), // 128: temporal.api.workflowservice.v1.PollNexusTaskQueueRequest + (*v1.PollNexusTaskQueueResponse)(nil), // 129: temporal.api.workflowservice.v1.PollNexusTaskQueueResponse + (*v1.RespondNexusTaskCompletedRequest)(nil), // 130: temporal.api.workflowservice.v1.RespondNexusTaskCompletedRequest + (*v1.RespondNexusTaskFailedRequest)(nil), // 131: temporal.api.workflowservice.v1.RespondNexusTaskFailedRequest + (*v111.NexusEndpointSpec)(nil), // 132: temporal.server.api.persistence.v1.NexusEndpointSpec + (*v111.NexusEndpointEntry)(nil), // 133: temporal.server.api.persistence.v1.NexusEndpointEntry + (*v1.RecordWorkerHeartbeatRequest)(nil), // 134: temporal.api.workflowservice.v1.RecordWorkerHeartbeatRequest + (*v1.ListWorkersRequest)(nil), // 135: temporal.api.workflowservice.v1.ListWorkersRequest + (*v114.WorkerInfo)(nil), // 136: temporal.api.worker.v1.WorkerInfo + (*v1.UpdateTaskQueueConfigRequest)(nil), // 137: temporal.api.workflowservice.v1.UpdateTaskQueueConfigRequest + (*v14.TaskQueueConfig)(nil), // 138: temporal.api.taskqueue.v1.TaskQueueConfig + (*v1.DescribeWorkerRequest)(nil), // 139: temporal.api.workflowservice.v1.DescribeWorkerRequest + (*v14.TaskQueueStats)(nil), // 140: temporal.api.taskqueue.v1.TaskQueueStats + (*v18.TaskQueueVersionInfoInternal)(nil), // 141: temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal + (*v1.UpdateWorkerBuildIdCompatibilityRequest)(nil), // 142: temporal.api.workflowservice.v1.UpdateWorkerBuildIdCompatibilityRequest + (*v110.WorkerDeploymentVersionData)(nil), // 143: temporal.server.api.deployment.v1.WorkerDeploymentVersionData } var file_temporal_server_api_matchingservice_v1_request_response_proto_depIdxs = []int32{ - 82, // 0: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueRequest.poll_request:type_name -> temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest - 83, // 1: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution - 84, // 2: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_type:type_name -> temporal.api.common.v1.WorkflowType - 85, // 3: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.query:type_name -> temporal.api.query.v1.WorkflowQuery - 86, // 4: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.transient_workflow_task:type_name -> temporal.server.api.history.v1.TransientWorkflowTaskInfo - 87, // 5: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_execution_task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 88, // 6: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.scheduled_time:type_name -> google.protobuf.Timestamp - 88, // 7: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.started_time:type_name -> google.protobuf.Timestamp + 83, // 0: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueRequest.poll_request:type_name -> temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest + 84, // 1: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution + 85, // 2: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_type:type_name -> temporal.api.common.v1.WorkflowType + 86, // 3: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.query:type_name -> temporal.api.query.v1.WorkflowQuery + 87, // 4: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.transient_workflow_task:type_name -> temporal.server.api.history.v1.TransientWorkflowTaskInfo + 88, // 5: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_execution_task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 89, // 6: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.scheduled_time:type_name -> google.protobuf.Timestamp + 89, // 7: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.started_time:type_name -> google.protobuf.Timestamp 74, // 8: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.queries:type_name -> temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.QueriesEntry - 89, // 9: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.messages:type_name -> temporal.api.protocol.v1.Message - 90, // 10: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.history:type_name -> temporal.api.history.v1.History - 91, // 11: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.poller_scaling_decision:type_name -> temporal.api.taskqueue.v1.PollerScalingDecision - 92, // 12: temporal.server.api.matchingservice.v1.PollActivityTaskQueueRequest.poll_request:type_name -> temporal.api.workflowservice.v1.PollActivityTaskQueueRequest - 83, // 13: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution - 93, // 14: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.activity_type:type_name -> temporal.api.common.v1.ActivityType - 94, // 15: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.input:type_name -> temporal.api.common.v1.Payloads - 88, // 16: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.scheduled_time:type_name -> google.protobuf.Timestamp - 95, // 17: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.schedule_to_close_timeout:type_name -> google.protobuf.Duration - 88, // 18: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.started_time:type_name -> google.protobuf.Timestamp - 95, // 19: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.start_to_close_timeout:type_name -> google.protobuf.Duration - 95, // 20: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.heartbeat_timeout:type_name -> google.protobuf.Duration - 88, // 21: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.current_attempt_scheduled_time:type_name -> google.protobuf.Timestamp - 94, // 22: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.heartbeat_details:type_name -> temporal.api.common.v1.Payloads - 84, // 23: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.workflow_type:type_name -> temporal.api.common.v1.WorkflowType - 96, // 24: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.header:type_name -> temporal.api.common.v1.Header - 91, // 25: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.poller_scaling_decision:type_name -> temporal.api.taskqueue.v1.PollerScalingDecision - 97, // 26: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.priority:type_name -> temporal.api.common.v1.Priority - 98, // 27: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.retry_policy:type_name -> temporal.api.common.v1.RetryPolicy - 83, // 28: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 87, // 29: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 95, // 30: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.schedule_to_start_timeout:type_name -> google.protobuf.Duration - 99, // 31: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.clock:type_name -> temporal.server.api.clock.v1.VectorClock - 100, // 32: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective - 101, // 33: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo - 97, // 34: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.priority:type_name -> temporal.api.common.v1.Priority - 83, // 35: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 87, // 36: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 95, // 37: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.schedule_to_start_timeout:type_name -> google.protobuf.Duration - 99, // 38: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.clock:type_name -> temporal.server.api.clock.v1.VectorClock - 100, // 39: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective - 101, // 40: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo - 97, // 41: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.priority:type_name -> temporal.api.common.v1.Priority - 87, // 42: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 102, // 43: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.query_request:type_name -> temporal.api.workflowservice.v1.QueryWorkflowRequest - 100, // 44: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective - 101, // 45: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo - 97, // 46: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.priority:type_name -> temporal.api.common.v1.Priority - 94, // 47: temporal.server.api.matchingservice.v1.QueryWorkflowResponse.query_result:type_name -> temporal.api.common.v1.Payloads - 103, // 48: temporal.server.api.matchingservice.v1.QueryWorkflowResponse.query_rejected:type_name -> temporal.api.query.v1.QueryRejected - 87, // 49: temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 104, // 50: temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedRequest.completed_request:type_name -> temporal.api.workflowservice.v1.RespondQueryTaskCompletedRequest - 105, // 51: temporal.server.api.matchingservice.v1.CancelOutstandingPollRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 87, // 52: temporal.server.api.matchingservice.v1.CancelOutstandingPollRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 106, // 53: temporal.server.api.matchingservice.v1.DescribeTaskQueueRequest.desc_request:type_name -> temporal.api.workflowservice.v1.DescribeTaskQueueRequest - 107, // 54: temporal.server.api.matchingservice.v1.DescribeTaskQueueRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 108, // 55: temporal.server.api.matchingservice.v1.DescribeTaskQueueResponse.desc_response:type_name -> temporal.api.workflowservice.v1.DescribeTaskQueueResponse - 105, // 56: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 87, // 57: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 107, // 58: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 90, // 9: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.messages:type_name -> temporal.api.protocol.v1.Message + 91, // 10: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.history:type_name -> temporal.api.history.v1.History + 92, // 11: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.poller_scaling_decision:type_name -> temporal.api.taskqueue.v1.PollerScalingDecision + 93, // 12: temporal.server.api.matchingservice.v1.PollActivityTaskQueueRequest.poll_request:type_name -> temporal.api.workflowservice.v1.PollActivityTaskQueueRequest + 84, // 13: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution + 94, // 14: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.activity_type:type_name -> temporal.api.common.v1.ActivityType + 95, // 15: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.input:type_name -> temporal.api.common.v1.Payloads + 89, // 16: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.scheduled_time:type_name -> google.protobuf.Timestamp + 96, // 17: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.schedule_to_close_timeout:type_name -> google.protobuf.Duration + 89, // 18: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.started_time:type_name -> google.protobuf.Timestamp + 96, // 19: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.start_to_close_timeout:type_name -> google.protobuf.Duration + 96, // 20: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.heartbeat_timeout:type_name -> google.protobuf.Duration + 89, // 21: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.current_attempt_scheduled_time:type_name -> google.protobuf.Timestamp + 95, // 22: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.heartbeat_details:type_name -> temporal.api.common.v1.Payloads + 85, // 23: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.workflow_type:type_name -> temporal.api.common.v1.WorkflowType + 97, // 24: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.header:type_name -> temporal.api.common.v1.Header + 92, // 25: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.poller_scaling_decision:type_name -> temporal.api.taskqueue.v1.PollerScalingDecision + 98, // 26: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.priority:type_name -> temporal.api.common.v1.Priority + 99, // 27: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.retry_policy:type_name -> temporal.api.common.v1.RetryPolicy + 84, // 28: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 88, // 29: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 96, // 30: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.schedule_to_start_timeout:type_name -> google.protobuf.Duration + 100, // 31: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.clock:type_name -> temporal.server.api.clock.v1.VectorClock + 101, // 32: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective + 102, // 33: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo + 98, // 34: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.priority:type_name -> temporal.api.common.v1.Priority + 84, // 35: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 88, // 36: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 96, // 37: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.schedule_to_start_timeout:type_name -> google.protobuf.Duration + 100, // 38: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.clock:type_name -> temporal.server.api.clock.v1.VectorClock + 101, // 39: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective + 102, // 40: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo + 98, // 41: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.priority:type_name -> temporal.api.common.v1.Priority + 88, // 42: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 103, // 43: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.query_request:type_name -> temporal.api.workflowservice.v1.QueryWorkflowRequest + 101, // 44: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective + 102, // 45: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo + 98, // 46: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.priority:type_name -> temporal.api.common.v1.Priority + 95, // 47: temporal.server.api.matchingservice.v1.QueryWorkflowResponse.query_result:type_name -> temporal.api.common.v1.Payloads + 104, // 48: temporal.server.api.matchingservice.v1.QueryWorkflowResponse.query_rejected:type_name -> temporal.api.query.v1.QueryRejected + 88, // 49: temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 105, // 50: temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedRequest.completed_request:type_name -> temporal.api.workflowservice.v1.RespondQueryTaskCompletedRequest + 106, // 51: temporal.server.api.matchingservice.v1.CancelOutstandingPollRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 88, // 52: temporal.server.api.matchingservice.v1.CancelOutstandingPollRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 107, // 53: temporal.server.api.matchingservice.v1.DescribeTaskQueueRequest.desc_request:type_name -> temporal.api.workflowservice.v1.DescribeTaskQueueRequest + 108, // 54: temporal.server.api.matchingservice.v1.DescribeTaskQueueRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 109, // 55: temporal.server.api.matchingservice.v1.DescribeTaskQueueResponse.desc_response:type_name -> temporal.api.workflowservice.v1.DescribeTaskQueueResponse + 106, // 56: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 88, // 57: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 108, // 58: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion 75, // 59: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.version_task_queues:type_name -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.VersionTaskQueue 76, // 60: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.version_task_queues:type_name -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue - 109, // 61: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition - 110, // 62: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionRequest.versions:type_name -> temporal.api.taskqueue.v1.TaskQueueVersionSelection + 110, // 61: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition + 111, // 62: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionRequest.versions:type_name -> temporal.api.taskqueue.v1.TaskQueueVersionSelection 78, // 63: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse.versions_info_internal:type_name -> temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry - 87, // 64: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 111, // 65: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsResponse.activity_task_queue_partitions:type_name -> temporal.api.taskqueue.v1.TaskQueuePartitionMetadata - 111, // 66: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsResponse.workflow_task_queue_partitions:type_name -> temporal.api.taskqueue.v1.TaskQueuePartitionMetadata + 88, // 64: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 112, // 65: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsResponse.activity_task_queue_partitions:type_name -> temporal.api.taskqueue.v1.TaskQueuePartitionMetadata + 112, // 66: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsResponse.workflow_task_queue_partitions:type_name -> temporal.api.taskqueue.v1.TaskQueuePartitionMetadata 79, // 67: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.apply_public_request:type_name -> temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.ApplyPublicRequest 80, // 68: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.remove_build_ids:type_name -> temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.RemoveBuildIds - 112, // 69: temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesRequest.request:type_name -> temporal.api.workflowservice.v1.GetWorkerVersioningRulesRequest - 113, // 70: temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesResponse.response:type_name -> temporal.api.workflowservice.v1.GetWorkerVersioningRulesResponse - 114, // 71: temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesRequest.request:type_name -> temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesRequest - 115, // 72: temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesResponse.response:type_name -> temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesResponse - 116, // 73: temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityRequest.request:type_name -> temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityRequest - 117, // 74: temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityResponse.response:type_name -> temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityResponse - 105, // 75: temporal.server.api.matchingservice.v1.GetTaskQueueUserDataRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 118, // 76: temporal.server.api.matchingservice.v1.GetTaskQueueUserDataResponse.user_data:type_name -> temporal.server.api.persistence.v1.VersionedTaskQueueUserData - 105, // 77: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 105, // 78: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.task_queue_types:type_name -> temporal.api.enums.v1.TaskQueueType - 119, // 79: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.deployment:type_name -> temporal.api.deployment.v1.Deployment - 120, // 80: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData - 121, // 81: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.update_version_data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData - 107, // 82: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.forget_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 122, // 83: temporal.server.api.matchingservice.v1.ApplyTaskQueueUserDataReplicationEventRequest.user_data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData - 109, // 84: temporal.server.api.matchingservice.v1.ForceLoadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition - 105, // 85: temporal.server.api.matchingservice.v1.ForceUnloadTaskQueueRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 109, // 86: temporal.server.api.matchingservice.v1.ForceUnloadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition - 118, // 87: temporal.server.api.matchingservice.v1.UpdateTaskQueueUserDataRequest.user_data:type_name -> temporal.server.api.persistence.v1.VersionedTaskQueueUserData - 122, // 88: temporal.server.api.matchingservice.v1.ReplicateTaskQueueUserDataRequest.user_data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData - 87, // 89: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 123, // 90: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.request:type_name -> temporal.api.nexus.v1.Request - 101, // 91: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo - 124, // 92: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.handler_error:type_name -> temporal.api.nexus.v1.HandlerError - 125, // 93: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.response:type_name -> temporal.api.nexus.v1.Response - 81, // 94: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.request_timeout:type_name -> temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.Timeout - 126, // 95: temporal.server.api.matchingservice.v1.PollNexusTaskQueueRequest.request:type_name -> temporal.api.workflowservice.v1.PollNexusTaskQueueRequest - 127, // 96: temporal.server.api.matchingservice.v1.PollNexusTaskQueueResponse.response:type_name -> temporal.api.workflowservice.v1.PollNexusTaskQueueResponse - 87, // 97: temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 128, // 98: temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedRequest.request:type_name -> temporal.api.workflowservice.v1.RespondNexusTaskCompletedRequest - 87, // 99: temporal.server.api.matchingservice.v1.RespondNexusTaskFailedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 129, // 100: temporal.server.api.matchingservice.v1.RespondNexusTaskFailedRequest.request:type_name -> temporal.api.workflowservice.v1.RespondNexusTaskFailedRequest - 130, // 101: temporal.server.api.matchingservice.v1.CreateNexusEndpointRequest.spec:type_name -> temporal.server.api.persistence.v1.NexusEndpointSpec - 131, // 102: temporal.server.api.matchingservice.v1.CreateNexusEndpointResponse.entry:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry - 130, // 103: temporal.server.api.matchingservice.v1.UpdateNexusEndpointRequest.spec:type_name -> temporal.server.api.persistence.v1.NexusEndpointSpec - 131, // 104: temporal.server.api.matchingservice.v1.UpdateNexusEndpointResponse.entry:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry - 131, // 105: temporal.server.api.matchingservice.v1.ListNexusEndpointsResponse.entries:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry - 132, // 106: temporal.server.api.matchingservice.v1.RecordWorkerHeartbeatRequest.heartbeart_request:type_name -> temporal.api.workflowservice.v1.RecordWorkerHeartbeatRequest - 133, // 107: temporal.server.api.matchingservice.v1.ListWorkersRequest.list_request:type_name -> temporal.api.workflowservice.v1.ListWorkersRequest - 134, // 108: temporal.server.api.matchingservice.v1.ListWorkersResponse.workers_info:type_name -> temporal.api.worker.v1.WorkerInfo - 135, // 109: temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigRequest.update_taskqueue_config:type_name -> temporal.api.workflowservice.v1.UpdateTaskQueueConfigRequest - 136, // 110: temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigResponse.updated_taskqueue_config:type_name -> temporal.api.taskqueue.v1.TaskQueueConfig - 137, // 111: temporal.server.api.matchingservice.v1.DescribeWorkerRequest.request:type_name -> temporal.api.workflowservice.v1.DescribeWorkerRequest - 134, // 112: temporal.server.api.matchingservice.v1.DescribeWorkerResponse.worker_info:type_name -> temporal.api.worker.v1.WorkerInfo - 85, // 113: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.QueriesEntry.value:type_name -> temporal.api.query.v1.WorkflowQuery - 105, // 114: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType - 105, // 115: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType - 138, // 116: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.stats:type_name -> temporal.api.taskqueue.v1.TaskQueueStats - 77, // 117: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.stats_by_priority_key:type_name -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.StatsByPriorityKeyEntry - 138, // 118: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.StatsByPriorityKeyEntry.value:type_name -> temporal.api.taskqueue.v1.TaskQueueStats - 139, // 119: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry.value:type_name -> temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal - 140, // 120: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.ApplyPublicRequest.request:type_name -> temporal.api.workflowservice.v1.UpdateWorkerBuildIdCompatibilityRequest - 121, // [121:121] is the sub-list for method output_type - 121, // [121:121] is the sub-list for method input_type - 121, // [121:121] is the sub-list for extension type_name - 121, // [121:121] is the sub-list for extension extendee - 0, // [0:121] is the sub-list for field type_name + 113, // 69: temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesRequest.request:type_name -> temporal.api.workflowservice.v1.GetWorkerVersioningRulesRequest + 114, // 70: temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesResponse.response:type_name -> temporal.api.workflowservice.v1.GetWorkerVersioningRulesResponse + 115, // 71: temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesRequest.request:type_name -> temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesRequest + 116, // 72: temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesResponse.response:type_name -> temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesResponse + 117, // 73: temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityRequest.request:type_name -> temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityRequest + 118, // 74: temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityResponse.response:type_name -> temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityResponse + 106, // 75: temporal.server.api.matchingservice.v1.GetTaskQueueUserDataRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 119, // 76: temporal.server.api.matchingservice.v1.GetTaskQueueUserDataResponse.user_data:type_name -> temporal.server.api.persistence.v1.VersionedTaskQueueUserData + 106, // 77: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 106, // 78: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.task_queue_types:type_name -> temporal.api.enums.v1.TaskQueueType + 120, // 79: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.deployment:type_name -> temporal.api.deployment.v1.Deployment + 121, // 80: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData + 122, // 81: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.update_version_data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData + 108, // 82: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.forget_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 123, // 83: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.update_routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 81, // 84: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.upsert_versions_data:type_name -> temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.UpsertVersionsDataEntry + 124, // 85: temporal.server.api.matchingservice.v1.ApplyTaskQueueUserDataReplicationEventRequest.user_data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData + 110, // 86: temporal.server.api.matchingservice.v1.ForceLoadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition + 106, // 87: temporal.server.api.matchingservice.v1.ForceUnloadTaskQueueRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 110, // 88: temporal.server.api.matchingservice.v1.ForceUnloadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition + 119, // 89: temporal.server.api.matchingservice.v1.UpdateTaskQueueUserDataRequest.user_data:type_name -> temporal.server.api.persistence.v1.VersionedTaskQueueUserData + 124, // 90: temporal.server.api.matchingservice.v1.ReplicateTaskQueueUserDataRequest.user_data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData + 88, // 91: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 125, // 92: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.request:type_name -> temporal.api.nexus.v1.Request + 102, // 93: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo + 126, // 94: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.handler_error:type_name -> temporal.api.nexus.v1.HandlerError + 127, // 95: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.response:type_name -> temporal.api.nexus.v1.Response + 82, // 96: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.request_timeout:type_name -> temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.Timeout + 128, // 97: temporal.server.api.matchingservice.v1.PollNexusTaskQueueRequest.request:type_name -> temporal.api.workflowservice.v1.PollNexusTaskQueueRequest + 129, // 98: temporal.server.api.matchingservice.v1.PollNexusTaskQueueResponse.response:type_name -> temporal.api.workflowservice.v1.PollNexusTaskQueueResponse + 88, // 99: temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 130, // 100: temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedRequest.request:type_name -> temporal.api.workflowservice.v1.RespondNexusTaskCompletedRequest + 88, // 101: temporal.server.api.matchingservice.v1.RespondNexusTaskFailedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 131, // 102: temporal.server.api.matchingservice.v1.RespondNexusTaskFailedRequest.request:type_name -> temporal.api.workflowservice.v1.RespondNexusTaskFailedRequest + 132, // 103: temporal.server.api.matchingservice.v1.CreateNexusEndpointRequest.spec:type_name -> temporal.server.api.persistence.v1.NexusEndpointSpec + 133, // 104: temporal.server.api.matchingservice.v1.CreateNexusEndpointResponse.entry:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry + 132, // 105: temporal.server.api.matchingservice.v1.UpdateNexusEndpointRequest.spec:type_name -> temporal.server.api.persistence.v1.NexusEndpointSpec + 133, // 106: temporal.server.api.matchingservice.v1.UpdateNexusEndpointResponse.entry:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry + 133, // 107: temporal.server.api.matchingservice.v1.ListNexusEndpointsResponse.entries:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry + 134, // 108: temporal.server.api.matchingservice.v1.RecordWorkerHeartbeatRequest.heartbeart_request:type_name -> temporal.api.workflowservice.v1.RecordWorkerHeartbeatRequest + 135, // 109: temporal.server.api.matchingservice.v1.ListWorkersRequest.list_request:type_name -> temporal.api.workflowservice.v1.ListWorkersRequest + 136, // 110: temporal.server.api.matchingservice.v1.ListWorkersResponse.workers_info:type_name -> temporal.api.worker.v1.WorkerInfo + 137, // 111: temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigRequest.update_taskqueue_config:type_name -> temporal.api.workflowservice.v1.UpdateTaskQueueConfigRequest + 138, // 112: temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigResponse.updated_taskqueue_config:type_name -> temporal.api.taskqueue.v1.TaskQueueConfig + 139, // 113: temporal.server.api.matchingservice.v1.DescribeWorkerRequest.request:type_name -> temporal.api.workflowservice.v1.DescribeWorkerRequest + 136, // 114: temporal.server.api.matchingservice.v1.DescribeWorkerResponse.worker_info:type_name -> temporal.api.worker.v1.WorkerInfo + 86, // 115: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.QueriesEntry.value:type_name -> temporal.api.query.v1.WorkflowQuery + 106, // 116: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType + 106, // 117: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType + 140, // 118: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.stats:type_name -> temporal.api.taskqueue.v1.TaskQueueStats + 77, // 119: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.stats_by_priority_key:type_name -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.StatsByPriorityKeyEntry + 140, // 120: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.StatsByPriorityKeyEntry.value:type_name -> temporal.api.taskqueue.v1.TaskQueueStats + 141, // 121: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry.value:type_name -> temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal + 142, // 122: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.ApplyPublicRequest.request:type_name -> temporal.api.workflowservice.v1.UpdateWorkerBuildIdCompatibilityRequest + 143, // 123: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.UpsertVersionsDataEntry.value:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionData + 124, // [124:124] is the sub-list for method output_type + 124, // [124:124] is the sub-list for method input_type + 124, // [124:124] is the sub-list for extension type_name + 124, // [124:124] is the sub-list for extension extendee + 0, // [0:124] is the sub-list for field type_name } func init() { file_temporal_server_api_matchingservice_v1_request_response_proto_init() } @@ -5623,7 +5698,7 @@ func file_temporal_server_api_matchingservice_v1_request_response_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_temporal_server_api_matchingservice_v1_request_response_proto_rawDesc), len(file_temporal_server_api_matchingservice_v1_request_response_proto_rawDesc)), NumEnums: 0, - NumMessages: 82, + NumMessages: 83, NumExtensions: 0, NumServices: 0, }, diff --git a/api/persistence/v1/task_queues.go-helpers.pb.go b/api/persistence/v1/task_queues.go-helpers.pb.go index ea98c50d7e3..c2dc36e3d9f 100644 --- a/api/persistence/v1/task_queues.go-helpers.pb.go +++ b/api/persistence/v1/task_queues.go-helpers.pb.go @@ -227,6 +227,43 @@ func (this *DeploymentData) Equal(that interface{}) bool { return proto.Equal(this, that1) } +// Marshal an object of type WorkerDeploymentData to the protobuf v3 wire format +func (val *WorkerDeploymentData) Marshal() ([]byte, error) { + return proto.Marshal(val) +} + +// Unmarshal an object of type WorkerDeploymentData from the protobuf v3 wire format +func (val *WorkerDeploymentData) Unmarshal(buf []byte) error { + return proto.Unmarshal(buf, val) +} + +// Size returns the size of the object, in bytes, once serialized +func (val *WorkerDeploymentData) Size() int { + return proto.Size(val) +} + +// Equal returns whether two WorkerDeploymentData values are equivalent by recursively +// comparing the message's fields. +// For more information see the documentation for +// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal +func (this *WorkerDeploymentData) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + var that1 *WorkerDeploymentData + switch t := that.(type) { + case *WorkerDeploymentData: + that1 = t + case WorkerDeploymentData: + that1 = &t + default: + return false + } + + return proto.Equal(this, that1) +} + // Marshal an object of type TaskQueueTypeUserData to the protobuf v3 wire format func (val *TaskQueueTypeUserData) Marshal() ([]byte, error) { return proto.Marshal(val) diff --git a/api/persistence/v1/task_queues.pb.go b/api/persistence/v1/task_queues.pb.go index 42a949ac37e..81d9db8a77c 100644 --- a/api/persistence/v1/task_queues.pb.go +++ b/api/persistence/v1/task_queues.pb.go @@ -462,11 +462,20 @@ type DeploymentData struct { // `ramp_percentage`. If there is no Ramping Version, all the unversioned/unpinned tasks are // routed to the Current Version. If there is no Current Version, any poller with UNVERSIONED // (or unspecified) WorkflowVersioningMode will receive the tasks. + // Remove after `AsyncSetCurrentAndRamping` workflow version is irreversibly enabled. + // + // Deprecated: Marked as deprecated in temporal/server/api/persistence/v1/task_queues.proto. Versions []*v12.DeploymentVersionData `protobuf:"bytes,2,rep,name=versions,proto3" json:"versions,omitempty"` // Present if the task queue's ramping version is unversioned. + // Remove after `AsyncSetCurrentAndRamping` workflow version is irreversibly enabled. + // + // Deprecated: Marked as deprecated in temporal/server/api/persistence/v1/task_queues.proto. UnversionedRampData *v12.DeploymentVersionData `protobuf:"bytes,3,opt,name=unversioned_ramp_data,json=unversionedRampData,proto3" json:"unversioned_ramp_data,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Routing and version membership data for all worker deployments that this task queue belongs to. + // Key is the deployment name. + DeploymentsData map[string]*WorkerDeploymentData `protobuf:"bytes,4,rep,name=deployments_data,json=deploymentsData,proto3" json:"deployments_data,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeploymentData) Reset() { @@ -507,6 +516,7 @@ func (x *DeploymentData) GetDeployments() []*DeploymentData_DeploymentDataItem { return nil } +// Deprecated: Marked as deprecated in temporal/server/api/persistence/v1/task_queues.proto. func (x *DeploymentData) GetVersions() []*v12.DeploymentVersionData { if x != nil { return x.Versions @@ -514,6 +524,7 @@ func (x *DeploymentData) GetVersions() []*v12.DeploymentVersionData { return nil } +// Deprecated: Marked as deprecated in temporal/server/api/persistence/v1/task_queues.proto. func (x *DeploymentData) GetUnversionedRampData() *v12.DeploymentVersionData { if x != nil { return x.UnversionedRampData @@ -521,6 +532,69 @@ func (x *DeploymentData) GetUnversionedRampData() *v12.DeploymentVersionData { return nil } +func (x *DeploymentData) GetDeploymentsData() map[string]*WorkerDeploymentData { + if x != nil { + return x.DeploymentsData + } + return nil +} + +// Routing config and version membership data for a given worker deployment that a TQ should know. +type WorkerDeploymentData struct { + state protoimpl.MessageState `protogen:"open.v1"` + RoutingConfig *v13.RoutingConfig `protobuf:"bytes,1,opt,name=routing_config,json=routingConfig,proto3" json:"routing_config,omitempty"` + // This map tracks the membership of the task queue in the deployment versions. A version is + // present here iff the task queue has ever been polled from the version. + // Key is the build id. + Versions map[string]*v12.WorkerDeploymentVersionData `protobuf:"bytes,2,rep,name=versions,proto3" json:"versions,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WorkerDeploymentData) Reset() { + *x = WorkerDeploymentData{} + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WorkerDeploymentData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkerDeploymentData) ProtoMessage() {} + +func (x *WorkerDeploymentData) ProtoReflect() protoreflect.Message { + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkerDeploymentData.ProtoReflect.Descriptor instead. +func (*WorkerDeploymentData) Descriptor() ([]byte, []int) { + return file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP(), []int{6} +} + +func (x *WorkerDeploymentData) GetRoutingConfig() *v13.RoutingConfig { + if x != nil { + return x.RoutingConfig + } + return nil +} + +func (x *WorkerDeploymentData) GetVersions() map[string]*v12.WorkerDeploymentVersionData { + if x != nil { + return x.Versions + } + return nil +} + // Container for all persistent user data that varies per task queue type within a family. type TaskQueueTypeUserData struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -532,7 +606,7 @@ type TaskQueueTypeUserData struct { func (x *TaskQueueTypeUserData) Reset() { *x = TaskQueueTypeUserData{} - mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[6] + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -544,7 +618,7 @@ func (x *TaskQueueTypeUserData) String() string { func (*TaskQueueTypeUserData) ProtoMessage() {} func (x *TaskQueueTypeUserData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[6] + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -557,7 +631,7 @@ func (x *TaskQueueTypeUserData) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskQueueTypeUserData.ProtoReflect.Descriptor instead. func (*TaskQueueTypeUserData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP(), []int{6} + return file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP(), []int{7} } func (x *TaskQueueTypeUserData) GetDeploymentData() *DeploymentData { @@ -595,7 +669,7 @@ type TaskQueueUserData struct { func (x *TaskQueueUserData) Reset() { *x = TaskQueueUserData{} - mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[7] + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -607,7 +681,7 @@ func (x *TaskQueueUserData) String() string { func (*TaskQueueUserData) ProtoMessage() {} func (x *TaskQueueUserData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[7] + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -620,7 +694,7 @@ func (x *TaskQueueUserData) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskQueueUserData.ProtoReflect.Descriptor instead. func (*TaskQueueUserData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP(), []int{7} + return file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP(), []int{8} } func (x *TaskQueueUserData) GetClock() *v1.HybridLogicalClock { @@ -655,7 +729,7 @@ type VersionedTaskQueueUserData struct { func (x *VersionedTaskQueueUserData) Reset() { *x = VersionedTaskQueueUserData{} - mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[8] + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -667,7 +741,7 @@ func (x *VersionedTaskQueueUserData) String() string { func (*VersionedTaskQueueUserData) ProtoMessage() {} func (x *VersionedTaskQueueUserData) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[8] + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -680,7 +754,7 @@ func (x *VersionedTaskQueueUserData) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionedTaskQueueUserData.ProtoReflect.Descriptor instead. func (*VersionedTaskQueueUserData) Descriptor() ([]byte, []int) { - return file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP(), []int{8} + return file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP(), []int{9} } func (x *VersionedTaskQueueUserData) GetData() *TaskQueueUserData { @@ -708,7 +782,7 @@ type DeploymentData_DeploymentDataItem struct { func (x *DeploymentData_DeploymentDataItem) Reset() { *x = DeploymentData_DeploymentDataItem{} - mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[9] + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -720,7 +794,7 @@ func (x *DeploymentData_DeploymentDataItem) String() string { func (*DeploymentData_DeploymentDataItem) ProtoMessage() {} func (x *DeploymentData_DeploymentDataItem) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[9] + mi := &file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -733,7 +807,7 @@ func (x *DeploymentData_DeploymentDataItem) ProtoReflect() protoreflect.Message // Deprecated: Use DeploymentData_DeploymentDataItem.ProtoReflect.Descriptor instead. func (*DeploymentData_DeploymentDataItem) Descriptor() ([]byte, []int) { - return file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP(), []int{5, 0} + return file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP(), []int{5, 1} } func (x *DeploymentData_DeploymentDataItem) GetDeployment() *v13.Deployment { @@ -779,16 +853,26 @@ const file_temporal_server_api_persistence_v1_task_queues_proto_rawDesc = "" + "\x0eVersioningData\x12[\n" + "\fversion_sets\x18\x01 \x03(\v28.temporal.server.api.persistence.v1.CompatibleVersionSetR\vversionSets\x12]\n" + "\x10assignment_rules\x18\x02 \x03(\v22.temporal.server.api.persistence.v1.AssignmentRuleR\x0fassignmentRules\x12W\n" + - "\x0eredirect_rules\x18\x03 \x03(\v20.temporal.server.api.persistence.v1.RedirectRuleR\rredirectRules\"\xe6\x03\n" + + "\x0eredirect_rules\x18\x03 \x03(\v20.temporal.server.api.persistence.v1.RedirectRuleR\rredirectRules\"\xe0\x05\n" + "\x0eDeploymentData\x12k\n" + - "\vdeployments\x18\x01 \x03(\v2E.temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItemB\x02\x18\x01R\vdeployments\x12T\n" + - "\bversions\x18\x02 \x03(\v28.temporal.server.api.deployment.v1.DeploymentVersionDataR\bversions\x12l\n" + - "\x15unversioned_ramp_data\x18\x03 \x01(\v28.temporal.server.api.deployment.v1.DeploymentVersionDataR\x13unversionedRampData\x1a\xa2\x01\n" + + "\vdeployments\x18\x01 \x03(\v2E.temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItemB\x02\x18\x01R\vdeployments\x12X\n" + + "\bversions\x18\x02 \x03(\v28.temporal.server.api.deployment.v1.DeploymentVersionDataB\x02\x18\x01R\bversions\x12p\n" + + "\x15unversioned_ramp_data\x18\x03 \x01(\v28.temporal.server.api.deployment.v1.DeploymentVersionDataB\x02\x18\x01R\x13unversionedRampData\x12r\n" + + "\x10deployments_data\x18\x04 \x03(\v2G.temporal.server.api.persistence.v1.DeploymentData.DeploymentsDataEntryR\x0fdeploymentsData\x1a|\n" + + "\x14DeploymentsDataEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12N\n" + + "\x05value\x18\x02 \x01(\v28.temporal.server.api.persistence.v1.WorkerDeploymentDataR\x05value:\x028\x01\x1a\xa2\x01\n" + "\x12DeploymentDataItem\x12F\n" + "\n" + "deployment\x18\x01 \x01(\v2&.temporal.api.deployment.v1.DeploymentR\n" + "deployment\x12D\n" + - "\x04data\x18\x02 \x01(\v20.temporal.server.api.deployment.v1.TaskQueueDataR\x04data\"\xb8\x01\n" + + "\x04data\x18\x02 \x01(\v20.temporal.server.api.deployment.v1.TaskQueueDataR\x04data\"\xc9\x02\n" + + "\x14WorkerDeploymentData\x12P\n" + + "\x0erouting_config\x18\x01 \x01(\v2).temporal.api.deployment.v1.RoutingConfigR\rroutingConfig\x12b\n" + + "\bversions\x18\x02 \x03(\v2F.temporal.server.api.persistence.v1.WorkerDeploymentData.VersionsEntryR\bversions\x1a{\n" + + "\rVersionsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12T\n" + + "\x05value\x18\x02 \x01(\v2>.temporal.server.api.deployment.v1.WorkerDeploymentVersionDataR\x05value:\x028\x01\"\xb8\x01\n" + "\x15TaskQueueTypeUserData\x12[\n" + "\x0fdeployment_data\x18\x01 \x01(\v22.temporal.server.api.persistence.v1.DeploymentDataR\x0edeploymentData\x12B\n" + "\x06config\x18\x02 \x01(\v2*.temporal.api.taskqueue.v1.TaskQueueConfigR\x06config\"\x8e\x03\n" + @@ -816,7 +900,7 @@ func file_temporal_server_api_persistence_v1_task_queues_proto_rawDescGZIP() []b } var file_temporal_server_api_persistence_v1_task_queues_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_temporal_server_api_persistence_v1_task_queues_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_temporal_server_api_persistence_v1_task_queues_proto_goTypes = []any{ (BuildId_State)(0), // 0: temporal.server.api.persistence.v1.BuildId.State (*BuildId)(nil), // 1: temporal.server.api.persistence.v1.BuildId @@ -825,51 +909,61 @@ var file_temporal_server_api_persistence_v1_task_queues_proto_goTypes = []any{ (*RedirectRule)(nil), // 4: temporal.server.api.persistence.v1.RedirectRule (*VersioningData)(nil), // 5: temporal.server.api.persistence.v1.VersioningData (*DeploymentData)(nil), // 6: temporal.server.api.persistence.v1.DeploymentData - (*TaskQueueTypeUserData)(nil), // 7: temporal.server.api.persistence.v1.TaskQueueTypeUserData - (*TaskQueueUserData)(nil), // 8: temporal.server.api.persistence.v1.TaskQueueUserData - (*VersionedTaskQueueUserData)(nil), // 9: temporal.server.api.persistence.v1.VersionedTaskQueueUserData - (*DeploymentData_DeploymentDataItem)(nil), // 10: temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItem - nil, // 11: temporal.server.api.persistence.v1.TaskQueueUserData.PerTypeEntry - (*v1.HybridLogicalClock)(nil), // 12: temporal.server.api.clock.v1.HybridLogicalClock - (*v11.BuildIdAssignmentRule)(nil), // 13: temporal.api.taskqueue.v1.BuildIdAssignmentRule - (*v11.CompatibleBuildIdRedirectRule)(nil), // 14: temporal.api.taskqueue.v1.CompatibleBuildIdRedirectRule - (*v12.DeploymentVersionData)(nil), // 15: temporal.server.api.deployment.v1.DeploymentVersionData - (*v11.TaskQueueConfig)(nil), // 16: temporal.api.taskqueue.v1.TaskQueueConfig - (*v13.Deployment)(nil), // 17: temporal.api.deployment.v1.Deployment - (*v12.TaskQueueData)(nil), // 18: temporal.server.api.deployment.v1.TaskQueueData + (*WorkerDeploymentData)(nil), // 7: temporal.server.api.persistence.v1.WorkerDeploymentData + (*TaskQueueTypeUserData)(nil), // 8: temporal.server.api.persistence.v1.TaskQueueTypeUserData + (*TaskQueueUserData)(nil), // 9: temporal.server.api.persistence.v1.TaskQueueUserData + (*VersionedTaskQueueUserData)(nil), // 10: temporal.server.api.persistence.v1.VersionedTaskQueueUserData + nil, // 11: temporal.server.api.persistence.v1.DeploymentData.DeploymentsDataEntry + (*DeploymentData_DeploymentDataItem)(nil), // 12: temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItem + nil, // 13: temporal.server.api.persistence.v1.WorkerDeploymentData.VersionsEntry + nil, // 14: temporal.server.api.persistence.v1.TaskQueueUserData.PerTypeEntry + (*v1.HybridLogicalClock)(nil), // 15: temporal.server.api.clock.v1.HybridLogicalClock + (*v11.BuildIdAssignmentRule)(nil), // 16: temporal.api.taskqueue.v1.BuildIdAssignmentRule + (*v11.CompatibleBuildIdRedirectRule)(nil), // 17: temporal.api.taskqueue.v1.CompatibleBuildIdRedirectRule + (*v12.DeploymentVersionData)(nil), // 18: temporal.server.api.deployment.v1.DeploymentVersionData + (*v13.RoutingConfig)(nil), // 19: temporal.api.deployment.v1.RoutingConfig + (*v11.TaskQueueConfig)(nil), // 20: temporal.api.taskqueue.v1.TaskQueueConfig + (*v13.Deployment)(nil), // 21: temporal.api.deployment.v1.Deployment + (*v12.TaskQueueData)(nil), // 22: temporal.server.api.deployment.v1.TaskQueueData + (*v12.WorkerDeploymentVersionData)(nil), // 23: temporal.server.api.deployment.v1.WorkerDeploymentVersionData } var file_temporal_server_api_persistence_v1_task_queues_proto_depIdxs = []int32{ 0, // 0: temporal.server.api.persistence.v1.BuildId.state:type_name -> temporal.server.api.persistence.v1.BuildId.State - 12, // 1: temporal.server.api.persistence.v1.BuildId.state_update_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock - 12, // 2: temporal.server.api.persistence.v1.BuildId.became_default_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock + 15, // 1: temporal.server.api.persistence.v1.BuildId.state_update_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock + 15, // 2: temporal.server.api.persistence.v1.BuildId.became_default_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock 1, // 3: temporal.server.api.persistence.v1.CompatibleVersionSet.build_ids:type_name -> temporal.server.api.persistence.v1.BuildId - 12, // 4: temporal.server.api.persistence.v1.CompatibleVersionSet.became_default_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock - 13, // 5: temporal.server.api.persistence.v1.AssignmentRule.rule:type_name -> temporal.api.taskqueue.v1.BuildIdAssignmentRule - 12, // 6: temporal.server.api.persistence.v1.AssignmentRule.create_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock - 12, // 7: temporal.server.api.persistence.v1.AssignmentRule.delete_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock - 14, // 8: temporal.server.api.persistence.v1.RedirectRule.rule:type_name -> temporal.api.taskqueue.v1.CompatibleBuildIdRedirectRule - 12, // 9: temporal.server.api.persistence.v1.RedirectRule.create_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock - 12, // 10: temporal.server.api.persistence.v1.RedirectRule.delete_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock + 15, // 4: temporal.server.api.persistence.v1.CompatibleVersionSet.became_default_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock + 16, // 5: temporal.server.api.persistence.v1.AssignmentRule.rule:type_name -> temporal.api.taskqueue.v1.BuildIdAssignmentRule + 15, // 6: temporal.server.api.persistence.v1.AssignmentRule.create_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock + 15, // 7: temporal.server.api.persistence.v1.AssignmentRule.delete_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock + 17, // 8: temporal.server.api.persistence.v1.RedirectRule.rule:type_name -> temporal.api.taskqueue.v1.CompatibleBuildIdRedirectRule + 15, // 9: temporal.server.api.persistence.v1.RedirectRule.create_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock + 15, // 10: temporal.server.api.persistence.v1.RedirectRule.delete_timestamp:type_name -> temporal.server.api.clock.v1.HybridLogicalClock 2, // 11: temporal.server.api.persistence.v1.VersioningData.version_sets:type_name -> temporal.server.api.persistence.v1.CompatibleVersionSet 3, // 12: temporal.server.api.persistence.v1.VersioningData.assignment_rules:type_name -> temporal.server.api.persistence.v1.AssignmentRule 4, // 13: temporal.server.api.persistence.v1.VersioningData.redirect_rules:type_name -> temporal.server.api.persistence.v1.RedirectRule - 10, // 14: temporal.server.api.persistence.v1.DeploymentData.deployments:type_name -> temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItem - 15, // 15: temporal.server.api.persistence.v1.DeploymentData.versions:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData - 15, // 16: temporal.server.api.persistence.v1.DeploymentData.unversioned_ramp_data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData - 6, // 17: temporal.server.api.persistence.v1.TaskQueueTypeUserData.deployment_data:type_name -> temporal.server.api.persistence.v1.DeploymentData - 16, // 18: temporal.server.api.persistence.v1.TaskQueueTypeUserData.config:type_name -> temporal.api.taskqueue.v1.TaskQueueConfig - 12, // 19: temporal.server.api.persistence.v1.TaskQueueUserData.clock:type_name -> temporal.server.api.clock.v1.HybridLogicalClock - 5, // 20: temporal.server.api.persistence.v1.TaskQueueUserData.versioning_data:type_name -> temporal.server.api.persistence.v1.VersioningData - 11, // 21: temporal.server.api.persistence.v1.TaskQueueUserData.per_type:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData.PerTypeEntry - 8, // 22: temporal.server.api.persistence.v1.VersionedTaskQueueUserData.data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData - 17, // 23: temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItem.deployment:type_name -> temporal.api.deployment.v1.Deployment - 18, // 24: temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItem.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData - 7, // 25: temporal.server.api.persistence.v1.TaskQueueUserData.PerTypeEntry.value:type_name -> temporal.server.api.persistence.v1.TaskQueueTypeUserData - 26, // [26:26] is the sub-list for method output_type - 26, // [26:26] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 12, // 14: temporal.server.api.persistence.v1.DeploymentData.deployments:type_name -> temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItem + 18, // 15: temporal.server.api.persistence.v1.DeploymentData.versions:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData + 18, // 16: temporal.server.api.persistence.v1.DeploymentData.unversioned_ramp_data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData + 11, // 17: temporal.server.api.persistence.v1.DeploymentData.deployments_data:type_name -> temporal.server.api.persistence.v1.DeploymentData.DeploymentsDataEntry + 19, // 18: temporal.server.api.persistence.v1.WorkerDeploymentData.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 13, // 19: temporal.server.api.persistence.v1.WorkerDeploymentData.versions:type_name -> temporal.server.api.persistence.v1.WorkerDeploymentData.VersionsEntry + 6, // 20: temporal.server.api.persistence.v1.TaskQueueTypeUserData.deployment_data:type_name -> temporal.server.api.persistence.v1.DeploymentData + 20, // 21: temporal.server.api.persistence.v1.TaskQueueTypeUserData.config:type_name -> temporal.api.taskqueue.v1.TaskQueueConfig + 15, // 22: temporal.server.api.persistence.v1.TaskQueueUserData.clock:type_name -> temporal.server.api.clock.v1.HybridLogicalClock + 5, // 23: temporal.server.api.persistence.v1.TaskQueueUserData.versioning_data:type_name -> temporal.server.api.persistence.v1.VersioningData + 14, // 24: temporal.server.api.persistence.v1.TaskQueueUserData.per_type:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData.PerTypeEntry + 9, // 25: temporal.server.api.persistence.v1.VersionedTaskQueueUserData.data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData + 7, // 26: temporal.server.api.persistence.v1.DeploymentData.DeploymentsDataEntry.value:type_name -> temporal.server.api.persistence.v1.WorkerDeploymentData + 21, // 27: temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItem.deployment:type_name -> temporal.api.deployment.v1.Deployment + 22, // 28: temporal.server.api.persistence.v1.DeploymentData.DeploymentDataItem.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData + 23, // 29: temporal.server.api.persistence.v1.WorkerDeploymentData.VersionsEntry.value:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionData + 8, // 30: temporal.server.api.persistence.v1.TaskQueueUserData.PerTypeEntry.value:type_name -> temporal.server.api.persistence.v1.TaskQueueTypeUserData + 31, // [31:31] is the sub-list for method output_type + 31, // [31:31] is the sub-list for method input_type + 31, // [31:31] is the sub-list for extension type_name + 31, // [31:31] is the sub-list for extension extendee + 0, // [0:31] is the sub-list for field type_name } func init() { file_temporal_server_api_persistence_v1_task_queues_proto_init() } @@ -883,7 +977,7 @@ func file_temporal_server_api_persistence_v1_task_queues_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_temporal_server_api_persistence_v1_task_queues_proto_rawDesc), len(file_temporal_server_api_persistence_v1_task_queues_proto_rawDesc)), NumEnums: 1, - NumMessages: 11, + NumMessages: 14, NumExtensions: 0, NumServices: 0, }, diff --git a/api/taskqueue/v1/message.pb.go b/api/taskqueue/v1/message.pb.go index 36632a08944..e1a32c77bd4 100644 --- a/api/taskqueue/v1/message.pb.go +++ b/api/taskqueue/v1/message.pb.go @@ -48,8 +48,11 @@ type TaskVersionDirective struct { Deployment *v11.Deployment `protobuf:"bytes,4,opt,name=deployment,proto3" json:"deployment,omitempty"` // Workflow's effective deployment version when the task is scheduled. DeploymentVersion *v12.WorkerDeploymentVersion `protobuf:"bytes,5,opt,name=deployment_version,json=deploymentVersion,proto3" json:"deployment_version,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Counter copied from the workflow execution's WorkflowExecutionVersioningInfo + // during enqueue time. + RevisionNumber int64 `protobuf:"varint,6,opt,name=revision_number,json=revisionNumber,proto3" json:"revision_number,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TaskVersionDirective) Reset() { @@ -128,6 +131,13 @@ func (x *TaskVersionDirective) GetDeploymentVersion() *v12.WorkerDeploymentVersi return nil } +func (x *TaskVersionDirective) GetRevisionNumber() int64 { + if x != nil { + return x.RevisionNumber + } + return 0 +} + type isTaskVersionDirective_BuildId interface { isTaskVersionDirective_BuildId() } @@ -678,7 +688,7 @@ var File_temporal_server_api_taskqueue_v1_message_proto protoreflect.FileDescrip const file_temporal_server_api_taskqueue_v1_message_proto_rawDesc = "" + "\n" + - ".temporal/server/api/taskqueue/v1/message.proto\x12 temporal.server.api.taskqueue.v1\x1a\x1bgoogle/protobuf/empty.proto\x1a(temporal/api/deployment/v1/message.proto\x1a&temporal/api/enums/v1/task_queue.proto\x1a$temporal/api/enums/v1/workflow.proto\x1a'temporal/api/taskqueue/v1/message.proto\x1a'temporal/server/api/enums/v1/task.proto\x1a/temporal/server/api/deployment/v1/message.proto\"\x96\x03\n" + + ".temporal/server/api/taskqueue/v1/message.proto\x12 temporal.server.api.taskqueue.v1\x1a\x1bgoogle/protobuf/empty.proto\x1a(temporal/api/deployment/v1/message.proto\x1a&temporal/api/enums/v1/task_queue.proto\x1a$temporal/api/enums/v1/workflow.proto\x1a'temporal/api/taskqueue/v1/message.proto\x1a'temporal/server/api/enums/v1/task.proto\x1a/temporal/server/api/deployment/v1/message.proto\"\xbf\x03\n" + "\x14TaskVersionDirective\x12J\n" + "\x14use_assignment_rules\x18\x01 \x01(\v2\x16.google.protobuf.EmptyH\x00R\x12useAssignmentRules\x12,\n" + "\x11assigned_build_id\x18\x02 \x01(\tH\x00R\x0fassignedBuildId\x12E\n" + @@ -686,7 +696,8 @@ const file_temporal_server_api_taskqueue_v1_message_proto_rawDesc = "" + "\n" + "deployment\x18\x04 \x01(\v2&.temporal.api.deployment.v1.DeploymentR\n" + "deployment\x12i\n" + - "\x12deployment_version\x18\x05 \x01(\v2:.temporal.server.api.deployment.v1.WorkerDeploymentVersionR\x11deploymentVersionB\n" + + "\x12deployment_version\x18\x05 \x01(\v2:.temporal.server.api.deployment.v1.WorkerDeploymentVersionR\x11deploymentVersion\x12'\n" + + "\x0frevision_number\x18\x06 \x01(\x03R\x0erevisionNumberB\n" + "\n" + "\bbuild_id\"A\n" + "\tFairLevel\x12\x1b\n" + diff --git a/common/dynamicconfig/constants.go b/common/dynamicconfig/constants.go index 7ea2b61987a..5342585244c 100644 --- a/common/dynamicconfig/constants.go +++ b/common/dynamicconfig/constants.go @@ -876,6 +876,11 @@ and deployment interaction in matching and history.`, including deployment-related RPCs in the frontend, deployment version entity workflows in the worker, and deployment interaction in matching and history.`, ) + UseRevisionNumberForWorkerVersioning = NewNamespaceBoolSetting( + "system.useRevisionNumberForWorkerVersioning", + false, + `UseRevisionNumberForWorkerVersioning enables the use of revision number to resolve consistency problems that may arise during task dispatch time.`, + ) EnableNexus = NewGlobalBoolSetting( "system.enableNexus", true, diff --git a/common/worker_versioning/worker_versioning.go b/common/worker_versioning/worker_versioning.go index 94baaad697c..c94f6ce112c 100644 --- a/common/worker_versioning/worker_versioning.go +++ b/common/worker_versioning/worker_versioning.go @@ -6,6 +6,7 @@ import ( "math" "math/rand" "strings" + "time" "github.com/dgryski/go-farm" "github.com/temporalio/sqlparser" @@ -239,11 +240,13 @@ func MakeDirectiveForWorkflowTask( hasCompletedWorkflowTask bool, behavior enumspb.VersioningBehavior, deployment *deploymentpb.Deployment, + revisionNumber int64, ) *taskqueuespb.TaskVersionDirective { if behavior != enumspb.VERSIONING_BEHAVIOR_UNSPECIFIED { return &taskqueuespb.TaskVersionDirective{ Behavior: behavior, DeploymentVersion: DeploymentVersionFromDeployment(deployment), + RevisionNumber: revisionNumber, } } if id := BuildIdIfUsingVersioning(stamp); id != "" && assignedBuildId == "" { @@ -305,6 +308,11 @@ func FindDeploymentVersion(deployments *persistencespb.DeploymentData, v *deploy //nolint:staticcheck func HasDeploymentVersion(deployments *persistencespb.DeploymentData, v *deploymentspb.WorkerDeploymentVersion) bool { + // Represents unversioned workers. + if v == nil { + return false + } + for _, d := range deployments.GetDeployments() { if d.Deployment.Equal(DeploymentFromDeploymentVersion(v)) { return true @@ -315,6 +323,12 @@ func HasDeploymentVersion(deployments *persistencespb.DeploymentData, v *deploym return true } } + + // Check for the presence of the version in the new DeploymentData format. + if deploymentData, ok := deployments.GetDeploymentsData()[v.GetDeploymentName()]; ok { + return deploymentData.GetVersions()[v.GetBuildId()] != nil + } + return false } @@ -524,27 +538,116 @@ func ValidateVersioningOverride(override *workflowpb.VersioningOverride) error { return nil } -// FindDeploymentVersionForWorkflowID returns the deployment version that should be used for a -// particular workflow ID based on the versioning info of the task queue. Nil means unversioned. -func FindDeploymentVersionForWorkflowID( - current *deploymentspb.DeploymentVersionData, - ramping *deploymentspb.DeploymentVersionData, +// FindTargetDeploymentVersionAndRevisionNumberForWorkflowID returns the deployment version and revision number (if applicable) for +// the particular workflow ID based on the versioning info of the task queue. Nil means unversioned. +func FindTargetDeploymentVersionAndRevisionNumberForWorkflowID( + current *deploymentspb.WorkerDeploymentVersion, + currentRevisionNumber int64, + ramping *deploymentspb.WorkerDeploymentVersion, + rampingPercentage float32, + rampingRevisionNumber int64, workflowId string, -) *deploymentspb.WorkerDeploymentVersion { - ramp := ramping.GetRampPercentage() - rampingVersion := ramping.GetVersion() - if ramp <= 0 { +) (*deploymentspb.WorkerDeploymentVersion, int64) { + + // Apply ramp logic using final values + if rampingPercentage <= 0 { // No ramp - return current.GetVersion() - } else if ramp == 100 { - return rampingVersion + return current, currentRevisionNumber + } else if rampingPercentage == 100 { + return ramping, rampingRevisionNumber } // Partial ramp. Decide based on workflow ID wfRampThreshold := calcRampThreshold(workflowId) - if wfRampThreshold <= float64(ramp) { - return rampingVersion + if wfRampThreshold <= float64(rampingPercentage) { + return ramping, rampingRevisionNumber + } + return current, currentRevisionNumber +} + +// PickFinalCurrentAndRamping determines the effective "current" and "ramping" deployment versions +// by comparing timestamps from the legacy deployment data (old format) and the RoutingConfig (new format). +// It returns: +// - final current deployment version and its revision number (0 for old format) +// - final ramping deployment version, its revision number (0 for old format), and ramp percentage +// +//revive:disable-next-line:function-result-limit +func PickFinalCurrentAndRamping( + current *deploymentspb.DeploymentVersionData, + ramping *deploymentspb.DeploymentVersionData, + currentVersionRoutingConfig *deploymentpb.RoutingConfig, + rampingVersionRoutingConfig *deploymentpb.RoutingConfig, +) ( + *deploymentspb.WorkerDeploymentVersion, // final current version + int64, // final current revision number + time.Time, // final current update time + *deploymentspb.WorkerDeploymentVersion, // final ramping version + bool, // if the version is ramping or not + float32, // final ramp percentage + int64, // final ramping revision number + time.Time, // final ramping update time +) { + // current: choose newer of old vs new format + var finalCurrentDep *deploymentspb.WorkerDeploymentVersion + var finalCurrentRev int64 + var finalCurrentUpdateTime time.Time + + oldCurrentTime := current.GetRoutingUpdateTime().AsTime() + newCurrentTime := currentVersionRoutingConfig.GetCurrentVersionChangedTime().AsTime() + + // Break ties by choosing the newer format + if newCurrentTime.After(oldCurrentTime) || newCurrentTime.Equal(oldCurrentTime) { + finalCurrentDep = DeploymentVersionFromDeployment(DeploymentFromExternalDeploymentVersion(currentVersionRoutingConfig.GetCurrentDeploymentVersion())) + finalCurrentRev = currentVersionRoutingConfig.GetRevisionNumber() + finalCurrentUpdateTime = newCurrentTime + } else { + finalCurrentDep = current.GetVersion() + finalCurrentRev = 0 + finalCurrentUpdateTime = oldCurrentTime + } + + // ramping: choose newer of old vs new format; new format can change either version or percentage + var finalRampingDep *deploymentspb.WorkerDeploymentVersion + var finalRampingRev int64 + var finalRampPercentage float32 + var finalRampingUpdateTime time.Time + + oldRampingTime := ramping.GetRoutingUpdateTime().AsTime() + newRampingTime := rampingVersionRoutingConfig.GetRampingVersionPercentageChangedTime().AsTime() + + var isRamping bool + + // Break ties by choosing the newer format + + if newRampingTime.After(oldRampingTime) || newRampingTime.Equal(oldRampingTime) { + finalRampingDep = DeploymentVersionFromDeployment(DeploymentFromExternalDeploymentVersion(rampingVersionRoutingConfig.GetRampingDeploymentVersion())) + finalRampingRev = rampingVersionRoutingConfig.GetRevisionNumber() + finalRampPercentage = rampingVersionRoutingConfig.GetRampingVersionPercentage() + finalRampingUpdateTime = newRampingTime + + // When using the new deployment format, we do not have access to GetRampingSinceTime. Thus, we need to understand if a version is truly ramping or not. + // When using the new deployment format, a version is *not ramping* if it has nil ramping version with ramping version percentage set to 0. + + if finalRampingDep == nil && finalRampPercentage == 0 { + isRamping = false + } else { + isRamping = true + } + + } else { + finalRampingDep = ramping.GetVersion() + finalRampingRev = 0 + finalRampPercentage = ramping.GetRampPercentage() + finalRampingUpdateTime = oldRampingTime + + // A version can only be ramping if it has a rampingSinceTime. + if ramping.GetRampingSinceTime() == nil { + isRamping = false + } else { + isRamping = true + } } - return current.GetVersion() + + return finalCurrentDep, finalCurrentRev, finalCurrentUpdateTime, finalRampingDep, isRamping, finalRampPercentage, finalRampingRev, finalRampingUpdateTime } // calcRampThreshold returns a number in [0, 100) that is deterministically calculated based on the @@ -557,10 +660,21 @@ func calcRampThreshold(id string) float64 { return 100 * (float64(h) / (float64(math.MaxUint32) + 1)) } -//revive:disable-next-line:cognitive-complexity -func CalculateTaskQueueVersioningInfo(deployments *persistencespb.DeploymentData) (*deploymentspb.DeploymentVersionData, *deploymentspb.DeploymentVersionData) { +// CalculateTaskQueueVersioningInfo calculates the current and ramping versioning info for a task queue. +// +//revive:disable-next-line:cognitive-complexity,confusing-results,function-result-limit,cyclomatic +func CalculateTaskQueueVersioningInfo(deployments *persistencespb.DeploymentData) ( + *deploymentspb.WorkerDeploymentVersion, // current version + int64, // current revision number + time.Time, // current update time + *deploymentspb.WorkerDeploymentVersion, // ramping version + bool, // is ramping (ramping_since_time != nil) + float32, // ramp percentage + int64, // ramping revision number + time.Time, // ramping update time +) { if deployments == nil { - return nil, nil + return nil, 0, time.Time{}, nil, false, 0, 0, time.Time{} } var current *deploymentspb.DeploymentVersionData @@ -579,7 +693,8 @@ func CalculateTaskQueueVersioningInfo(deployments *persistencespb.DeploymentData } } - // Find new current and ramping + // Find current and ramping + // [cleanup-pp-wv] for _, v := range deployments.GetVersions() { if v.RoutingUpdateTime != nil && v.GetCurrentSinceTime() != nil { if t := v.RoutingUpdateTime.AsTime(); t.After(current.GetRoutingUpdateTime().AsTime()) { @@ -593,7 +708,63 @@ func CalculateTaskQueueVersioningInfo(deployments *persistencespb.DeploymentData } } - return current, ramping + // Find new current and ramping and pass information in DeploymentVersionData when returning to the caller to + // preserve backwards compatibility. + var routingConfigLatestCurrentVersion *deploymentpb.RoutingConfig + var routingConfigLatestRampingVersion *deploymentpb.RoutingConfig + + if deployments.GetDeploymentsData() != nil { + + for _, deploymentInfo := range deployments.GetDeploymentsData() { + routingConfig := deploymentInfo.GetRoutingConfig() + if routingConfig == nil { + continue + } + + // Only chose those RoutingConfigs which pass the HasDeploymentVersion check due to the following example case: + // t0: TQ "foo" is in current version A with other TQ's + // t1: All other TQ's are moved to new version B except for "foo". + // t2: New version B is set as the current version. + // + // When this happens, we sync to "foo" that A is no longer the current version by passing in the new routing config. However, + // version B should not be considered as the current version for "foo" because the task-queue is not part of version B. + if t := routingConfig.GetCurrentVersionChangedTime().AsTime(); t.After(routingConfigLatestCurrentVersion.GetCurrentVersionChangedTime().AsTime()) { + // Current version can only be unversioned if the task queue is not part of any other version. + // Otherwise, only consider the version as current if the task queue belongs to the version. + if (routingConfig.GetCurrentDeploymentVersion() == nil && routingConfigLatestCurrentVersion.GetCurrentDeploymentVersion() == nil) || + HasDeploymentVersion(deployments, DeploymentVersionFromDeployment(DeploymentFromExternalDeploymentVersion(routingConfig.GetCurrentDeploymentVersion()))) { + routingConfigLatestCurrentVersion = routingConfig + } + } + + if t := routingConfig.GetRampingVersionPercentageChangedTime().AsTime(); t.After(routingConfigLatestRampingVersion.GetRampingVersionPercentageChangedTime().AsTime()) { + // Ramping version can only be unversioned if the task queue is not part of any other version. + // Otherwise, only consider the version as ramping if the task queue belongs to the version. + if (routingConfig.GetRampingDeploymentVersion() == nil && routingConfigLatestRampingVersion.GetRampingDeploymentVersion() == nil) || + HasDeploymentVersion(deployments, DeploymentVersionFromDeployment(DeploymentFromExternalDeploymentVersion(routingConfig.GetRampingDeploymentVersion()))) { + routingConfigLatestRampingVersion = routingConfig + } + } + } + } + + if routingConfigLatestCurrentVersion.GetCurrentDeploymentVersion() == nil && current.GetVersion() != nil { + // The new current version is not unversioned but belongs to a versioned deployment which synced to the task-queue using the old deployment data format. + routingConfigLatestCurrentVersion = nil + } + + if routingConfigLatestRampingVersion.GetRampingDeploymentVersion() == nil && ramping.GetVersion() != nil { + // The new ramping version is not unversioned but belongs to a versioned deployment which synced to the task-queue using the old deployment data format. + routingConfigLatestRampingVersion = nil + } + + // Pick the final current and ramping version amongst the old and new deployment data formats. + return PickFinalCurrentAndRamping( + current, + ramping, + routingConfigLatestCurrentVersion, + routingConfigLatestRampingVersion, + ) } func ValidateTaskVersionDirective( @@ -724,6 +895,10 @@ func WorkerDeploymentVersionToStringV32(v *deploymentspb.WorkerDeploymentVersion return v.GetDeploymentName() + WorkerDeploymentVersionIdDelimiter + v.GetBuildId() } +func BuildIDToStringV32(deploymentName, buildID string) string { + return deploymentName + WorkerDeploymentVersionIdDelimiter + buildID +} + func ExternalWorkerDeploymentVersionToString(v *deploymentpb.WorkerDeploymentVersion) string { if v == nil { return "" diff --git a/common/worker_versioning/worker_versioning_test.go b/common/worker_versioning/worker_versioning_test.go index 9621b080c00..992b9274e6c 100644 --- a/common/worker_versioning/worker_versioning_test.go +++ b/common/worker_versioning/worker_versioning_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/stretchr/testify/assert" + deploymentpb "go.temporal.io/api/deployment/v1" deploymentspb "go.temporal.io/server/api/deployment/v1" persistencespb "go.temporal.io/server/api/persistence/v1" "go.temporal.io/server/common/primitives/timestamp" @@ -24,6 +25,10 @@ var ( BuildId: "v3", DeploymentName: "foo", } + v4 = &deploymentspb.WorkerDeploymentVersion{ + BuildId: "v4", + DeploymentName: "bar", + } ) func TestCalculateTaskQueueVersioningInfo(t *testing.T) { @@ -33,31 +38,21 @@ func TestCalculateTaskQueueVersioningInfo(t *testing.T) { tests := []struct { name string - wantCurrent *deploymentspb.DeploymentVersionData - wantRamping *deploymentspb.DeploymentVersionData + wantCurrent *deploymentspb.WorkerDeploymentVersion + wantRamping *deploymentspb.WorkerDeploymentVersion data *persistencespb.DeploymentData }{ {name: "nil data"}, {name: "empty data", data: &persistencespb.DeploymentData{}}, - {name: "old data", wantCurrent: &deploymentspb.DeploymentVersionData{Version: v1, RoutingUpdateTime: t1}, + {name: "old data", wantCurrent: v1, data: &persistencespb.DeploymentData{ Deployments: []*persistencespb.DeploymentData_DeploymentDataItem{ {Deployment: DeploymentFromDeploymentVersion(v1), Data: &deploymentspb.TaskQueueData{LastBecameCurrentTime: t1}}, }}, }, - {name: "old and new data", wantCurrent: &deploymentspb.DeploymentVersionData{Version: v2, RoutingUpdateTime: t2, CurrentSinceTime: t2}, - data: &persistencespb.DeploymentData{ - Deployments: []*persistencespb.DeploymentData_DeploymentDataItem{ - {Deployment: DeploymentFromDeploymentVersion(v1), Data: &deploymentspb.TaskQueueData{LastBecameCurrentTime: t1}}, - }, - Versions: []*deploymentspb.DeploymentVersionData{ - {Version: v2, CurrentSinceTime: t2, RoutingUpdateTime: t2}, - }, - }, - }, - {name: "two current + two ramping", - wantCurrent: &deploymentspb.DeploymentVersionData{Version: v2, RoutingUpdateTime: t2, CurrentSinceTime: t2}, - wantRamping: &deploymentspb.DeploymentVersionData{Version: v3, RoutingUpdateTime: t3, RampPercentage: 20, RampingSinceTime: t1}, + {name: "old deployment data: two current + two ramping", + wantCurrent: v2, + wantRamping: v3, data: &persistencespb.DeploymentData{ Versions: []*deploymentspb.DeploymentVersionData{ {Version: v1, CurrentSinceTime: t1, RoutingUpdateTime: t1}, @@ -67,7 +62,7 @@ func TestCalculateTaskQueueVersioningInfo(t *testing.T) { }, }, }, - {name: "ramp without current", wantRamping: &deploymentspb.DeploymentVersionData{Version: v3, RoutingUpdateTime: t3, RampPercentage: 20, RampingSinceTime: t3}, + {name: "old deployment data: ramp without current", wantRamping: v3, data: &persistencespb.DeploymentData{ Versions: []*deploymentspb.DeploymentVersionData{ {Version: v1, RampPercentage: 50, RoutingUpdateTime: t2, RampingSinceTime: t2}, @@ -75,8 +70,8 @@ func TestCalculateTaskQueueVersioningInfo(t *testing.T) { }, }, }, - {name: "ramp to unversioned", - wantRamping: &deploymentspb.DeploymentVersionData{Version: nil, RoutingUpdateTime: t2, RampPercentage: 20, RampingSinceTime: t2}, + {name: "old deployment data: ramp to unversioned", + wantRamping: nil, data: &persistencespb.DeploymentData{ Versions: []*deploymentspb.DeploymentVersionData{ {Version: v1, RampPercentage: 50, RoutingUpdateTime: t1, RampingSinceTime: t1}, @@ -84,9 +79,9 @@ func TestCalculateTaskQueueVersioningInfo(t *testing.T) { UnversionedRampData: &deploymentspb.DeploymentVersionData{Version: nil, RampPercentage: 20, RoutingUpdateTime: t2, RampingSinceTime: t2}, }, }, - {name: "ramp 100%", - wantCurrent: &deploymentspb.DeploymentVersionData{Version: v1, RoutingUpdateTime: t1, CurrentSinceTime: t1}, - wantRamping: &deploymentspb.DeploymentVersionData{Version: v2, RoutingUpdateTime: t2, RampPercentage: 100, RampingSinceTime: t2}, + {name: "old deployment data: ramp 100%", + wantCurrent: v1, + wantRamping: v2, data: &persistencespb.DeploymentData{ Versions: []*deploymentspb.DeploymentVersionData{ {Version: v1, RoutingUpdateTime: t1, CurrentSinceTime: t1}, @@ -94,9 +89,9 @@ func TestCalculateTaskQueueVersioningInfo(t *testing.T) { }, }, }, - {name: "ramp to unversioned 100%", - wantCurrent: &deploymentspb.DeploymentVersionData{Version: v1, RoutingUpdateTime: t1, CurrentSinceTime: t1}, - wantRamping: &deploymentspb.DeploymentVersionData{Version: nil, RoutingUpdateTime: t2, RampPercentage: 100, RampingSinceTime: t2}, + {name: "old deployment data: ramp to unversioned 100%", + wantCurrent: v1, + wantRamping: nil, data: &persistencespb.DeploymentData{ Versions: []*deploymentspb.DeploymentVersionData{ {Version: v1, RoutingUpdateTime: t1, CurrentSinceTime: t1}, @@ -104,9 +99,9 @@ func TestCalculateTaskQueueVersioningInfo(t *testing.T) { UnversionedRampData: &deploymentspb.DeploymentVersionData{Version: nil, RampPercentage: 100, RoutingUpdateTime: t2, RampingSinceTime: t2}, }, }, - {name: "ramp to unversioned 100% without current", + {name: "old deployment data: ramp to unversioned 100% without current", wantCurrent: nil, - wantRamping: &deploymentspb.DeploymentVersionData{Version: nil, RoutingUpdateTime: t2, RampPercentage: 100, RampingSinceTime: t2}, + wantRamping: nil, data: &persistencespb.DeploymentData{ Versions: []*deploymentspb.DeploymentVersionData{ {Version: v1, RoutingUpdateTime: t1, CurrentSinceTime: nil}, @@ -114,10 +109,226 @@ func TestCalculateTaskQueueVersioningInfo(t *testing.T) { UnversionedRampData: &deploymentspb.DeploymentVersionData{Version: nil, RampPercentage: 100, RoutingUpdateTime: t2, RampingSinceTime: t2}, }, }, + {name: "mix of prerelease and public preview deployment data: one current", wantCurrent: v2, + data: &persistencespb.DeploymentData{ + Deployments: []*persistencespb.DeploymentData_DeploymentDataItem{ + {Deployment: DeploymentFromDeploymentVersion(v1), Data: &deploymentspb.TaskQueueData{LastBecameCurrentTime: t1}}, + }, + Versions: []*deploymentspb.DeploymentVersionData{ + {Version: v2, CurrentSinceTime: t2, RoutingUpdateTime: t2}, + }, + }, + }, + // Membership related tests + {name: "mixed: new RoutingConfig current overrides old when newer in membership", wantCurrent: v2, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{ + // Old format: v1 is current at older time t1 + {Version: v1, CurrentSinceTime: t1, RoutingUpdateTime: t1}, + }, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + v2.GetDeploymentName(): { + RoutingConfig: &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{ + DeploymentName: v2.GetDeploymentName(), + BuildId: v2.GetBuildId(), + }, + CurrentVersionChangedTime: t2, + }, + // Membership contains v2 so HasDeploymentVersion() passes + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{ + v2.GetBuildId(): {}, + }, + }, + }, + }, + }, + {name: "mixed: fall back to old current when new current not in membership", wantCurrent: v1, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{ + // Old format: v1 is current at older time t1 + {Version: v1, CurrentSinceTime: t1, RoutingUpdateTime: t1}, + }, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + v2.GetDeploymentName(): { + RoutingConfig: &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{ + DeploymentName: v2.GetDeploymentName(), + BuildId: v2.GetBuildId(), + }, + CurrentVersionChangedTime: t2, + }, + // Membership missing v2 -> new format should be ignored for current + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{}, + }, + }, + }, + }, + {name: "mixed: new RoutingConfig ramping overrides old when newer in membership", wantRamping: v3, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{ + // Old format: v2 is ramping at older time t1 + {Version: v2, RampingSinceTime: t1, RoutingUpdateTime: t1, RampPercentage: 30}, + }, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + v3.GetDeploymentName(): { + RoutingConfig: &deploymentpb.RoutingConfig{ + RampingDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{ + DeploymentName: v3.GetDeploymentName(), + BuildId: v3.GetBuildId(), + }, + RampingVersionPercentage: 20, + RampingVersionPercentageChangedTime: t2, + }, + // Membership contains v3 so HasDeploymentVersion() passes + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{ + v3.GetBuildId(): {}, + }, + }, + }, + }, + }, + {name: "mixed: fall back to old ramping when new ramping not in membership", wantRamping: v2, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{ + // Old format: v2 is ramping at older time t1 + {Version: v2, RampingSinceTime: t1, RoutingUpdateTime: t1, RampPercentage: 30}, + }, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + v3.GetDeploymentName(): { + RoutingConfig: &deploymentpb.RoutingConfig{ + RampingDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{ + DeploymentName: v3.GetDeploymentName(), + BuildId: v3.GetBuildId(), + }, + RampingVersionPercentage: 20, + RampingVersionPercentageChangedTime: t2, + }, + // Membership missing v3 -> new format should be ignored for ramping + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{}, + }, + }, + }, + }, + {name: "mixed: unversioned current newer than older current version -> keep old versioned", wantCurrent: v4, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{ + // Old format: v4 is current at older time t1 + {Version: v4, CurrentSinceTime: t1, RoutingUpdateTime: t1}, + }, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + // New format: sets current to unversioned at newer time t3 + "foo": { + RoutingConfig: &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: nil, // unversioned + CurrentVersionChangedTime: t3, + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{ + // Membership irrelevant for unversioned; keep empty or arbitrary + }, + }, + }, + }, + }, + {name: "mixed: unversioned current without any other current version -> unversioned", wantCurrent: nil, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{}, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + "foo": { + RoutingConfig: &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: nil, // unversioned + CurrentVersionChangedTime: t3, + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{ + // Membership irrelevant for unversioned; keep empty or arbitrary + }, + }, + }, + }, + }, + {name: "mixed: unversioned ramping newer than older ramping version -> keep old versioned", wantRamping: v4, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{ + // Old format: v4 is ramping at older time t1 + {Version: v4, RampingSinceTime: t1, RoutingUpdateTime: t1, RampPercentage: 30}, + }, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + "foo": { + RoutingConfig: &deploymentpb.RoutingConfig{ + RampingDeploymentVersion: nil, // unversioned ramp target + RampingVersionPercentage: 20, + RampingVersionPercentageChangedTime: t3, + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{}, + }, + }, + }, + }, + {name: "mixed: unversioned ramping without any other ramping version -> unversioned", wantRamping: nil, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{}, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + "foo": { + RoutingConfig: &deploymentpb.RoutingConfig{ + RampingDeploymentVersion: nil, // unversioned ramp target + RampingVersionPercentage: 25, + RampingVersionPercentageChangedTime: t3, + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{}, + }, + }, + }, + }, + {name: "new format: unversioned current with newer timestamp with another current version in a different deployment -> current is still versioned", wantCurrent: v1, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{}, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + "foo": { + RoutingConfig: &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{DeploymentName: "foo", BuildId: "v1"}, + CurrentVersionChangedTime: timestamp.TimePtr(time.Now().Add(-time.Hour)), + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{ + v1.GetBuildId(): {}, + }, + }, + "bar": { + RoutingConfig: &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: nil, + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{}, + }, + }, + }}, + {name: "new format: unversioned ramping with newer timestamp with another ramping version in a different deployment -> ramping is still versioned", wantRamping: v1, + data: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{}, + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + "foo": { + RoutingConfig: &deploymentpb.RoutingConfig{ + RampingDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{DeploymentName: "foo", BuildId: v1.GetBuildId()}, + RampingVersionPercentage: 30, + RampingVersionPercentageChangedTime: timestamp.TimePtr(time.Now().Add(-time.Hour)), + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{ + v1.GetBuildId(): {}, + }, + }, + "bar": { + RoutingConfig: &deploymentpb.RoutingConfig{ + RampingDeploymentVersion: nil, + RampingVersionPercentage: 20, + RampingVersionPercentageChangedTime: timestamp.TimePtr(time.Now()), + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{}, + }, + }, + }}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - current, ramping := CalculateTaskQueueVersioningInfo(tt.data) + current, _, _, ramping, _, _, _, _ := CalculateTaskQueueVersioningInfo(tt.data) if !current.Equal(tt.wantCurrent) { t.Errorf("got current = %v, want %v", current, tt.wantCurrent) } @@ -136,15 +347,15 @@ func TestFindDeploymentVersionForWorkflowID(t *testing.T) { want *deploymentspb.WorkerDeploymentVersion }{ {name: "nil current and ramping info", want: nil}, - {name: "with current version", current: &deploymentspb.DeploymentVersionData{Version: v1}, want: v1}, - {name: "with full ramp", current: &deploymentspb.DeploymentVersionData{Version: v1}, ramping: &deploymentspb.DeploymentVersionData{Version: v2, RampPercentage: 100}, want: v2}, - {name: "with full ramp to unversioned", current: &deploymentspb.DeploymentVersionData{Version: v1}, ramping: &deploymentspb.DeploymentVersionData{RampPercentage: 100}, want: nil}, - {name: "with full ramp from unversioned", ramping: &deploymentspb.DeploymentVersionData{Version: v1, RampPercentage: 100}, want: v1}, + {name: "with current version", current: &deploymentspb.DeploymentVersionData{Version: v1, RoutingUpdateTime: timestamp.TimePtr(time.Now())}, want: v1}, + {name: "with full ramp", current: &deploymentspb.DeploymentVersionData{Version: v1, RoutingUpdateTime: timestamp.TimePtr(time.Now())}, ramping: &deploymentspb.DeploymentVersionData{Version: v2, RampPercentage: 100, RoutingUpdateTime: timestamp.TimePtr(time.Now())}, want: v2}, + {name: "with full ramp to unversioned", current: &deploymentspb.DeploymentVersionData{Version: v1, RoutingUpdateTime: timestamp.TimePtr(time.Now())}, ramping: &deploymentspb.DeploymentVersionData{RampPercentage: 100, RoutingUpdateTime: timestamp.TimePtr(time.Now())}, want: nil}, + {name: "with full ramp from unversioned", ramping: &deploymentspb.DeploymentVersionData{Version: v1, RampPercentage: 100, RoutingUpdateTime: timestamp.TimePtr(time.Now())}, want: v1}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := FindDeploymentVersionForWorkflowID(tt.current, tt.ramping, "my-wf-id"); !got.Equal(tt.want) { - t.Errorf("FindDeploymentVersionForWorkflowID() = %v, want %v", got, tt.want) + if got, _ := FindTargetDeploymentVersionAndRevisionNumberForWorkflowID(tt.current.GetVersion(), 0, tt.ramping.GetVersion(), tt.ramping.GetRampPercentage(), 0, "my-wf-id"); !got.Equal(tt.want) { + t.Errorf("FindTargetDeploymentVersionAndRevisionNumberForWorkflowID() = %v, want %v", got, tt.want) } }) } @@ -166,17 +377,19 @@ func TestFindDeploymentVersionForWorkflowID_PartialRamp(t *testing.T) { var ramping *deploymentspb.DeploymentVersionData if tt.from != nil { current = &deploymentspb.DeploymentVersionData{ - Version: tt.from, + Version: tt.from, + RoutingUpdateTime: timestamp.TimePtr(time.Now()), } } ramping = &deploymentspb.DeploymentVersionData{ - Version: tt.to, - RampPercentage: 30, + Version: tt.to, + RampPercentage: 30, + RoutingUpdateTime: timestamp.TimePtr(time.Now()), } histogram := make(map[string]int) runs := 1000000 for i := 0; i < runs; i++ { - v := FindDeploymentVersionForWorkflowID(current, ramping, "wf-"+strconv.Itoa(i)) + v, _ := FindTargetDeploymentVersionAndRevisionNumberForWorkflowID(current.GetVersion(), 0, ramping.GetVersion(), ramping.GetRampPercentage(), 0, "wf-"+strconv.Itoa(i)) histogram[v.GetBuildId()]++ } diff --git a/go.mod b/go.mod index e9865adf5ae..f999ed1f44a 100644 --- a/go.mod +++ b/go.mod @@ -171,3 +171,5 @@ require ( modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.11.0 // indirect ) + +replace go.temporal.io/api => github.com/temporalio/api-go v1.55.1-0.20251024182902-91769eb1c81d diff --git a/go.sum b/go.sum index 1293513c685..ef471153dbb 100644 --- a/go.sum +++ b/go.sum @@ -330,6 +330,8 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/temporalio/api-go v1.55.1-0.20251024182902-91769eb1c81d h1:oG8uT3yy+iNtg1JAirAFKjl0ZCu/Ms3L9d/BT+VRxls= +github.com/temporalio/api-go v1.55.1-0.20251024182902-91769eb1c81d/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= github.com/temporalio/ringpop-go v0.0.0-20250130211428-b97329e994f7 h1:lEebX/hZss+TSH3EBwhztnBavJVj7pWGJOH8UgKHS0w= github.com/temporalio/ringpop-go v0.0.0-20250130211428-b97329e994f7/go.mod h1:RE+CHmY+kOZQk47AQaVzwrGmxpflnLgTd6EOK0853j4= github.com/temporalio/sqlparser v0.0.0-20231115171017-f4060bcfa6cb h1:YzHH/U/dN7vMP+glybzcXRTczTrgfdRisNTzAj7La04= @@ -393,8 +395,6 @@ go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= -go.temporal.io/api v1.57.0 h1:vJGbU6RqMqCAXP03Jq4KEL61sCxAdJx4Yj7PxtbsrF0= -go.temporal.io/api v1.57.0/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= go.temporal.io/sdk v1.35.0 h1:lRNAQ5As9rLgYa7HBvnmKyzxLcdElTuoFJ0FXM/AsLQ= go.temporal.io/sdk v1.35.0/go.mod h1:1q5MuLc2MEJ4lneZTHJzpVebW2oZnyxoIOWX3oFVebw= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= diff --git a/proto/internal/temporal/server/api/deployment/v1/message.proto b/proto/internal/temporal/server/api/deployment/v1/message.proto index 22127085771..a87b536a99d 100644 --- a/proto/internal/temporal/server/api/deployment/v1/message.proto +++ b/proto/internal/temporal/server/api/deployment/v1/message.proto @@ -22,6 +22,7 @@ message WorkerDeploymentVersion { // The source of truth for this data is in the WorkerDeployment entity workflows, which is // synced to all TQs whenever the source changes. +// Deprecated. message DeploymentVersionData { // Nil means unversioned. WorkerDeploymentVersion version = 1; @@ -47,6 +48,12 @@ message DeploymentVersionData { temporal.api.enums.v1.WorkerDeploymentVersionStatus status = 6; } +// Information that a TQ should know about a particular Deployment Version. This info is not part of +// RoutingConfig and hence not protected by the revision number. +message WorkerDeploymentVersionData { + temporal.api.enums.v1.WorkerDeploymentVersionStatus status = 6; +} + // Local state for Worker Deployment Version message VersionLocalState { WorkerDeploymentVersion version = 1; @@ -265,6 +272,7 @@ message StartWorkerDeploymentVersionRequest { // used as Worker Deployment Version workflow activity input: message SyncDeploymentVersionUserDataRequest { + string deployment_name = 4; WorkerDeploymentVersion version = 1; repeated SyncUserData sync = 2; // if true, the version will be forgotten from the task queue user data. 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 7323854bd6b..ebe47e0a7c6 100644 --- a/proto/internal/temporal/server/api/historyservice/v1/request_response.proto +++ b/proto/internal/temporal/server/api/historyservice/v1/request_response.proto @@ -238,6 +238,9 @@ message RecordWorkflowTaskStartedRequest { temporal.server.api.taskqueue.v1.TaskVersionDirective version_directive = 10; // Stamp value from when the workflow task was scheduled. Used to validate the task is still relevant. int32 stamp = 11; + // Revision number that was sent by matching when the task was dispatched. Used to resolve eventual consistency issues + // that may arise due to stale routing configs in task queue partitions. + int64 task_dispatch_revision_number = 12; } message RecordWorkflowTaskStartedResponse { @@ -311,6 +314,9 @@ message RecordActivityTaskStartedRequest { reserved 11; // Versioning directive that was sent by history when scheduling the task. temporal.server.api.taskqueue.v1.TaskVersionDirective version_directive = 12; + // Revision number that was sent by matching when the task was dispatched. Used to resolve eventual consistency issues + // that may arise due to stale routing configs in task queue partitions. + int64 task_dispatch_revision_number = 13; } message RecordActivityTaskStartedResponse { diff --git a/proto/internal/temporal/server/api/matchingservice/v1/request_response.proto b/proto/internal/temporal/server/api/matchingservice/v1/request_response.proto index 2f4ce585d56..f615461ce41 100644 --- a/proto/internal/temporal/server/api/matchingservice/v1/request_response.proto +++ b/proto/internal/temporal/server/api/matchingservice/v1/request_response.proto @@ -342,6 +342,10 @@ message GetTaskQueueUserDataResponse { message SyncDeploymentUserDataRequest { string namespace_id = 1; string task_queue = 2; + // Required, unless deprecated fields are used. + // (-- api-linter: core::0203::required=disabled + // aip.dev/not-precedent: Not following Google API format --) + string deployment_name = 9; // Note: this is the task queue type being modified, but this field should not be used for // routing, the user data is owned by the WORKFLOW task queue. // Deprecated. Use `task_queue_types`. @@ -357,15 +361,29 @@ message SyncDeploymentUserDataRequest { oneof operation { // The deployment version and its data that is being updated. - temporal.server.api.deployment.v1.DeploymentVersionData update_version_data = 6; + temporal.server.api.deployment.v1.DeploymentVersionData update_version_data = 6 [deprecated = true]; // The version whose data should be cleaned from the task queue. - temporal.server.api.deployment.v1.WorkerDeploymentVersion forget_version = 7; + temporal.server.api.deployment.v1.WorkerDeploymentVersion forget_version = 7 [deprecated = true]; } + + // Absent means no change. + // Ignored by the task queue if new revision number is not greater that what it has. + temporal.api.deployment.v1.RoutingConfig update_routing_config = 10; + // Optional map of build id to upsert version data. + // Ignored if `update_routing_config` is present and has an outdated revision number. + // (-- api-linter: core::0203::required=disabled + // aip.dev/not-precedent: Not following Google API format --) + map upsert_versions_data = 11; + // List of build ids to forget from task queue. + // Ignored if `update_routing_config` is present and has an outdated revision number. + repeated string forget_versions = 12; } message SyncDeploymentUserDataResponse { // New task queue user data version. Can be used to wait for propagation. int64 version = 1; + // If the routing config changed after applying this operation. Compared base on revision number. + bool routing_config_changed = 2; } message ApplyTaskQueueUserDataReplicationEventRequest { diff --git a/proto/internal/temporal/server/api/persistence/v1/task_queues.proto b/proto/internal/temporal/server/api/persistence/v1/task_queues.proto index 437724837f6..10d9ed021f6 100644 --- a/proto/internal/temporal/server/api/persistence/v1/task_queues.proto +++ b/proto/internal/temporal/server/api/persistence/v1/task_queues.proto @@ -101,10 +101,17 @@ message DeploymentData { // `ramp_percentage`. If there is no Ramping Version, all the unversioned/unpinned tasks are // routed to the Current Version. If there is no Current Version, any poller with UNVERSIONED // (or unspecified) WorkflowVersioningMode will receive the tasks. - repeated temporal.server.api.deployment.v1.DeploymentVersionData versions = 2; + // Remove after `AsyncSetCurrentAndRamping` workflow version is irreversibly enabled. + repeated temporal.server.api.deployment.v1.DeploymentVersionData versions = 2 [deprecated = true]; // Present if the task queue's ramping version is unversioned. - temporal.server.api.deployment.v1.DeploymentVersionData unversioned_ramp_data = 3; + // Remove after `AsyncSetCurrentAndRamping` workflow version is irreversibly enabled. + temporal.server.api.deployment.v1.DeploymentVersionData unversioned_ramp_data = 3 [deprecated = true]; + + // Routing and version membership data for all worker deployments that this task queue belongs to. + // Key is the deployment name. + map deployments_data = 4; + // Deprecated. message DeploymentDataItem { @@ -113,6 +120,15 @@ message DeploymentData { } } +// Routing config and version membership data for a given worker deployment that a TQ should know. +message WorkerDeploymentData { + temporal.api.deployment.v1.RoutingConfig routing_config = 1; + // This map tracks the membership of the task queue in the deployment versions. A version is + // present here iff the task queue has ever been polled from the version. + // Key is the build id. + map versions = 2; +} + // Container for all persistent user data that varies per task queue type within a family. message TaskQueueTypeUserData { DeploymentData deployment_data = 1; diff --git a/proto/internal/temporal/server/api/taskqueue/v1/message.proto b/proto/internal/temporal/server/api/taskqueue/v1/message.proto index 19afc1c1834..b059d87c345 100644 --- a/proto/internal/temporal/server/api/taskqueue/v1/message.proto +++ b/proto/internal/temporal/server/api/taskqueue/v1/message.proto @@ -38,6 +38,9 @@ message TaskVersionDirective { temporal.api.deployment.v1.Deployment deployment = 4; // Workflow's effective deployment version when the task is scheduled. temporal.server.api.deployment.v1.WorkerDeploymentVersion deployment_version = 5; + // Counter copied from the workflow execution's WorkflowExecutionVersioningInfo + // during enqueue time. + int64 revision_number = 6; } message FairLevel { diff --git a/service/history/api/queryworkflow/api.go b/service/history/api/queryworkflow/api.go index e922bb79f90..42d352c9644 100644 --- a/service/history/api/queryworkflow/api.go +++ b/service/history/api/queryworkflow/api.go @@ -327,6 +327,7 @@ func queryDirectlyThroughMatching( msResp.GetPreviousStartedEventId() != common.EmptyEventID, workflow.GetEffectiveVersioningBehavior(msResp.GetVersioningInfo()), workflow.GetEffectiveDeployment(msResp.GetVersioningInfo()), + msResp.GetVersioningInfo().GetRevisionNumber(), ) if msResp.GetIsStickyTaskQueueEnabled() && diff --git a/service/history/api/recordactivitytaskstarted/api.go b/service/history/api/recordactivitytaskstarted/api.go index b7ff0cce7df..0c68a219994 100644 --- a/service/history/api/recordactivitytaskstarted/api.go +++ b/service/history/api/recordactivitytaskstarted/api.go @@ -198,7 +198,8 @@ func recordActivityTaskStarted( // The workflow transition happens only if the workflow task of the same execution would go // to the poller deployment. Otherwise, it means the activity is independently versioned, we // allow it to start without affecting the workflow. - wftDepVer, err := getDeploymentVersionForWorkflowId(ctx, + + wftDepVer, wftDepRevNum, err := getDeploymentVersionAndRevisionNumberForWorkflowID(ctx, request.NamespaceId, mutableState.GetExecutionInfo().GetTaskQueue(), enumspb.TASK_QUEUE_TYPE_WORKFLOW, @@ -209,8 +210,17 @@ func recordActivityTaskStarted( // Let matching retry return nil, rejectCodeUndefined, err } - if pollerDeployment.Equal(worker_versioning.DeploymentFromDeploymentVersion(wftDepVer)) { - if err := mutableState.StartDeploymentTransition(pollerDeployment); err != nil { + + // We start a transition if one of the following conditions are met: + // 1. The workflow will be dispatching to the same deployment as the activity but has not yet. + // 2. The workflow TQ is lagging behind the activity TQ, with respect to the current version of a deployment. + + // Note: We use > instead of >= because a non-backlogged activity task could have the same revision number as the MS and that should not commence a transition. + // Note: Revision number mechanics are only involved if the dynamic config is enabled. + useRevisionNumber := shardContext.GetConfig().UseRevisionNumberForWorkerVersioning(namespaceName) + if pollerDeployment.Equal(worker_versioning.DeploymentFromDeploymentVersion(wftDepVer)) || + (useRevisionNumber && pollerDeployment.GetSeriesName() == wftDepVer.GetDeploymentName() && request.TaskDispatchRevisionNumber > wftDepRevNum) { + if err := mutableState.StartDeploymentTransition(pollerDeployment, request.TaskDispatchRevisionNumber); err != nil { if errors.Is(err, workflow.ErrPinnedWorkflowCannotTransition) { // This must be a task from a time that the workflow was unpinned, but it's // now pinned so can't transition. Matching can drop the task safely. @@ -220,6 +230,7 @@ func recordActivityTaskStarted( } return nil, rejectCodeUndefined, err } + // This activity started a transition, make sure the MS changes are written but // reject the activity task. return nil, rejectCodeStartedTransition, nil @@ -269,14 +280,14 @@ func recordActivityTaskStarted( // TODO (Shahab): move this method to a better place // TODO: cache this result (especially if the answer is true) -func getDeploymentVersionForWorkflowId( +func getDeploymentVersionAndRevisionNumberForWorkflowID( ctx context.Context, namespaceID string, taskQueueName string, taskQueueType enumspb.TaskQueueType, matchingClient matchingservice.MatchingServiceClient, workflowId string, -) (*deploymentspb.WorkerDeploymentVersion, error) { +) (*deploymentspb.WorkerDeploymentVersion, int64, error) { resp, err := matchingClient.GetTaskQueueUserData(ctx, &matchingservice.GetTaskQueueUserDataRequest{ NamespaceId: namespaceID, @@ -284,15 +295,17 @@ func getDeploymentVersionForWorkflowId( TaskQueueType: taskQueueType, }) if err != nil { - return nil, err + return nil, 0, err } tqData, ok := resp.GetUserData().GetData().GetPerType()[int32(taskQueueType)] if !ok { // The TQ is unversioned - return nil, nil + return nil, 0, nil } - current, ramping := worker_versioning.CalculateTaskQueueVersioningInfo(tqData.GetDeploymentData()) - return worker_versioning.FindDeploymentVersionForWorkflowID(current, ramping, workflowId), nil + + current, currentRevisionNumber, _, ramping, _, rampingPercentage, rampingRevisionNumber, _ := worker_versioning.CalculateTaskQueueVersioningInfo(tqData.GetDeploymentData()) + targetDeploymentVersion, targetDeploymentRevisionNumber := worker_versioning.FindTargetDeploymentVersionAndRevisionNumberForWorkflowID(current, currentRevisionNumber, ramping, rampingPercentage, rampingRevisionNumber, workflowId) + return targetDeploymentVersion, targetDeploymentRevisionNumber, nil } func processActivityWorkflowRules( diff --git a/service/history/api/recordworkflowtaskstarted/api.go b/service/history/api/recordworkflowtaskstarted/api.go index 5a30b28df6f..3cbf2194ec7 100644 --- a/service/history/api/recordworkflowtaskstarted/api.go +++ b/service/history/api/recordworkflowtaskstarted/api.go @@ -190,7 +190,7 @@ func Invoke( // Dispatching to a different deployment. Try starting a transition. Starting the // transition AFTER applying the start event because we don't want this pending // wft to be rescheduled by StartDeploymentTransition. - if err := mutableState.StartDeploymentTransition(pollerDeployment); err != nil { + if err := mutableState.StartDeploymentTransition(pollerDeployment, req.TaskDispatchRevisionNumber); err != nil { if errors.Is(err, workflow.ErrPinnedWorkflowCannotTransition) { // This must be a task from a time that the workflow was unpinned, but it's // now pinned so can't transition. Matching can drop the task safely. diff --git a/service/history/api/updateworkflow/api.go b/service/history/api/updateworkflow/api.go index b2cd20ab4d4..cb9f9a0d573 100644 --- a/service/history/api/updateworkflow/api.go +++ b/service/history/api/updateworkflow/api.go @@ -196,6 +196,7 @@ func (u *Updater) ApplyRequest( ms.HasCompletedAnyWorkflowTask(), ms.GetEffectiveVersioningBehavior(), ms.GetEffectiveDeployment(), + ms.GetVersioningRevisionNumber(), ) return &api.UpdateWorkflowAction{ diff --git a/service/history/configs/config.go b/service/history/configs/config.go index 9fdc6b7b675..1cfdc933f1c 100644 --- a/service/history/configs/config.go +++ b/service/history/configs/config.go @@ -385,6 +385,9 @@ type Config struct { MaxLocalParentWorkflowVerificationDuration dynamicconfig.DurationPropertyFn NumConsecutiveWorkflowTaskProblemsToTriggerSearchAttribute dynamicconfig.IntPropertyFnWithNamespaceFilter + + // Worker-Versioning related settings + UseRevisionNumberForWorkerVersioning dynamicconfig.BoolPropertyFnWithNamespaceFilter } // NewConfig returns new service config with default values @@ -729,6 +732,9 @@ func NewConfig( LogAllReqErrors: dynamicconfig.LogAllReqErrors.Get(dc), NumConsecutiveWorkflowTaskProblemsToTriggerSearchAttribute: dynamicconfig.NumConsecutiveWorkflowTaskProblemsToTriggerSearchAttribute.Get(dc), + + // Worker-Versioning related + UseRevisionNumberForWorkerVersioning: dynamicconfig.UseRevisionNumberForWorkerVersioning.Get(dc), } return cfg diff --git a/service/history/interfaces/mutable_state.go b/service/history/interfaces/mutable_state.go index 15d4fce8d9a..ce29efefacd 100644 --- a/service/history/interfaces/mutable_state.go +++ b/service/history/interfaces/mutable_state.go @@ -355,7 +355,9 @@ type ( // activities. // If there is a pending workflow task that is not started yet, it'll be rescheduled after // transition start. - StartDeploymentTransition(deployment *deploymentpb.Deployment) error + StartDeploymentTransition(deployment *deploymentpb.Deployment, revisionNumber int64) error + GetVersioningRevisionNumber() int64 + SetVersioningRevisionNumber(revisionNumber int64) AddReapplyCandidateEvent(event *historypb.HistoryEvent) GetReapplyCandidateEvents() []*historypb.HistoryEvent diff --git a/service/history/interfaces/mutable_state_mock.go b/service/history/interfaces/mutable_state_mock.go index 56bc4476544..383ff9c172e 100644 --- a/service/history/interfaces/mutable_state_mock.go +++ b/service/history/interfaces/mutable_state_mock.go @@ -2572,6 +2572,20 @@ func (mr *MockMutableStateMockRecorder) GetUserTimerInfoByEventID(arg0 any) *gom return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUserTimerInfoByEventID", reflect.TypeOf((*MockMutableState)(nil).GetUserTimerInfoByEventID), arg0) } +// GetVersioningRevisionNumber mocks base method. +func (m *MockMutableState) GetVersioningRevisionNumber() int64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetVersioningRevisionNumber") + ret0, _ := ret[0].(int64) + return ret0 +} + +// GetVersioningRevisionNumber indicates an expected call of GetVersioningRevisionNumber. +func (mr *MockMutableStateMockRecorder) GetVersioningRevisionNumber() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetVersioningRevisionNumber", reflect.TypeOf((*MockMutableState)(nil).GetVersioningRevisionNumber)) +} + // GetWorkflowCloseTime mocks base method. func (m *MockMutableState) GetWorkflowCloseTime(ctx context.Context) (time.Time, error) { m.ctrl.T.Helper() @@ -3274,6 +3288,18 @@ func (mr *MockMutableStateMockRecorder) SetUpdateCondition(arg0, arg1 any) *gomo return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetUpdateCondition", reflect.TypeOf((*MockMutableState)(nil).SetUpdateCondition), arg0, arg1) } +// SetVersioningRevisionNumber mocks base method. +func (m *MockMutableState) SetVersioningRevisionNumber(revisionNumber int64) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "SetVersioningRevisionNumber", revisionNumber) +} + +// SetVersioningRevisionNumber indicates an expected call of SetVersioningRevisionNumber. +func (mr *MockMutableStateMockRecorder) SetVersioningRevisionNumber(revisionNumber any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetVersioningRevisionNumber", reflect.TypeOf((*MockMutableState)(nil).SetVersioningRevisionNumber), revisionNumber) +} + // SetWorkflowTaskScheduleToStartTimeoutTask mocks base method. func (m *MockMutableState) SetWorkflowTaskScheduleToStartTimeoutTask(task *tasks.WorkflowTaskTimeoutTask) { m.ctrl.T.Helper() @@ -3313,17 +3339,17 @@ func (mr *MockMutableStateMockRecorder) ShouldResetActivityTimerTaskMask(current } // StartDeploymentTransition mocks base method. -func (m *MockMutableState) StartDeploymentTransition(arg0 *deployment.Deployment) error { +func (m *MockMutableState) StartDeploymentTransition(arg0 *deployment.Deployment, revisionNumber int64) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "StartDeploymentTransition", arg0) + ret := m.ctrl.Call(m, "StartDeploymentTransition", arg0, revisionNumber) ret0, _ := ret[0].(error) return ret0 } // StartDeploymentTransition indicates an expected call of StartDeploymentTransition. -func (mr *MockMutableStateMockRecorder) StartDeploymentTransition(arg0 any) *gomock.Call { +func (mr *MockMutableStateMockRecorder) StartDeploymentTransition(arg0, revisionNumber any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartDeploymentTransition", reflect.TypeOf((*MockMutableState)(nil).StartDeploymentTransition), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartDeploymentTransition", reflect.TypeOf((*MockMutableState)(nil).StartDeploymentTransition), arg0, revisionNumber) } // StartTransaction mocks base method. diff --git a/service/history/worker_versioning_util.go b/service/history/worker_versioning_util.go index 3b43ed80184..2f80b64b0f5 100644 --- a/service/history/worker_versioning_util.go +++ b/service/history/worker_versioning_util.go @@ -205,6 +205,7 @@ func MakeDirectiveForWorkflowTask(ms historyi.MutableState) *taskqueuespb.TaskVe ms.HasCompletedAnyWorkflowTask(), ms.GetEffectiveVersioningBehavior(), ms.GetEffectiveDeployment(), + ms.GetVersioningRevisionNumber(), ) } @@ -213,6 +214,7 @@ func MakeDirectiveForActivityTask(mutableState historyi.MutableState, activityIn d := mutableState.GetEffectiveDeployment() return &taskqueuespb.TaskVersionDirective{Behavior: behavior, DeploymentVersion: worker_versioning.DeploymentVersionFromDeployment(d), + RevisionNumber: mutableState.GetVersioningRevisionNumber(), } } if !activityInfo.UseCompatibleVersion && activityInfo.GetUseWorkflowBuildIdInfo() == nil { diff --git a/service/history/workflow/mutable_state_impl.go b/service/history/workflow/mutable_state_impl.go index 849c0513bca..09ed7cfbcbe 100644 --- a/service/history/workflow/mutable_state_impl.go +++ b/service/history/workflow/mutable_state_impl.go @@ -8345,7 +8345,7 @@ func (ms *MutableStateImpl) GetEffectiveVersioningBehavior() enumspb.VersioningB // If there is a pending workflow task that is not started yet, it'll be rescheduled after // transition start. // This method must be called with a version different from the effective version. -func (ms *MutableStateImpl) StartDeploymentTransition(deployment *deploymentpb.Deployment) error { +func (ms *MutableStateImpl) StartDeploymentTransition(deployment *deploymentpb.Deployment, revisionNumber int64) error { wfBehavior := ms.GetEffectiveVersioningBehavior() if wfBehavior == enumspb.VERSIONING_BEHAVIOR_PINNED { // WF is pinned so we reject the transition. @@ -8393,9 +8393,19 @@ func (ms *MutableStateImpl) StartDeploymentTransition(deployment *deploymentpb.D ), ).Record(1) + ms.SetVersioningRevisionNumber(revisionNumber) + return nil } +func (ms *MutableStateImpl) GetVersioningRevisionNumber() int64 { + return ms.GetExecutionInfo().GetVersioningInfo().GetRevisionNumber() +} + +func (ms *MutableStateImpl) SetVersioningRevisionNumber(revisionNumber int64) { + ms.GetExecutionInfo().GetVersioningInfo().RevisionNumber = revisionNumber +} + // reschedulePendingActivities reschedules all the activities that are not started, so they are // scheduled against the right queue in matching. func (ms *MutableStateImpl) reschedulePendingActivities() error { diff --git a/service/history/workflow/mutable_state_impl_test.go b/service/history/workflow/mutable_state_impl_test.go index 64cb3b7fd6b..2c731b52e89 100644 --- a/service/history/workflow/mutable_state_impl_test.go +++ b/service/history/workflow/mutable_state_impl_test.go @@ -919,7 +919,7 @@ func (s *mutableStateSuite) createMutableStateWithVersioningBehavior( s.NoError(err) s.verifyEffectiveDeployment(nil, enumspb.VERSIONING_BEHAVIOR_UNSPECIFIED) - err = s.mutableState.StartDeploymentTransition(deployment) + err = s.mutableState.StartDeploymentTransition(deployment, 0) s.NoError(err) s.verifyEffectiveDeployment(deployment, enumspb.VERSIONING_BEHAVIOR_AUTO_UPGRADE) @@ -969,7 +969,7 @@ func (s *mutableStateSuite) TestUnpinnedTransition() { s.NoError(err) s.verifyEffectiveDeployment(deployment1, behavior) - err = s.mutableState.StartDeploymentTransition(deployment2) + err = s.mutableState.StartDeploymentTransition(deployment2, 0) s.NoError(err) s.verifyEffectiveDeployment(deployment2, behavior) @@ -1008,7 +1008,7 @@ func (s *mutableStateSuite) TestUnpinnedTransitionFailed() { s.NoError(err) s.verifyEffectiveDeployment(deployment1, behavior) - err = s.mutableState.StartDeploymentTransition(deployment2) + err = s.mutableState.StartDeploymentTransition(deployment2, 0) s.NoError(err) s.verifyEffectiveDeployment(deployment2, behavior) @@ -1050,7 +1050,7 @@ func (s *mutableStateSuite) TestUnpinnedTransitionTimeout() { s.NoError(err) s.verifyEffectiveDeployment(deployment1, behavior) - err = s.mutableState.StartDeploymentTransition(deployment2) + err = s.mutableState.StartDeploymentTransition(deployment2, 0) s.NoError(err) s.verifyEffectiveDeployment(deployment2, behavior) @@ -1201,7 +1201,7 @@ func (s *mutableStateSuite) TestOverride_RedirectFails() { s.verifyOverrides(baseBehavior, overrideBehavior, deployment1, deployment3) // assert that transition fails - err = s.mutableState.StartDeploymentTransition(deployment2) + err = s.mutableState.StartDeploymentTransition(deployment2, 0) s.ErrorIs(err, ErrPinnedWorkflowCannotTransition) s.verifyEffectiveDeployment(deployment3, overrideBehavior) s.verifyOverrides(baseBehavior, overrideBehavior, deployment1, deployment3) @@ -1226,7 +1226,7 @@ func (s *mutableStateSuite) TestOverride_BaseDeploymentUpdatedOnCompletion() { s.verifyOverrides(baseBehavior, overrideBehavior, deployment1, deployment3) // assert that redirect fails - should be its own test - err = s.mutableState.StartDeploymentTransition(deployment2) + err = s.mutableState.StartDeploymentTransition(deployment2, 0) s.ErrorIs(err, ErrPinnedWorkflowCannotTransition) s.verifyEffectiveDeployment(deployment3, overrideBehavior) s.verifyOverrides(baseBehavior, overrideBehavior, deployment1, deployment3) // base deployment still deployment1 here -- good diff --git a/service/matching/config.go b/service/matching/config.go index d245220654a..4555ad72d57 100644 --- a/service/matching/config.go +++ b/service/matching/config.go @@ -37,6 +37,7 @@ type ( HistoryMaxPageSize dynamicconfig.IntPropertyFnWithNamespaceFilter EnableDeployments dynamicconfig.BoolPropertyFnWithNamespaceFilter // [cleanup-wv-pre-release] EnableDeploymentVersions dynamicconfig.BoolPropertyFnWithNamespaceFilter + UseRevisionNumberForWorkerVersioning dynamicconfig.BoolPropertyFnWithNamespaceFilter MaxTaskQueuesInDeployment dynamicconfig.IntPropertyFnWithNamespaceFilter MaxIDLengthLimit dynamicconfig.IntPropertyFn @@ -249,6 +250,7 @@ func NewConfig( HistoryMaxPageSize: dynamicconfig.MatchingHistoryMaxPageSize.Get(dc), EnableDeployments: dynamicconfig.EnableDeployments.Get(dc), // [cleanup-wv-pre-release] EnableDeploymentVersions: dynamicconfig.EnableDeploymentVersions.Get(dc), + UseRevisionNumberForWorkerVersioning: dynamicconfig.UseRevisionNumberForWorkerVersioning.Get(dc), MaxTaskQueuesInDeployment: dynamicconfig.MatchingMaxTaskQueuesInDeployment.Get(dc), RPS: dynamicconfig.MatchingRPS.Get(dc), OperatorRPSRatio: dynamicconfig.OperatorRPSRatio.Get(dc), diff --git a/service/matching/forwarder_test.go b/service/matching/forwarder_test.go index e00530eb0f5..04ba4e2fc3a 100644 --- a/service/matching/forwarder_test.go +++ b/service/matching/forwarder_test.go @@ -123,7 +123,7 @@ func (t *ForwarderTestSuite) TestForwardWorkflowTask_WithBuildId() { ).Return(&matchingservice.AddWorkflowTaskResponse{}, nil) taskInfo := randomTaskInfo() - task := newInternalTaskForSyncMatch(taskInfo.Data, nil) + task := newInternalTaskForSyncMatch(taskInfo.Data, nil, 0) t.NoError(t.fwdr.ForwardTask(context.Background(), task)) t.NotNil(request) t.Equal(mustParent(t.partition, 20).RpcName(), request.TaskQueue.GetName()) diff --git a/service/matching/matcher_data_test.go b/service/matching/matcher_data_test.go index 06b76e4cfb8..036f1f34c45 100644 --- a/service/matching/matcher_data_test.go +++ b/service/matching/matcher_data_test.go @@ -91,7 +91,7 @@ func (s *MatcherDataSuite) newSyncTask(fwdInfo *taskqueuespb.TaskForwardInfo) *i t := &persistencespb.TaskInfo{ CreateTime: timestamppb.New(s.now()), } - return newInternalTaskForSyncMatch(t, fwdInfo) + return newInternalTaskForSyncMatch(t, fwdInfo, 0) } func (s *MatcherDataSuite) newQueryTask(id string) *internalTask { @@ -747,7 +747,7 @@ func FuzzMatcherData(f *testing.F) { t := &persistencespb.TaskInfo{ CreateTime: timestamppb.New(ts.Now()), } - md.FinishMatchAfterPollForward(res.poller, newInternalTaskForSyncMatch(t, nil)) + md.FinishMatchAfterPollForward(res.poller, newInternalTaskForSyncMatch(t, nil, 0)) }() case 6: // add task forwarder diff --git a/service/matching/matcher_test.go b/service/matching/matcher_test.go index 5fa15cdd860..5a73e0e3281 100644 --- a/service/matching/matcher_test.go +++ b/service/matching/matcher_test.go @@ -116,7 +116,7 @@ func (t *MatcherTestSuite) TestLocalSyncMatch() { <-pollStarted time.Sleep(10 * time.Millisecond) - task := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil) + task := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil, 0) ctx, cancel := context.WithTimeout(context.Background(), time.Second) syncMatch, err := t.childMatcher.Offer(ctx, task) cancel() @@ -166,12 +166,12 @@ func (t *MatcherTestSuite) testRemoteSyncMatch(taskSource enumsspb.TaskSource) { }, ).Return(&remotePollResp, remotePollErr).AnyTimes() - task := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil) + task := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil, 0) if taskSource == enumsspb.TASK_SOURCE_DB_BACKLOG { task = newInternalTaskForSyncMatch(randomTaskInfo().Data, &taskqueuespb.TaskForwardInfo{ TaskSource: enumsspb.TASK_SOURCE_DB_BACKLOG, SourcePartition: "p123", - }) + }, 0) } ctx, cancel := context.WithTimeout(context.Background(), time.Second) @@ -221,7 +221,7 @@ func (t *MatcherTestSuite) TestRejectSyncMatchWhenBacklog() { }, 30*time.Second, 1*time.Millisecond) // should not allow sync match when there is an old task in backlog - syncMatchTask := newInternalTaskForSyncMatch(randomTaskInfoWithAge(time.Minute).Data, nil) + syncMatchTask := newInternalTaskForSyncMatch(randomTaskInfoWithAge(time.Minute).Data, nil, 0) // Adding forwardInfo to replicate a task being forwarded from the child partition. // This field is required to be non-nil for the matcher to offer this task locally to a poller, which is desired. syncMatchTask.forwardInfo = &taskqueuespb.TaskForwardInfo{ @@ -254,7 +254,7 @@ func (t *MatcherTestSuite) TestRejectSyncMatchWhenBacklog() { } func (t *MatcherTestSuite) TestForwardingWhenBacklogIsYoung() { - historyTask := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil) + historyTask := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil, 0) ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) intruptC := make(chan struct{}) @@ -451,7 +451,7 @@ func (t *MatcherTestSuite) TestBacklogAge() { } func (t *MatcherTestSuite) TestSyncMatchFailure() { - task := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil) + task := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil, 0) ctx, cancel := context.WithTimeout(context.Background(), time.Second) var req *matchingservice.AddWorkflowTaskRequest @@ -701,7 +701,7 @@ func (t *MatcherTestSuite) TestMustOfferLocalMatch() { <-pollStarted time.Sleep(10 * time.Millisecond) - task := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil) + task := newInternalTaskForSyncMatch(randomTaskInfo().Data, nil, 0) ctx, cancel := context.WithTimeout(context.Background(), time.Second) err := t.childMatcher.MustOffer(ctx, task, nil) cancel() @@ -754,7 +754,7 @@ func (t *MatcherTestSuite) TestMustOfferRemoteMatch() { t.client.EXPECT().AddWorkflowTask(gomock.Any(), gomock.Any(), gomock.Any()).Do( func(arg0 context.Context, arg1 *matchingservice.AddWorkflowTaskRequest, arg2 ...interface{}) { req = arg1 - task := newInternalTaskForSyncMatch(task.event.AllocatedTaskInfo.Data, req.ForwardInfo) + task := newInternalTaskForSyncMatch(task.event.AllocatedTaskInfo.Data, req.ForwardInfo, 0) close(pollSigC) remoteSyncMatch, err = t.rootMatcher.Offer(ctx, task) }, diff --git a/service/matching/matching_engine.go b/service/matching/matching_engine.go index 0f5160fc0c1..3820746aeab 100644 --- a/service/matching/matching_engine.go +++ b/service/matching/matching_engine.go @@ -21,6 +21,7 @@ import ( "go.temporal.io/api/serviceerror" taskqueuepb "go.temporal.io/api/taskqueue/v1" "go.temporal.io/api/workflowservice/v1" + deploymentspb "go.temporal.io/server/api/deployment/v1" enumsspb "go.temporal.io/server/api/enums/v1" "go.temporal.io/server/api/historyservice/v1" "go.temporal.io/server/api/matchingservice/v1" @@ -507,7 +508,6 @@ func (e *matchingEngineImpl) updateTaskQueue(partition tqid.Partition, mgr taskQ e.partitions[partition.Key()] = mgr } -// AddWorkflowTask either delivers task directly to waiting poller or saves it into task queue persistence. func (e *matchingEngineImpl) AddWorkflowTask( ctx context.Context, addRequest *matchingservice.AddWorkflowTaskRequest, @@ -1327,12 +1327,25 @@ func (e *matchingEngineImpl) DescribeTaskQueue( return nil, err } typedUserData := userData.GetData().GetPerType()[int32(pm.Partition().TaskType())] + + // Fetch buildIDs from old deploymentData format for _, v := range typedUserData.GetDeploymentData().GetVersions() { if v.GetVersion() == nil || v.GetVersion().GetDeploymentName() == "" || v.GetVersion().GetBuildId() == "" { continue } - buildId := worker_versioning.WorkerDeploymentVersionToStringV32(v.GetVersion()) - buildIds = append(buildIds, buildId) + deploymentVersion := worker_versioning.WorkerDeploymentVersionToStringV32(v.GetVersion()) + buildIds = append(buildIds, deploymentVersion) + } + + // Fetch buildIDs from new deploymentData format + for deploymentName, v := range typedUserData.GetDeploymentData().GetDeploymentsData() { + if v.GetVersions() == nil { + continue + } + for buildID := range v.GetVersions() { + deploymentVersion := worker_versioning.BuildIDToStringV32(deploymentName, buildID) + buildIds = append(buildIds, deploymentVersion) + } } } @@ -1884,10 +1897,12 @@ func (e *matchingEngineImpl) SyncDeploymentUserData( req *matchingservice.SyncDeploymentUserDataRequest, ) (*matchingservice.SyncDeploymentUserDataResponse, error) { taskQueueFamily, err := tqid.NewTaskQueueFamily(req.NamespaceId, req.GetTaskQueue()) + applyUpdatesToRoutingConfig := false + if err != nil { return nil, err } - if req.Deployment == nil && req.GetOperation() == nil { + if req.Deployment == nil && req.GetOperation() == nil && req.GetDeploymentName() == "" { return nil, errMissingDeploymentVersion } @@ -1930,6 +1945,7 @@ func (e *matchingEngineImpl) SyncDeploymentUserData( // set/append the new data deploymentData := data.PerType[int32(t)].DeploymentData + if d := req.Deployment; d != nil { // [cleanup-old-wv] //nolint:staticcheck @@ -1944,16 +1960,23 @@ func (e *matchingEngineImpl) SyncDeploymentUserData( } changed = true } else if vd := req.GetUpdateVersionData(); vd != nil { + // [cleanup-public-preview-versioning] if vd.GetVersion() == nil { // unversioned ramp if deploymentData.GetUnversionedRampData().GetRoutingUpdateTime().AsTime().After(vd.GetRoutingUpdateTime().AsTime()) { continue } + workerDeploymentData := deploymentData.GetDeploymentsData()[req.GetDeploymentName()] changed = true // only update if the timestamp is more recent if vd.GetRampingSinceTime() == nil { // unset deploymentData.UnversionedRampData = nil + + // Also have to unset the ramp, if present, from the new deployment data format. + unsetRampingFromRoutingConfig(workerDeploymentData) + } else { // set or update deploymentData.UnversionedRampData = vd + } } else if idx := worker_versioning.FindDeploymentVersion(deploymentData, vd.GetVersion()); idx >= 0 { old := deploymentData.Versions[idx] @@ -1963,14 +1986,119 @@ func (e *matchingEngineImpl) SyncDeploymentUserData( changed = true // only update if the timestamp is more recent deploymentData.Versions[idx] = vd + + // Go through the new deployment data format for this deployment. + workerDeploymentData := deploymentData.GetDeploymentsData()[vd.GetVersion().GetDeploymentName()] + clearVersionFromRoutingConfig(workerDeploymentData, old, vd) + } else { changed = true deploymentData.Versions = append(deploymentData.Versions, vd) + + // Go through the new deployment data format for this deployment. + workerDeploymentData := deploymentData.GetDeploymentsData()[vd.GetVersion().GetDeploymentName()] + clearVersionFromRoutingConfig(workerDeploymentData, nil, vd) } } else if v := req.GetForgetVersion(); v != nil { if idx := worker_versioning.FindDeploymentVersion(deploymentData, v); idx >= 0 { changed = true deploymentData.Versions = append(deploymentData.Versions[:idx], deploymentData.Versions[idx+1:]...) + + // Go through the new deployment data format for this deployment and remove the version if present. + workerDeploymentData := deploymentData.GetDeploymentsData()[v.GetDeploymentName()] + _ = removeDeploymentVersions( + deploymentData, + v.GetDeploymentName(), + workerDeploymentData, + []string{v.GetBuildId()}, + /* removeOldFormat */ false, + ) + } + } else { + + // Only initialize DeploymentsData if we're using the new format + if deploymentData.GetDeploymentsData() == nil { + deploymentData.DeploymentsData = make(map[string]*persistencespb.WorkerDeploymentData) + } + if deploymentData.GetDeploymentsData()[req.GetDeploymentName()] == nil { + deploymentData.GetDeploymentsData()[req.GetDeploymentName()] = &persistencespb.WorkerDeploymentData{} + } + + rc := req.GetUpdateRoutingConfig() + tqWorkerDeploymentData := deploymentData.GetDeploymentsData()[req.GetDeploymentName()] + + if rc.GetRevisionNumber() > tqWorkerDeploymentData.GetRoutingConfig().GetRevisionNumber() { + changed = true + // Update routing config when newer or equal revision is provided + tqWorkerDeploymentData.RoutingConfig = rc + applyUpdatesToRoutingConfig = true + } + + if tqWorkerDeploymentData.Versions == nil { + tqWorkerDeploymentData.Versions = make(map[string]*deploymentspb.WorkerDeploymentVersionData) + } + for buildID, versionData := range req.GetUpsertVersionsData() { + tqWorkerDeploymentData.Versions[buildID] = versionData + changed = true + } + + if removed := removeDeploymentVersions( + deploymentData, + req.GetDeploymentName(), + tqWorkerDeploymentData, + req.GetForgetVersions(), + /* removeOldFormat */ true, + ); removed { + changed = true + } + + /* Remove all the versions from the old deployment if present. This shall prevent the following scenario: + + Assume all of this is in the same deployment "foo": + + t0: Current version is A with old deployment format. + t1: Current version is B with new deployment format. + t2: User unsets current version B. + + The right behaviour is that after unsetting, the current version should be unversioned and not version A. + + However, if the following were present the behaviour would be different: + + Assume all of this is are in different deployments "foo" and "bar": + + t0: Current version is foo.A with old deployment format. + t1: Current version is bar.B with new deployment format. + t2: User unsets current version bar.B. + + The right behaviour is that after unsetting, the current version should be foo.A and not unversioned as the task-queue + still belongs to a versioned deployment. + + So, the idea is that if there are updates to the routing config of a worker-deployment, remove versions present in the + old deployment data format under the same deployment. + */ + + if applyUpdatesToRoutingConfig { + //nolint:staticcheck // SA1019 deprecated versions will clean up later + oldVersions := deploymentData.GetVersions() + dst := make([]*deploymentspb.DeploymentVersionData, 0, len(oldVersions)) + for _, dv := range oldVersions { + if dv.GetVersion().GetDeploymentName() == req.GetDeploymentName() { + + // Move membership from old format into the per-deployment new-format map. + buildID := dv.GetVersion().GetBuildId() + //nolint:revive // max-control-nesting: control flow nesting exceeds 5 + if _, exists := tqWorkerDeploymentData.Versions[buildID]; !exists { + tqWorkerDeploymentData.Versions[buildID] = &deploymentspb.WorkerDeploymentVersionData{ + Status: dv.GetStatus(), + } + } + // Do not keep this entry in old-format slice (we're migrating it). + continue + } + dst = append(dst, dv) + } + //nolint:staticcheck // SA1019 deprecated versions will clean up later + deploymentData.Versions = dst } } } @@ -1984,7 +2112,7 @@ func (e *matchingEngineImpl) SyncDeploymentUserData( if err != nil { return nil, err } - return &matchingservice.SyncDeploymentUserDataResponse{Version: version}, nil + return &matchingservice.SyncDeploymentUserDataResponse{Version: version, RoutingConfigChanged: applyUpdatesToRoutingConfig}, nil } func (e *matchingEngineImpl) ApplyTaskQueueUserDataReplicationEvent( @@ -2867,9 +2995,10 @@ func (e *matchingEngineImpl) recordWorkflowTaskStarted( PollRequest: pollReq, BuildIdRedirectInfo: task.redirectInfo, // TODO: stop sending ScheduledDeployment. [cleanup-old-wv] - ScheduledDeployment: worker_versioning.DirectiveDeployment(task.event.Data.VersionDirective), - VersionDirective: task.event.Data.VersionDirective, - Stamp: task.event.Data.GetStamp(), + ScheduledDeployment: worker_versioning.DirectiveDeployment(task.event.Data.VersionDirective), + VersionDirective: task.event.Data.VersionDirective, + TaskDispatchRevisionNumber: task.taskDispatchRevisionNumber, + Stamp: task.event.Data.GetStamp(), } resp, err := e.historyClient.RecordWorkflowTaskStarted(ctx, recordStartedRequest) @@ -2926,8 +3055,9 @@ func (e *matchingEngineImpl) recordActivityTaskStarted( BuildIdRedirectInfo: task.redirectInfo, Stamp: task.event.Data.GetStamp(), // TODO: stop sending ScheduledDeployment. [cleanup-old-wv] - ScheduledDeployment: worker_versioning.DirectiveDeployment(task.event.Data.VersionDirective), - VersionDirective: task.event.Data.VersionDirective, + ScheduledDeployment: worker_versioning.DirectiveDeployment(task.event.Data.VersionDirective), + VersionDirective: task.event.Data.VersionDirective, + TaskDispatchRevisionNumber: task.taskDispatchRevisionNumber, } return e.historyClient.RecordActivityTaskStarted(ctx, recordStartedRequest) @@ -3097,3 +3227,92 @@ func (e *matchingEngineImpl) UpdateTaskQueueConfig( UpdatedTaskqueueConfig: userData.GetData().GetPerType()[int32(taskQueueType)].GetConfig(), }, nil } + +// removeDeploymentVersions removes provided build IDs from the new-format per-deployment map and, +// when requested, the corresponding entries from the deprecated old-format slice for the same deployment. +// It returns true if any change was made (either format). +// +//nolint:staticcheck // SA1019 deprecated versions will clean up later +func removeDeploymentVersions( + deploymentData *persistencespb.DeploymentData, + deploymentName string, + workerDeploymentData *persistencespb.WorkerDeploymentData, + buildIDs []string, + removeOldFormat bool, +) bool { + if workerDeploymentData == nil { + return false + } + changed := false + deletedInNew := false + + for _, buildID := range buildIDs { + if _, exists := workerDeploymentData.Versions[buildID]; exists { + delete(workerDeploymentData.Versions, buildID) + deletedInNew = true + changed = true + } + if removeOldFormat { + // Remove the version from the old deployment data format if present. + for idx, oldVersions := range deploymentData.GetVersions() { + if oldVersions.GetVersion().GetDeploymentName() == deploymentName && + oldVersions.GetVersion().GetBuildId() == buildID { + //nolint:staticcheck // SA1019 deprecated versions will clean up later + deploymentData.Versions = append(deploymentData.Versions[:idx], deploymentData.Versions[idx+1:]...) + changed = true + break + } + } + } + } + + // Only remove the deployment entry if versions were actually deleted from the new-format map. + if deletedInNew && len(workerDeploymentData.Versions) == 0 { + delete(deploymentData.GetDeploymentsData(), deploymentName) + } + return changed +} + +// clearVersionFromRoutingConfig clears current/ramping fields in new-format routing config +// when an old-format DeploymentVersionData's roles change. +func clearVersionFromRoutingConfig( + workerDeploymentData *persistencespb.WorkerDeploymentData, + oldVd *deploymentspb.DeploymentVersionData, + newVd *deploymentspb.DeploymentVersionData, +) { + if workerDeploymentData == nil || workerDeploymentData.RoutingConfig == nil || newVd == nil { + return + } + rc := workerDeploymentData.GetRoutingConfig() + + if newVd.GetRampingSinceTime() != nil { + // Ramping version is cleared from the RoutingConfig. Note: When the ramping version is being set to unversioned, + // the code takes a different path. See SyncDeploymentUserData for more details. + rc.RampingDeploymentVersion = nil + rc.RampingVersionPercentage = 0 + rc.RampingVersionPercentageChangedTime = nil + rc.RampingVersionChangedTime = nil + } + + // Check if current role changed. If it did, clear current from RC. + oldCurrent := oldVd.GetCurrentSinceTime() != nil + newCurrent := newVd.GetCurrentSinceTime() != nil + if oldCurrent != newCurrent || newCurrent { + rc.CurrentDeploymentVersion = nil + rc.CurrentVersionChangedTime = nil + } +} + +func unsetRampingFromRoutingConfig( + workerDeploymentData *persistencespb.WorkerDeploymentData, +) { + if workerDeploymentData == nil || workerDeploymentData.RoutingConfig == nil { + return + } + + rc := workerDeploymentData.GetRoutingConfig() + rc.RampingDeploymentVersion = nil + rc.RampingVersionPercentage = 0 + rc.RampingVersionPercentageChangedTime = nil + rc.RampingVersionChangedTime = nil +} diff --git a/service/matching/matching_engine_test.go b/service/matching/matching_engine_test.go index ce19ff2c485..b0727166758 100644 --- a/service/matching/matching_engine_test.go +++ b/service/matching/matching_engine_test.go @@ -62,6 +62,7 @@ import ( "go.temporal.io/server/common/tasktoken" "go.temporal.io/server/common/testing/protoassert" "go.temporal.io/server/common/testing/testlogger" + "go.temporal.io/server/common/testing/testvars" "go.temporal.io/server/common/tqid" "go.temporal.io/server/common/worker_versioning" "go.temporal.io/server/components/nexusoperations" @@ -3646,6 +3647,503 @@ func (s *matchingEngineSuite) TestDispatchNexusTask_ValidateTimeoutBuffer() { } } +// Following are tests for SyncDeploymentUserData API when it uses the new deployment data format. + +// TestSyncDeploymentUserData_NewDeploymentDataRemovesOldVersions verifies that when a new routing config is set for a deployment using the latest deployment data format, +// versions, under the same deployment, that had synced using the old deployment data format are removed. +func (s *matchingEngineSuite) TestSyncDeploymentUserData_NewDeploymentDataRemovesOldVersions() { + tv := testvars.New(s.T()) + namespaceID := tv.NamespaceID().String() + tq := tv.TaskQueue().GetName() + + // Seed user data with old-format versions across two deployments: foo.A and bar.B + t1 := timestamp.TimePtr(time.Now().Add(-time.Hour)) + userData := &persistencespb.VersionedTaskQueueUserData{ + Version: 1, + Data: &persistencespb.TaskQueueUserData{ + PerType: map[int32]*persistencespb.TaskQueueTypeUserData{ + int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW): { + DeploymentData: &persistencespb.DeploymentData{ + Versions: []*deploymentspb.DeploymentVersionData{ + {Version: &deploymentspb.WorkerDeploymentVersion{DeploymentName: "foo", BuildId: "A"}, RoutingUpdateTime: t1, CurrentSinceTime: t1}, + {Version: &deploymentspb.WorkerDeploymentVersion{DeploymentName: "bar", BuildId: "B"}, RoutingUpdateTime: t1, CurrentSinceTime: t1}, + }, + }, + }, + }, + }, + } + + // Using the lower level UpdateTaskQueueUserData to set the user data for multiple versions at once. + s.NoError(s.classicTaskManager.UpdateTaskQueueUserData(context.Background(), &persistence.UpdateTaskQueueUserDataRequest{ + NamespaceID: namespaceID, + Updates: map[string]*persistence.SingleTaskQueueUserDataUpdate{ + tq: {UserData: userData}, + }, + })) + userData.Version++ + + // Sync new-format routing config for deployment "foo" with a newer revision to trigger cleanup + rc := &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{DeploymentName: "foo", BuildId: "C"}, + CurrentVersionChangedTime: timestamppb.Now(), + RevisionNumber: 1, + } + _, err := s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: "foo", + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW, enumspb.TASK_QUEUE_TYPE_ACTIVITY}, + UpdateRoutingConfig: rc, + }) + s.NoError(err) + + // Fetch and verify that old-format versions under the same deployment (foo) are removed, others remain + res, err := s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + //nolint:staticcheck // SA1019 deprecated versions will clean up later + got := res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData().GetVersions() + s.Require().Len(got, 1) + s.Equal("bar", got[0].GetVersion().GetDeploymentName()) + s.Equal("B", got[0].GetVersion().GetBuildId()) +} + +func (s *matchingEngineSuite) TestSyncDeploymentUserData_RoutingConfigRevisionGating() { + tv := testvars.New(s.T()) + namespaceID := tv.NamespaceID().String() + tq := tv.TaskQueue().GetName() + + rc1 := &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{DeploymentName: "foo", BuildId: "rev1"}, + RevisionNumber: 1, + CurrentVersionChangedTime: timestamppb.Now(), + } + resp, err := s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: "foo", + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpdateRoutingConfig: rc1, + }) + s.NoError(err) + s.True(resp.GetRoutingConfigChanged()) + + // Attempt to sync lower revision (0) — should be ignored + rc0 := &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{DeploymentName: "foo", BuildId: "rev0"}, + RevisionNumber: 0, + CurrentVersionChangedTime: timestamppb.Now(), + } + resp, err = s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: "foo", + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpdateRoutingConfig: rc0, + }) + s.NoError(err) + s.False(resp.GetRoutingConfigChanged()) + + // Verify still rev 1 + res, err := s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + gotRC := res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData().GetDeploymentsData()["foo"].GetRoutingConfig() + s.Equal(int64(1), gotRC.GetRevisionNumber()) + s.Equal("rev1", gotRC.GetCurrentDeploymentVersion().GetBuildId()) + + // Now sync higher revision (2) — should be applied + rc2 := &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{DeploymentName: "foo", BuildId: "rev2"}, + RevisionNumber: 2, + CurrentVersionChangedTime: timestamppb.Now(), + } + resp, err = s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: "foo", + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpdateRoutingConfig: rc2, + }) + s.NoError(err) + s.True(resp.GetRoutingConfigChanged()) + + res, err = s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + gotRC = res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData().GetDeploymentsData()["foo"].GetRoutingConfig() + s.Equal(int64(2), gotRC.GetRevisionNumber()) + s.Equal("rev2", gotRC.GetCurrentDeploymentVersion().GetBuildId()) +} + +func (s *matchingEngineSuite) TestSyncDeploymentUserData_UpsertAndForgetVersions_WithoutRoutingConfig() { + tv := testvars.New(s.T()) + namespaceID := tv.NamespaceID().String() + tq := tv.TaskQueue().GetName() + deploymentName := "foo" + + // Upsert versions without providing RoutingConfig + upserts1 := map[string]*deploymentspb.WorkerDeploymentVersionData{ + "b1": {}, + "b2": {}, + } + resp, err := s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpsertVersionsData: upserts1, + // No UpdateRoutingConfig provided + }) + s.NoError(err) + s.False(resp.GetRoutingConfigChanged()) + + // Verify both b1 and b2 exist + res, err := s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + versions := res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData().GetDeploymentsData()[deploymentName].GetVersions() + s.Contains(versions, "b1") + s.Contains(versions, "b2") + s.Len(versions, 2) + + // Forget b1 and upsert b3, still without RoutingConfig + upserts2 := map[string]*deploymentspb.WorkerDeploymentVersionData{ + "b3": {}, + } + resp, err = s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpsertVersionsData: upserts2, + ForgetVersions: []string{"b1"}, + // No UpdateRoutingConfig provided + }) + s.NoError(err) + s.False(resp.GetRoutingConfigChanged()) + + // Verify b1 removed, b2 remains, b3 added + res, err = s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + versions = res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData().GetDeploymentsData()[deploymentName].GetVersions() + s.NotContains(versions, "b1") + s.Contains(versions, "b2") + s.Contains(versions, "b3") + s.Len(versions, 2) +} + +//nolint:staticcheck // SA1019 deprecated versions will clean up later +func (s *matchingEngineSuite) TestSyncDeploymentUserData_UnsetOldFormatRamp_ClearsNewFormatRamp() { + tv := testvars.New(s.T()) + namespaceID := tv.NamespaceID().String() + tq := tv.TaskQueue().GetName() + deploymentName := "foo" + + // New-format ramp for deployment "foo" + rc := &deploymentpb.RoutingConfig{ + RampingDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{DeploymentName: deploymentName, BuildId: "b1"}, + RampingVersionPercentage: 25, + RampingVersionPercentageChangedTime: timestamppb.Now(), + RevisionNumber: 1, + } + resp, err := s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpdateRoutingConfig: rc, + UpsertVersionsData: map[string]*deploymentspb.WorkerDeploymentVersionData{ + "b1": { + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_RAMPING, + }, + }, + }) + s.NoError(err) + s.True(resp.GetRoutingConfigChanged()) + + // Verify ramp present in new-format data + res, err := s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + rcGot := res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData().GetDeploymentsData()[deploymentName].GetRoutingConfig() + s.NotNil(rcGot.GetRampingDeploymentVersion()) + s.Equal("b1", rcGot.GetRampingDeploymentVersion().GetBuildId()) + s.InDelta(float32(25), rcGot.GetRampingVersionPercentage(), 0.0000) + + // Now unset ramp via old-format unversioned ramp (Version=nil, RampingSinceTime=nil) + unsetVD := &deploymentspb.DeploymentVersionData{ + // Version: nil (unversioned) + // RampingSinceTime: nil indicates unset + } + resp, err = s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + Operation: &matchingservice.SyncDeploymentUserDataRequest_UpdateVersionData{ + UpdateVersionData: unsetVD, + }, + }) + s.NoError(err) + + // Verify unversioned ramp cleared and new-format ramp cleared + res, err = s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + depData := res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData() + // old-format unversioned ramp should be nil + s.Nil(depData.GetUnversionedRampData()) + // new-format ramp entries should be cleared + rcGot = depData.GetDeploymentsData()[deploymentName].GetRoutingConfig() + s.Nil(rcGot.GetRampingDeploymentVersion()) + s.InDelta(float32(0), rcGot.GetRampingVersionPercentage(), 0.0000) + s.Nil(rcGot.GetRampingVersionPercentageChangedTime()) + s.Nil(rcGot.GetRampingVersionChangedTime()) +} + +//nolint:staticcheck // SA1019 deprecated versions will clean up later +func (s *matchingEngineSuite) TestSyncDeploymentUserData_OldFormatSetSameCurrent_ClearsNewFormatCurrent() { + tv := testvars.New(s.T()) + namespaceID := tv.NamespaceID().String() + tq := tv.TaskQueue().GetName() + deploymentName := "foo" + + // set current=v1 + rc := &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{DeploymentName: deploymentName, BuildId: "v1"}, + CurrentVersionChangedTime: timestamppb.Now(), + RevisionNumber: 1, + } + resp, err := s.matchingEngine.SyncDeploymentUserData( + context.Background(), + &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpdateRoutingConfig: rc, + }, + ) + s.NoError(err) + s.True(resp.GetRoutingConfigChanged()) + + // Verify current=v1 present in new-format + res, err := s.matchingEngine.GetTaskQueueUserData( + context.Background(), + &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }, + ) + s.NoError(err) + rcGot := res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)]. + GetDeploymentData().GetDeploymentsData()[deploymentName].GetRoutingConfig() + s.Equal("v1", rcGot.GetCurrentDeploymentVersion().GetBuildId()) + + // Old-format: set SAME version (v1) as current -> should clear new-format current + vdCurrent := &deploymentspb.DeploymentVersionData{ + Version: &deploymentspb.WorkerDeploymentVersion{DeploymentName: deploymentName, BuildId: "v1"}, + CurrentSinceTime: timestamppb.Now(), + RoutingUpdateTime: timestamppb.Now(), + } + _, err = s.matchingEngine.SyncDeploymentUserData( + context.Background(), + &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + Operation: &matchingservice.SyncDeploymentUserDataRequest_UpdateVersionData{ + UpdateVersionData: vdCurrent, + }, + }, + ) + s.NoError(err) + + // Verify new-format current cleared + res, err = s.matchingEngine.GetTaskQueueUserData( + context.Background(), + &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }, + ) + s.NoError(err) + rcGot = res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)]. + GetDeploymentData().GetDeploymentsData()[deploymentName].GetRoutingConfig() + s.Nil(rcGot.GetCurrentDeploymentVersion()) +} + +//nolint:staticcheck // SA1019 deprecated versions will clean up later +func (s *matchingEngineSuite) TestSyncDeploymentUserData_ForgetNewFormat_RemovesOldFormatMembership() { + tv := testvars.New(s.T()) + namespaceID := tv.NamespaceID().String() + tq := tv.TaskQueue().GetName() + deploymentName := "foo" + buildID := "b1" + + // Upsert b1 using the old format + _, err := s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + Operation: &matchingservice.SyncDeploymentUserDataRequest_UpdateVersionData{ + UpdateVersionData: &deploymentspb.DeploymentVersionData{ + Version: &deploymentspb.WorkerDeploymentVersion{DeploymentName: deploymentName, BuildId: buildID}, + RoutingUpdateTime: timestamppb.Now(), + }, + }, + }) + s.NoError(err) + + // Upsert b1 using the new format + _, err = s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpsertVersionsData: map[string]*deploymentspb.WorkerDeploymentVersionData{ + buildID: {}, + }, + }) + s.NoError(err) + + // Forget via new-format + _, err = s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + ForgetVersions: []string{buildID}, + UpdateRoutingConfig: nil, + }) + s.NoError(err) + + // Verify removal from both formats + res, err := s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + depData := res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData() + // new-format membership + _, exists := depData.GetDeploymentsData()[deploymentName].GetVersions()[buildID] + s.False(exists) + // old-format slice + for _, dv := range depData.GetVersions() { + s.NotEqual(buildID, dv.GetVersion().GetBuildId()) + } + // and the deployment entry should be removed from DeploymentsData as versions map is now empty + _, deploymentExists := depData.GetDeploymentsData()[deploymentName] + s.False(deploymentExists) +} + +//nolint:staticcheck // SA1019 deprecated versions will clean up later +func (s *matchingEngineSuite) TestSyncDeploymentUserData_ForgetOldFormat_RemovesNewFormatMembership() { + tv := testvars.New(s.T()) + namespaceID := tv.NamespaceID().String() + tq := tv.TaskQueue().GetName() + deploymentName := "foo" + buildID := "b1" + + // Upsert b1 using the old format + _, err := s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + Operation: &matchingservice.SyncDeploymentUserDataRequest_UpdateVersionData{ + UpdateVersionData: &deploymentspb.DeploymentVersionData{ + Version: &deploymentspb.WorkerDeploymentVersion{DeploymentName: deploymentName, BuildId: buildID}, + RoutingUpdateTime: timestamppb.Now(), + }, + }, + }) + s.NoError(err) + + // Upsert b1 using the new format (membership map) + _, err = s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpsertVersionsData: map[string]*deploymentspb.WorkerDeploymentVersionData{ + buildID: {}, + }, + }) + s.NoError(err) + + // Forget via old-format + _, err = s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: deploymentName, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + Operation: &matchingservice.SyncDeploymentUserDataRequest_ForgetVersion{ + ForgetVersion: &deploymentspb.WorkerDeploymentVersion{DeploymentName: deploymentName, BuildId: buildID}, + }, + }) + s.NoError(err) + + // Verify removal from both formats + res, err := s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + depData := res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData() + // new-format membership map + _, exists := depData.GetDeploymentsData()[deploymentName].GetVersions()[buildID] + s.False(exists) + // old-format slice + for _, dv := range depData.GetVersions() { + s.NotEqual(buildID, dv.GetVersion().GetBuildId()) + } + // the deployment entry should be removed from DeploymentsData as versions map is now empty + _, deploymentExists := depData.GetDeploymentsData()[deploymentName] + s.False(deploymentExists) +} + func (s *matchingEngineSuite) setupRecordActivityTaskStartedMock(tlName string) { activityTypeName := "activity1" activityID := "activityId1" @@ -3675,7 +4173,6 @@ func (s *matchingEngineSuite) setupRecordActivityTaskStartedMock(tlName string) }, nil }).AnyTimes() } - func newActivityTaskScheduledEvent(eventID int64, workflowTaskCompletedEventID int64, scheduleAttributes *commandpb.ScheduleActivityTaskCommandAttributes, ) *historypb.HistoryEvent { @@ -3695,6 +4192,81 @@ func newActivityTaskScheduledEvent(eventID int64, workflowTaskCompletedEventID i return historyEvent } +func (s *matchingEngineSuite) TestSyncDeploymentUserData_UpdateRoutingConfig_MigratesOldVersionsToNewFormat() { + tv := testvars.New(s.T()) + namespaceID := tv.NamespaceID().String() + tq := tv.TaskQueue().GetName() + depFoo := "foo" + depBar := "bar" + + // Add old-format versions: foo:A, foo:B, bar:C + addOldFormatVersion := func(dep, build string) { + _, err := s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: dep, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + Operation: &matchingservice.SyncDeploymentUserDataRequest_UpdateVersionData{ + UpdateVersionData: &deploymentspb.DeploymentVersionData{ + Version: &deploymentspb.WorkerDeploymentVersion{DeploymentName: dep, BuildId: build}, + RoutingUpdateTime: timestamppb.Now(), + }, + }, + }) + s.NoError(err) + } + addOldFormatVersion(depFoo, "A") + addOldFormatVersion(depFoo, "B") + addOldFormatVersion(depBar, "C") + + // Apply new-format routing config for foo with higher revision to trigger migration + rc := &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: &deploymentpb.WorkerDeploymentVersion{DeploymentName: depFoo, BuildId: "A"}, + CurrentVersionChangedTime: timestamppb.Now(), + RevisionNumber: 1, + } + _, err := s.matchingEngine.SyncDeploymentUserData(context.Background(), &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + DeploymentName: depFoo, + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_WORKFLOW}, + UpdateRoutingConfig: rc, + }) + s.NoError(err) + + // Verify: old-format slice retains only bar:C; foo:A & foo:B migrated + res, err := s.matchingEngine.GetTaskQueueUserData(context.Background(), &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: namespaceID, + TaskQueue: tq, + TaskQueueType: enumspb.TASK_QUEUE_TYPE_WORKFLOW, + LastKnownUserDataVersion: 0, + }) + s.NoError(err) + depData := res.GetUserData().GetData().GetPerType()[int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW)].GetDeploymentData() + + // Old-format slice check + var oldSliceBuilds []string + //nolint:staticcheck // SA1019 deprecated versions will clean up later + for _, dv := range depData.GetVersions() { + if dv.GetVersion().GetDeploymentName() == depBar { + oldSliceBuilds = append(oldSliceBuilds, dv.GetVersion().GetBuildId()) + } + // Ensure none for foo remain + s.NotEqual(depFoo, dv.GetVersion().GetDeploymentName()) + } + s.ElementsMatch([]string{"C"}, oldSliceBuilds) + + // New-format membership map for foo should contain A & B + fooVersions := depData.GetDeploymentsData()[depFoo].GetVersions() + _, hasA := fooVersions["A"] + _, hasB := fooVersions["B"] + s.True(hasA) + s.True(hasB) + // And not C + _, hasC := fooVersions["C"] + s.False(hasC) +} + func newHistoryEvent(eventID int64, eventType enumspb.EventType) *historypb.HistoryEvent { return &historypb.HistoryEvent{ EventId: eventID, diff --git a/service/matching/physical_task_queue_manager.go b/service/matching/physical_task_queue_manager.go index 4dd64d0c1ed..5db98c0bdee 100644 --- a/service/matching/physical_task_queue_manager.go +++ b/service/matching/physical_task_queue_manager.go @@ -706,7 +706,7 @@ func (c *physicalTaskQueueManagerImpl) ensureRegisteredInDeploymentVersion( } deploymentData := userData.GetData().GetPerType()[int32(c.queue.TaskType())].GetDeploymentData() - if worker_versioning.FindDeploymentVersion(deploymentData, worker_versioning.DeploymentVersionFromDeployment(workerDeployment)) != -1 { + if worker_versioning.HasDeploymentVersion(deploymentData, worker_versioning.DeploymentVersionFromDeployment(workerDeployment)) { // already registered in user data, we can assume the workflow is running. // TODO: consider replication scenarios where user data is replicated before // the deployment workflow. @@ -752,7 +752,7 @@ func (c *physicalTaskQueueManagerImpl) ensureRegisteredInDeploymentVersion( return err } deploymentData := userData.GetData().GetPerType()[int32(c.queue.TaskType())].GetDeploymentData() - if worker_versioning.FindDeploymentVersion(deploymentData, worker_versioning.DeploymentVersionFromDeployment(workerDeployment)) >= 0 { + if worker_versioning.HasDeploymentVersion(deploymentData, worker_versioning.DeploymentVersionFromDeployment(workerDeployment)) { break } select { diff --git a/service/matching/task.go b/service/matching/task.go index 84f150410e3..2b989a0481b 100644 --- a/service/matching/task.go +++ b/service/matching/task.go @@ -74,6 +74,8 @@ type ( // than normal priorities) to indicate the poll forwarder. In some other cases (e.g. // migration) it may be adjusted from the explicit task priority. effectivePriority priorityKey + // taskDispatchRevisionNumber represents the revision number used by the task and is max(taskDirectiveRevisionNumber, routingConfigRevisionNumber) for the task. + taskDispatchRevisionNumber int64 } // taskResponse is used to report the result of either a match with a local poller, @@ -104,6 +106,7 @@ func (res taskResponse) err() error { func newInternalTaskForSyncMatch( info *persistencespb.TaskInfo, forwardInfo *taskqueuespb.TaskForwardInfo, + taskDispatchRevisionNumber int64, ) *internalTask { var redirectInfo *taskqueuespb.BuildIdRedirectInfo // if this task is not forwarded, source can only be history @@ -114,6 +117,7 @@ func newInternalTaskForSyncMatch( redirectInfo = forwardInfo.GetRedirectInfo() } return &internalTask{ + taskDispatchRevisionNumber: taskDispatchRevisionNumber, event: &genericTaskInfo{ AllocatedTaskInfo: &persistencespb.AllocatedTaskInfo{ Data: info, diff --git a/service/matching/task_queue_partition_manager.go b/service/matching/task_queue_partition_manager.go index 9fa05701de9..2f5e56fc587 100644 --- a/service/matching/task_queue_partition_manager.go +++ b/service/matching/task_queue_partition_manager.go @@ -24,6 +24,7 @@ import ( serviceerrors "go.temporal.io/server/common/serviceerror" "go.temporal.io/server/common/tqid" "go.temporal.io/server/common/worker_versioning" + "google.golang.org/protobuf/types/known/timestamppb" ) const ( @@ -198,12 +199,12 @@ func (pm *taskQueuePartitionManagerImpl) AddTask( directive := params.taskInfo.GetVersionDirective() // spoolQueue will be nil iff task is forwarded. reredirectTask: - spoolQueue, syncMatchQueue, _, err = pm.getPhysicalQueuesForAdd(ctx, directive, params.forwardInfo, params.taskInfo.GetRunId(), params.taskInfo.GetWorkflowId(), false) + spoolQueue, syncMatchQueue, _, taskDispatchRevisionNumber, err := pm.getPhysicalQueuesForAdd(ctx, directive, params.forwardInfo, params.taskInfo.GetRunId(), params.taskInfo.GetWorkflowId(), false) if err != nil { return "", false, err } - syncMatchTask := newInternalTaskForSyncMatch(params.taskInfo, params.forwardInfo) + syncMatchTask := newInternalTaskForSyncMatch(params.taskInfo, params.forwardInfo, taskDispatchRevisionNumber) pm.config.setDefaultPriority(syncMatchTask) if spoolQueue != nil && spoolQueue.QueueKey().Version().BuildId() != syncMatchQueue.QueueKey().Version().BuildId() { // Task is not forwarded and build ID is different on the two queues -> redirect rule is being applied. @@ -409,7 +410,7 @@ func (pm *taskQueuePartitionManagerImpl) ProcessSpooledTask( } // Redirect and re-resolve if we're blocked in matcher and user data changes. for { - newBacklogQueue, syncMatchQueue, userDataChanged, err := pm.getPhysicalQueuesForAdd(ctx, + newBacklogQueue, syncMatchQueue, userDataChanged, taskDispatchRevisionNumber, err := pm.getPhysicalQueuesForAdd(ctx, directive, nil, taskInfo.GetRunId(), @@ -418,6 +419,11 @@ func (pm *taskQueuePartitionManagerImpl) ProcessSpooledTask( if err != nil { return err } + + // Update the task dispatch revision number on the task since the routingConfig of the partition + // may have changed after the task was spooled. + task.taskDispatchRevisionNumber = taskDispatchRevisionNumber + // set redirect info if spoolQueue and syncMatchQueue build ids are different if assignedBuildId != syncMatchQueue.QueueKey().Version().BuildId() { task.redirectInfo = &taskqueuespb.BuildIdRedirectInfo{ @@ -463,7 +469,7 @@ func (pm *taskQueuePartitionManagerImpl) AddSpooledTask( // construct directive based on the build ID of the spool queue directive = worker_versioning.MakeBuildIdDirective(assignedBuildId) } - newBacklogQueue, syncMatchQueue, _, err := pm.getPhysicalQueuesForAdd( + newBacklogQueue, syncMatchQueue, _, taskDispatchRevisionNumber, err := pm.getPhysicalQueuesForAdd( ctx, directive, nil, @@ -474,6 +480,11 @@ func (pm *taskQueuePartitionManagerImpl) AddSpooledTask( if err != nil { return err } + + // Update the task dispatch revision number on the task since the routingConfig of the partition + // may have changed after the task was spooled. + task.taskDispatchRevisionNumber = taskDispatchRevisionNumber + // set redirect info if spoolQueue and syncMatchQueue build ids are different if assignedBuildId != syncMatchQueue.QueueKey().Version().BuildId() { task.redirectInfo = &taskqueuespb.BuildIdRedirectInfo{ @@ -509,7 +520,7 @@ func (pm *taskQueuePartitionManagerImpl) DispatchQueryTask( request *matchingservice.QueryWorkflowRequest, ) (*matchingservice.QueryWorkflowResponse, error) { reredirectTask: - _, syncMatchQueue, _, err := pm.getPhysicalQueuesForAdd(ctx, + _, syncMatchQueue, _, _, err := pm.getPhysicalQueuesForAdd(ctx, request.VersionDirective, // We do not pass forwardInfo because we want the parent partition to make fresh versioning decision. Note that // forwarded Query/Nexus task requests do not expire rapidly in contrast to forwarded activity/workflow tasks @@ -544,7 +555,7 @@ func (pm *taskQueuePartitionManagerImpl) DispatchNexusTask( request *matchingservice.DispatchNexusTaskRequest, ) (*matchingservice.DispatchNexusTaskResponse, error) { reredirectTask: - _, syncMatchQueue, _, err := pm.getPhysicalQueuesForAdd(ctx, + _, syncMatchQueue, _, _, err := pm.getPhysicalQueuesForAdd(ctx, worker_versioning.MakeUseAssignmentRulesDirective(), // We do not pass forwardInfo because we want the parent partition to make fresh versioning decision. Note that // forwarded Query/Nexus task requests do not expire rapidly in contrast to forwarded activity/workflow tasks @@ -640,23 +651,27 @@ func (pm *taskQueuePartitionManagerImpl) LegacyDescribeTaskQueue(includeTaskQueu if err != nil { return nil, err } - current, ramping := worker_versioning.CalculateTaskQueueVersioningInfo(perTypeUserData.GetDeploymentData()) + + current, _, currentUpdateTime, ramping, isRamping, rampingPercentage, _, rampingUpdateTime := worker_versioning.CalculateTaskQueueVersioningInfo(perTypeUserData.GetDeploymentData()) + info := &taskqueuepb.TaskQueueVersioningInfo{ //nolint:staticcheck // SA1019: [cleanup-wv-3.1] - CurrentVersion: worker_versioning.WorkerDeploymentVersionToStringV31(current.GetVersion()), - CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromVersion(current.GetVersion()), - UpdateTime: current.GetRoutingUpdateTime(), + CurrentVersion: worker_versioning.WorkerDeploymentVersionToStringV31(current), + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromVersion(current), + UpdateTime: timestamppb.New(currentUpdateTime), } - if ramping.GetRampingSinceTime() != nil { - info.RampingVersionPercentage = ramping.GetRampPercentage() + + if isRamping { + info.RampingVersionPercentage = rampingPercentage // If task queue is ramping to unversioned, ramping will be nil, which converts to "__unversioned__" //nolint:staticcheck // SA1019: [cleanup-wv-3.1] - info.RampingVersion = worker_versioning.WorkerDeploymentVersionToStringV31(ramping.GetVersion()) - info.RampingDeploymentVersion = worker_versioning.ExternalWorkerDeploymentVersionFromVersion(ramping.GetVersion()) - if info.GetUpdateTime().AsTime().Before(ramping.GetRoutingUpdateTime().AsTime()) { - info.UpdateTime = ramping.GetRoutingUpdateTime() + info.RampingVersion = worker_versioning.WorkerDeploymentVersionToStringV31(ramping) + info.RampingDeploymentVersion = worker_versioning.ExternalWorkerDeploymentVersionFromVersion(ramping) + if info.GetUpdateTime().AsTime().Before(rampingUpdateTime) { + info.UpdateTime = timestamppb.New(rampingUpdateTime) } } + resp.DescResponse.VersioningInfo = info } return resp, nil @@ -993,87 +1008,96 @@ func (pm *taskQueuePartitionManagerImpl) getPhysicalQueuesForAdd( runId string, workflowId string, isQuery bool, -) (spoolQueue physicalTaskQueueManager, syncMatchQueue physicalTaskQueueManager, userDataChanged <-chan struct{}, err error) { +) (spoolQueue physicalTaskQueueManager, syncMatchQueue physicalTaskQueueManager, userDataChanged <-chan struct{}, rcRevisionNumber int64, err error) { + // Note: Revision number mechanics are only involved if the dynamic config, UseRevisionNumberForWorkerVersioning, is enabled. + // Represents the revision number used by the task and is max(taskDirectiveRevisionNumber, routingConfigRevisionNumber) for the task. + var taskDispatchRevisionNumber, targetDeploymentRevisionNumber int64 + wfBehavior := directive.GetBehavior() deployment := worker_versioning.DirectiveDeployment(directive) perTypeUserData, userDataChanged, err := pm.getPerTypeUserData() if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } deploymentData := perTypeUserData.GetDeploymentData() + taskDirectiveRevisionNumber := directive.GetRevisionNumber() if wfBehavior == enumspb.VERSIONING_BEHAVIOR_PINNED { if pm.partition.Kind() == enumspb.TASK_QUEUE_KIND_STICKY { // TODO (shahab): we can verify the passed deployment matches the last poller's deployment - return pm.defaultQueue, pm.defaultQueue, userDataChanged, nil + return pm.defaultQueue, pm.defaultQueue, userDataChanged, 0, nil } err = worker_versioning.ValidateDeployment(deployment) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } // Preventing Query tasks from being dispatched to a drained version with no workers if isQuery { - for _, versionData := range deploymentData.GetVersions() { - if versionData.GetVersion() != nil && worker_versioning.DeploymentVersionFromDeployment(deployment).Equal(versionData.GetVersion()) { - if versionData.GetStatus() == enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINED && len(pm.GetAllPollerInfo()) == 0 { - versionStr := worker_versioning.ExternalWorkerDeploymentVersionToString(worker_versioning.ExternalWorkerDeploymentVersionFromDeployment(deployment)) - return nil, nil, nil, serviceerror.NewFailedPreconditionf(ErrBlackholedQuery, - versionStr, - versionStr, - ) - } - } + if err := pm.checkQueryBlackholed(deploymentData, deployment); err != nil { + return nil, nil, nil, 0, err } } // We ignore the pinned directive if this is an activity task but the activity task queue is // not present in the workflow's pinned deployment. Such activities are considered // independent activities and are treated as unpinned, sent to their TQ's current deployment. - isIndependentActivity := pm.partition.TaskType() == enumspb.TASK_QUEUE_TYPE_ACTIVITY && - !worker_versioning.HasDeploymentVersion(deploymentData, worker_versioning.DeploymentVersionFromDeployment(deployment)) - if !isIndependentActivity { + + var isIndependentPinnedActivity bool + if pm.partition.TaskType() == enumspb.TASK_QUEUE_TYPE_ACTIVITY { + // We need to check both the deployment data formats to be sure if we can ignore the pinned directive on the activity task. + if !worker_versioning.HasDeploymentVersion(deploymentData, worker_versioning.DeploymentVersionFromDeployment(deployment)) { + isIndependentPinnedActivity = true + } + } + + if !isIndependentPinnedActivity { pinnedQueue, err := pm.getVersionedQueue(ctx, "", "", deployment, true) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err // TODO (Shivam): Please add the comment in the proto to explain that pinned tasks and sticky tasks get 0 for the rev number. } if forwardInfo == nil { // Task is not forwarded, so it can be spooled if sync match fails. // Spool queue and sync match queue is the same for pinned workflows. - return pinnedQueue, pinnedQueue, userDataChanged, nil + return pinnedQueue, pinnedQueue, userDataChanged, 0, nil } else { // Forwarded from child partition - only do sync match. - return nil, pinnedQueue, userDataChanged, nil + return nil, pinnedQueue, userDataChanged, 0, nil } } } - current, ramping := worker_versioning.CalculateTaskQueueVersioningInfo(deploymentData) - currentDeployment := worker_versioning.DeploymentFromDeploymentVersion(worker_versioning.FindDeploymentVersionForWorkflowID(current, ramping, workflowId)) - if currentDeployment != nil && - // Make sure the wf is not v1-2 versioned - directive.GetAssignedBuildId() == "" { + current, currentRevisionNumber, _, ramping, _, rampingPercentage, rampingRevisionNumber, _ := worker_versioning.CalculateTaskQueueVersioningInfo(deploymentData) + targetDeploymentVersion, targetDeploymentRevisionNumber := worker_versioning.FindTargetDeploymentVersionAndRevisionNumberForWorkflowID(current, currentRevisionNumber, ramping, rampingPercentage, rampingRevisionNumber, workflowId) + targetDeployment := worker_versioning.DeploymentFromDeploymentVersion(targetDeploymentVersion) + + var targetDeploymentQueue physicalTaskQueueManager + if directive.GetAssignedBuildId() == "" && targetDeployment != nil { if pm.partition.Kind() == enumspb.TASK_QUEUE_KIND_STICKY { - if !deployment.Equal(currentDeployment) { + if !deployment.Equal(targetDeployment) { // Current deployment has changed, so the workflow should move to a normal queue to // get redirected to the new deployment. - return nil, nil, nil, serviceerrors.NewStickyWorkerUnavailable() + return nil, nil, nil, 0, serviceerrors.NewStickyWorkerUnavailable() } // TODO (shahab): we can verify the passed deployment matches the last poller's deployment - return pm.defaultQueue, pm.defaultQueue, userDataChanged, nil + return pm.defaultQueue, pm.defaultQueue, userDataChanged, 0, nil } - currentDeploymentQueue, err := pm.getVersionedQueue(ctx, "", "", currentDeployment, true) + var err error + targetDeploymentQueue, taskDispatchRevisionNumber, err = pm.chooseTargetQueueByFlag( + ctx, deployment, targetDeployment, targetDeploymentRevisionNumber, taskDirectiveRevisionNumber, + ) + if forwardInfo == nil { // Task is not forwarded, so it can be spooled if sync match fails. // Unpinned tasks are spooled in default queue - return pm.defaultQueue, currentDeploymentQueue, userDataChanged, err + return pm.defaultQueue, targetDeploymentQueue, userDataChanged, taskDispatchRevisionNumber, err } else { // Forwarded from child partition - only do sync match. - return nil, currentDeploymentQueue, userDataChanged, err + return nil, targetDeploymentQueue, userDataChanged, taskDispatchRevisionNumber, err } } @@ -1091,18 +1115,18 @@ func (pm *taskQueuePartitionManagerImpl) getPhysicalQueuesForAdd( true, ) } - return nil, syncMatchQueue, nil, err + return nil, syncMatchQueue, nil, taskDispatchRevisionNumber, err } if directive.GetBuildId() == nil { // The task belongs to an unversioned execution. Keep using unversioned. But also return // userDataChanged so if current deployment is set, the task redirects to that deployment. - return pm.defaultQueue, pm.defaultQueue, userDataChanged, nil + return pm.defaultQueue, pm.defaultQueue, userDataChanged, taskDispatchRevisionNumber, nil } userData, userDataChanged, err := pm.userDataManager.GetUserData() if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } data := userData.GetData().GetVersioningData() @@ -1118,7 +1142,7 @@ func (pm *taskQueuePartitionManagerImpl) getPhysicalQueuesForAdd( if buildId == "" { versionSet, err = pm.getVersionSetForAdd(directive, data) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } } case *taskqueuespb.TaskVersionDirective_AssignedBuildId: @@ -1128,7 +1152,7 @@ func (pm *taskQueuePartitionManagerImpl) getPhysicalQueuesForAdd( if len(data.GetVersionSets()) > 0 { versionSet, err = pm.getVersionSetForAdd(directive, data) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } } if versionSet == "" { @@ -1148,36 +1172,61 @@ func (pm *taskQueuePartitionManagerImpl) getPhysicalQueuesForAdd( // TODO: [cleanup-old-wv] _, err = checkVersionForStickyAdd(data, directive.GetAssignedBuildId()) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } if buildId != redirectBuildId { // redirect rule added for buildId, kick task back to normal queue // TODO (shahab): support V3 in here - return nil, nil, nil, serviceerrors.NewStickyWorkerUnavailable() + return nil, nil, nil, 0, serviceerrors.NewStickyWorkerUnavailable() } // sticky queues only use default queue - return pm.defaultQueue, pm.defaultQueue, userDataChanged, nil + return pm.defaultQueue, pm.defaultQueue, userDataChanged, 0, nil } if versionSet != "" { spoolQueue = pm.defaultQueue syncMatchQueue, err = pm.getVersionedQueue(ctx, versionSet, "", nil, true) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } } else { syncMatchQueue, err = pm.getPhysicalQueue(ctx, redirectBuildId, nil) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } // redirect rules are not applied when spooling a task. They'll be applied when dispatching the spool task. spoolQueue, err = pm.getPhysicalQueue(ctx, buildId, nil) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, 0, err } } - return spoolQueue, syncMatchQueue, userDataChanged, err + return spoolQueue, syncMatchQueue, userDataChanged, taskDispatchRevisionNumber, err +} + +// chooseTargetQueueByFlag picks the target queue and dispatch revision number. +// If UseRevisionNumberForWorkerVersioning is enabled, it uses the revision +// comparison; otherwise it always chooses targetDeployment. +// TODO (Shivam): This function can be simplified to literally one if check. +func (pm *taskQueuePartitionManagerImpl) chooseTargetQueueByFlag( + ctx context.Context, + taskDeployment *deploymentpb.Deployment, + targetDeployment *deploymentpb.Deployment, + targetDeploymentRevisionNumber int64, + taskDirectiveRevisionNumber int64, +) (physicalTaskQueueManager, int64, error) { + if pm.engine != nil && pm.engine.config.UseRevisionNumberForWorkerVersioning(pm.Namespace().Name().String()) { + if targetDeployment.GetSeriesName() != taskDeployment.GetSeriesName() || targetDeploymentRevisionNumber >= taskDirectiveRevisionNumber { + q, err := pm.getVersionedQueue(ctx, "", "", targetDeployment, true) + return q, targetDeploymentRevisionNumber, err + } + q, err := pm.getVersionedQueue(ctx, "", "", taskDeployment, true) + return q, taskDirectiveRevisionNumber, err + } + + // When not using revision number mechanics, always choose the targetDeployment. + q, err := pm.getVersionedQueue(ctx, "", "", targetDeployment, true) + return q, targetDeploymentRevisionNumber, err } func (pm *taskQueuePartitionManagerImpl) getVersionSetForAdd(directive *taskqueuespb.TaskVersionDirective, data *persistencespb.VersioningData) (string, error) { @@ -1220,6 +1269,31 @@ func (pm *taskQueuePartitionManagerImpl) recordUnknownBuildTask(buildId string) pm.metricsHandler.Counter(metrics.UnknownBuildTasksCounter.Name()).Record(1) } +//nolint:staticcheck // SA1019: [cleanup-wv-3.1] +func (pm *taskQueuePartitionManagerImpl) checkQueryBlackholed( + deploymentData *persistencespb.DeploymentData, + deployment *deploymentpb.Deployment, +) error { + // Check old format + for _, versionData := range deploymentData.GetVersions() { + if versionData.GetVersion() != nil && worker_versioning.DeploymentVersionFromDeployment(deployment).Equal(versionData.GetVersion()) { + if versionData.GetStatus() == enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINED && len(pm.GetAllPollerInfo()) == 0 { + versionStr := worker_versioning.ExternalWorkerDeploymentVersionToString(worker_versioning.ExternalWorkerDeploymentVersionFromDeployment(deployment)) + return serviceerror.NewFailedPreconditionf(ErrBlackholedQuery, versionStr, versionStr) + } + } + } + + // Check new format + if workerDeploymentData, ok := deploymentData.GetDeploymentsData()[deployment.GetSeriesName()]; ok { + if workerDeploymentData.GetVersions() != nil && workerDeploymentData.GetVersions()[deployment.GetBuildId()] != nil && + workerDeploymentData.GetVersions()[deployment.GetBuildId()].GetStatus() == enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINED && len(pm.GetAllPollerInfo()) == 0 { + return serviceerror.NewFailedPreconditionf(ErrBlackholedQuery, deployment.GetBuildId(), deployment.GetBuildId()) + } + } + return nil +} + func (pm *taskQueuePartitionManagerImpl) getPerTypeUserData() (*persistencespb.TaskQueueTypeUserData, <-chan struct{}, error) { userData, userDataChanged, err := pm.userDataManager.GetUserData() if err != nil { diff --git a/service/worker/workerdeployment/activities.go b/service/worker/workerdeployment/activities.go index b69d78d0456..c92a68d309c 100644 --- a/service/worker/workerdeployment/activities.go +++ b/service/worker/workerdeployment/activities.go @@ -200,6 +200,7 @@ func (a *Activities) SyncDeploymentVersionUserDataFromWorkerDeployment( if input.ForgetVersion { res, err = a.matchingClient.SyncDeploymentUserData(ctx, &matchingservice.SyncDeploymentUserDataRequest{ NamespaceId: a.namespace.ID().String(), + DeploymentName: input.GetDeploymentName(), TaskQueue: syncData.Name, TaskQueueTypes: syncData.Types, Operation: &matchingservice.SyncDeploymentUserDataRequest_ForgetVersion{ @@ -209,6 +210,7 @@ func (a *Activities) SyncDeploymentVersionUserDataFromWorkerDeployment( } else { res, err = a.matchingClient.SyncDeploymentUserData(ctx, &matchingservice.SyncDeploymentUserDataRequest{ NamespaceId: a.namespace.ID().String(), + DeploymentName: input.GetDeploymentName(), TaskQueue: syncData.Name, TaskQueueTypes: syncData.Types, Operation: &matchingservice.SyncDeploymentUserDataRequest_UpdateVersionData{ diff --git a/service/worker/workerdeployment/workflow.go b/service/worker/workerdeployment/workflow.go index a799497a020..170a30c90c0 100644 --- a/service/worker/workerdeployment/workflow.go +++ b/service/worker/workerdeployment/workflow.go @@ -1082,9 +1082,10 @@ func (d *WorkflowRunner) syncUnversionedRamp(ctx workflow.Context, versionUpdate var syncRes deploymentspb.SyncDeploymentVersionUserDataResponse err = workflow.ExecuteActivity(activityCtx, d.a.SyncDeploymentVersionUserDataFromWorkerDeployment, &deploymentspb.SyncDeploymentVersionUserDataRequest{ - Version: nil, - ForgetVersion: false, - Sync: batch, + DeploymentName: d.DeploymentName, + Version: nil, + ForgetVersion: false, + Sync: batch, }).Get(ctx, &syncRes) if err != nil { // TODO (Shivam): Compensation functions required to roll back the local state + activity changes. diff --git a/tests/task_queue_stats_test.go b/tests/task_queue_stats_test.go index 04b46929682..63d509b320e 100644 --- a/tests/task_queue_stats_test.go +++ b/tests/task_queue_stats_test.go @@ -42,7 +42,8 @@ type ( // Unless a test calls out a specific methods, all three methods are tested in each test case. TaskQueueStatsSuite struct { testcore.FunctionalTestBase - usePriMatcher bool + usePriMatcher bool + useNewDeploymentData bool } TaskQueueExpectations struct { @@ -294,6 +295,7 @@ func (s *TaskQueueStatsSuite) enqueueWorkflows(sets int, tqName string) int { } func (s *TaskQueueStatsSuite) createDeploymentInTaskQueue(tqName string) { + // Using old DeploymentData format var wg sync.WaitGroup wg.Add(2) diff --git a/tests/versioning_3_test.go b/tests/versioning_3_test.go index f71d612e8ca..800d72d821c 100644 --- a/tests/versioning_3_test.go +++ b/tests/versioning_3_test.go @@ -61,19 +61,22 @@ const ( versionStatusNil = versionStatus(0) versionStatusInactive = versionStatus(1) - versionStatusRamping = versionStatus(2) - versionStatusCurrent = versionStatus(3) + versionStatusCurrent = versionStatus(2) + versionStatusRamping = versionStatus(3) + versionStatusDraining = versionStatus(4) + versionStatusDrained = versionStatus(5) ) type Versioning3Suite struct { WorkflowUpdateBaseSuite - useV32 bool + useV32 bool + useNewDeploymentData bool } func TestVersioning3FunctionalSuite(t *testing.T) { t.Parallel() suite.Run(t, &Versioning3Suite{useV32: true}) - suite.Run(t, &Versioning3Suite{useV32: false}) + suite.Run(t, &Versioning3Suite{useV32: true, useNewDeploymentData: true}) } func (s *Versioning3Suite) SetupSuite() { @@ -133,28 +136,67 @@ func (s *Versioning3Suite) TestUnpinnedTask_NonCurrentDeployment() { } func (s *Versioning3Suite) TestUnpinnedTask_OldDeployment() { - s.RunTestWithMatchingBehavior( - func() { - tv := testvars.New(s) - tvOldDeployment := tv.WithBuildIDNumber(1) - tvNewDeployment := tv.WithBuildIDNumber(2) - // previous current deployment - s.updateTaskQueueDeploymentData(tvOldDeployment, true, 0, false, time.Minute, tqTypeWf) - // current deployment - s.updateTaskQueueDeploymentData(tvNewDeployment, true, 0, false, 0, tqTypeWf) - - s.startWorkflow(tv, nil) - - s.idlePollWorkflow( - tvOldDeployment, - true, - ver3MinPollTime, - "old deployment should not receive unpinned task", - ) - // Sleeping to let the pollers arrive to server before ending the test. - time.Sleep(200 * time.Millisecond) //nolint:forbidigo - }, - ) + if s.useNewDeploymentData == true { + s.RunTestWithMatchingBehavior( + func() { + tv := testvars.New(s) + tvOldDeployment := tv.WithBuildIDNumber(1) + tvNewDeployment := tv.WithBuildIDNumber(2) + + // previous current deployment + s.updateTaskQueueDeploymentDataWithRoutingConfig(tvOldDeployment, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tvOldDeployment.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tvOldDeployment.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + + // current deployment + s.updateTaskQueueDeploymentDataWithRoutingConfig(tvNewDeployment, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tvNewDeployment.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tvNewDeployment.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + + s.startWorkflow(tv, nil) + + s.idlePollWorkflow( + tvOldDeployment, + true, + ver3MinPollTime, + "old deployment should not receive unpinned task", + ) + // Sleeping to let the pollers arrive to server before ending the test. + time.Sleep(200 * time.Millisecond) //nolint:forbidigo + }, + ) + } else { + s.RunTestWithMatchingBehavior( + func() { + tv := testvars.New(s) + tvOldDeployment := tv.WithBuildIDNumber(1) + tvNewDeployment := tv.WithBuildIDNumber(2) + // previous current deployment + s.updateTaskQueueDeploymentData(tvOldDeployment, true, 0, false, time.Minute, tqTypeWf) + // current deployment + s.updateTaskQueueDeploymentData(tvNewDeployment, true, 0, false, 0, tqTypeWf) + + s.startWorkflow(tv, nil) + + s.idlePollWorkflow( + tvOldDeployment, + true, + ver3MinPollTime, + "old deployment should not receive unpinned task", + ) + // Sleeping to let the pollers arrive to server before ending the test. + time.Sleep(200 * time.Millisecond) //nolint:forbidigo + }, + ) + } } func (s *Versioning3Suite) TestWorkflowWithPinnedOverride_Sticky() { @@ -1129,7 +1171,17 @@ func (s *Versioning3Suite) testTransitionFromWft(sticky bool, toUnversioned bool s.warmUpSticky(tv1) } - s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeWf, tqTypeAct) + } runID := s.startWorkflow(tv1, nil) s.pollWftAndHandle(tv1, false, nil, @@ -1152,7 +1204,15 @@ func (s *Versioning3Suite) testTransitionFromWft(sticky bool, toUnversioned bool if toUnversioned { // unset A as current - s.updateTaskQueueDeploymentData(tv1, false, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: nil, + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv1, false, 0, false, 0, tqTypeWf, tqTypeAct) + } s.unversionedPollWftAndHandle(tv1, false, nil, func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { @@ -1162,8 +1222,21 @@ func (s *Versioning3Suite) testTransitionFromWft(sticky bool, toUnversioned bool }) s.verifyWorkflowVersioning(tv1, vbUnspecified, nil, nil, nil) } else { + // Set B as the current deployment - s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING, + }}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf, tqTypeAct) + } s.pollWftAndHandle(tv2, false, nil, func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { @@ -1221,7 +1294,17 @@ func (s *Versioning3Suite) testDoubleTransition(unversionedSrc bool, signal bool if !unversionedSrc { // sourceV is v1, set current version to it - s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeWf, tqTypeAct) + } } s.doPollWftAndHandle(tv1, !unversionedSrc, false, nil, @@ -1238,7 +1321,19 @@ func (s *Versioning3Suite) testDoubleTransition(unversionedSrc bool, signal bool } // set current version to v2 - s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING, + }}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf, tqTypeAct) + } // poll activity from v2 worker, this should start a transition but should not immediately start the activity. go s.idlePollActivity(tv2, true, time.Minute, "v2 worker should not receive the activity") @@ -1258,9 +1353,29 @@ func (s *Versioning3Suite) testDoubleTransition(unversionedSrc bool, signal bool // Back to sourceV if unversionedSrc { - s.updateTaskQueueDeploymentData(tv2, false, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: nil, + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 3, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv2, false, 0, false, 0, tqTypeWf, tqTypeAct) + } } else { - s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 3, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING, + }}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeWf, tqTypeAct) + } } // Now poll for wf task from sourceV while there is a transition to v2 @@ -1282,7 +1397,19 @@ func (s *Versioning3Suite) testDoubleTransition(unversionedSrc bool, signal bool }) // Set v2 as the current version again - s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 4, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING, + }}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf, tqTypeAct) + } s.pollWftAndHandle(tv2, false, nil, func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { @@ -1317,16 +1444,38 @@ func (s *Versioning3Suite) nexusTaskStaysOnCurrentDeployment() { }, } - // current deployment is -> A - s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeNexus) + // current deployment is -> tv1 + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeNexus) + } else { + s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeNexus) + } // local poller with deployment A receives task s.pollAndDispatchNexusTask(tv1, nexusRequest) - // current deployment is now -> B - s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeNexus) + // current deployment is now -> tv2 + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING, + }}, []string{}, tqTypeNexus) + } else { + s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeNexus) + } - // Pollers of A are there but should not get any task + // Pollers of tv1 are there but should not get any task go s.idlePollNexus(tv1, true, ver3MinPollTime, "nexus task should not go to the old deployment") s.pollAndDispatchNexusTask(tv2, nexusRequest) @@ -1357,7 +1506,17 @@ func (s *Versioning3Suite) TestEagerActivity() { s.OverrideDynamicConfig(dynamicconfig.EnableActivityEagerExecution, true) tv := testvars.New(s) - s.updateTaskQueueDeploymentData(tv, true, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv, true, 0, false, 0, tqTypeWf, tqTypeAct) + } s.startWorkflow(tv, nil) poller, resp := s.pollWftAndHandle(tv, false, nil, @@ -1419,7 +1578,17 @@ func (s *Versioning3Suite) testTransitionFromActivity(sticky bool) { s.warmUpSticky(tv1) } - s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv1, true, 0, false, 0, tqTypeWf, tqTypeAct) + } runID := s.startWorkflow(tv1, nil) s.pollWftAndHandle(tv1, false, nil, @@ -1471,7 +1640,19 @@ func (s *Versioning3Suite) testTransitionFromActivity(sticky bool) { s.verifyWorkflowVersioning(tv1, vbUnpinned, tv1.Deployment(), nil, nil) // 2. Set d2 as the current deployment - s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING, + }}, []string{}, tqTypeWf, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf, tqTypeAct) + } // Although updateTaskQueueDeploymentData waits for deployment data to reach the TQs, backlogged // tasks might still be waiting behind the old deployment's poll channel. Partition manage should // immediately react to the deployment data changes, but there still is a race possible and the @@ -1547,8 +1728,27 @@ func (s *Versioning3Suite) testIndependentActivity(behavior enumspb.VersioningBe tvAct := testvars.New(s).WithDeploymentSeriesNumber(2).WithTaskQueueNumber(2) // Set current deployment for each TQ - s.updateTaskQueueDeploymentData(tvWf, true, 0, false, 0, tqTypeWf) - s.updateTaskQueueDeploymentData(tvAct, true, 0, false, 0, tqTypeAct) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tvWf, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tvWf.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tvWf.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + + // Different deployment here for the activity TQ. + s.updateTaskQueueDeploymentDataWithRoutingConfig(tvAct, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tvAct.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tvAct.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeAct) + } else { + s.updateTaskQueueDeploymentData(tvWf, true, 0, false, 0, tqTypeWf) + s.updateTaskQueueDeploymentData(tvAct, true, 0, false, 0, tqTypeAct) + } s.startWorkflow(tvWf, nil) @@ -1675,7 +1875,28 @@ func (s *Versioning3Suite) testChildWorkflowInheritance_ExpectInherit(crossTq bo defer w1.Stop() // v1 is current for both parent and child - s.setCurrentDeployment(tv1) + // TODO (Shivam): Once #8570 goes in, we can replace this with a simple setCurrentDeployment call. + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + + if crossTq { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1Child, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1Child.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1Child.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + } + } else { + s.setCurrentDeployment(tv1) + } startOpts := sdkclient.StartWorkflowOptions{ ID: tv1.WorkflowID(), @@ -1695,9 +1916,29 @@ func (s *Versioning3Suite) testChildWorkflowInheritance_ExpectInherit(crossTq bo close(wfStarted) // force panic if replayed // make v2 current for both parent and child and unblock the wf to start the child - s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + } else { + s.updateTaskQueueDeploymentData(tv2, true, 0, false, 0, tqTypeWf) + } if crossTq { - s.updateTaskQueueDeploymentData(tv2Child, true, 0, false, 0, tqTypeWf) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2Child, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2Child.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2Child.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + } else { + s.updateTaskQueueDeploymentData(tv2Child, true, 0, false, 0, tqTypeWf) + } } currentChanged <- struct{}{} @@ -1805,7 +2046,17 @@ func (s *Versioning3Suite) testChildWorkflowInheritance_ExpectNoInherit(crossTq defer w1.Stop() // v1 is current for both parent and child - s.setCurrentDeployment(tv1) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + } else { + s.setCurrentDeployment(tv1) + } if crossTq { w2xtq := worker.New(sdkClient, tv2Child.TaskQueue().GetName(), worker.Options{ @@ -1847,7 +2098,27 @@ func (s *Versioning3Suite) testChildWorkflowInheritance_ExpectNoInherit(crossTq close(wfStarted) // make v2 current for both parent and child and unblock the wf to start the child - s.setCurrentDeployment(tv2) + if s.useNewDeploymentData { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + + if crossTq { + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv2Child, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2Child.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2Child.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + } + } else { + s.setCurrentDeployment(tv2) + } currentChanged <- struct{}{} var out string @@ -2006,12 +2277,31 @@ func (s *Versioning3Suite) testCan(crossTq bool, behavior enumspb.VersioningBeha func (s *Versioning3Suite) TestDescribeTaskQueueVersioningInfo() { tv := testvars.New(s) - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 50*time.Second) defer cancel() t1 := time.Now() t2 := t1.Add(time.Second) - s.syncTaskQueueDeploymentData(tv, false, 20, false, t1, tqTypeWf) + revisionNumber := int64(1) + + // ramping a version up to 20%. + newRoutingConfig := &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31("__unversioned__"), + CurrentVersionChangedTime: nil, + RampingDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv.DeploymentVersionString()), + RampingVersionPercentage: 20, + RampingVersionChangedTime: timestamp.TimePtr(t1), + RampingVersionPercentageChangedTime: timestamp.TimePtr(t1), + RevisionNumber: revisionNumber, + } + + if s.useNewDeploymentData { + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv, newRoutingConfig, map[string]*deploymentspb.WorkerDeploymentVersionData{tv.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + } else { + s.syncTaskQueueDeploymentData(tv, false, 20, false, t1, tqTypeWf) + } wfInfo, err := s.FrontendClient().DescribeTaskQueue(ctx, &workflowservice.DescribeTaskQueueRequest{ Namespace: s.Namespace().String(), TaskQueue: tv.TaskQueue(), @@ -2027,7 +2317,19 @@ func (s *Versioning3Suite) TestDescribeTaskQueueVersioningInfo() { UpdateTime: timestamp.TimePtr(t1), }, wfInfo.GetVersioningInfo()) - s.syncTaskQueueDeploymentData(tv, true, 0, false, t1, tqTypeAct) + // Setting the current version for the activity TQ only. + newRoutingConfig = &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(t1), + RevisionNumber: revisionNumber, + } + if s.useNewDeploymentData { + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv, newRoutingConfig, map[string]*deploymentspb.WorkerDeploymentVersionData{tv.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeAct) + } else { + s.syncTaskQueueDeploymentData(tv, true, 0, false, t1, tqTypeAct) + } actInfo, err := s.FrontendClient().DescribeTaskQueue(ctx, &workflowservice.DescribeTaskQueueRequest{ Namespace: s.Namespace().String(), @@ -2042,7 +2344,22 @@ func (s *Versioning3Suite) TestDescribeTaskQueueVersioningInfo() { }, actInfo.GetVersioningInfo()) // Now ramp to unversioned - s.syncTaskQueueDeploymentData(tv, false, 10, true, t2, tqTypeAct) + newRoutingConfig = &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(t1), + RampingDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31("__unversioned__"), + RampingVersionPercentage: 10, + RampingVersionChangedTime: timestamp.TimePtr(t2), + RampingVersionPercentageChangedTime: timestamp.TimePtr(t2), + RevisionNumber: 2, + } + if s.useNewDeploymentData { + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv, newRoutingConfig, map[string]*deploymentspb.WorkerDeploymentVersionData{tv.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeAct) + } else { + s.syncTaskQueueDeploymentData(tv, false, 10, true, t2, tqTypeAct) + } s.waitForDeploymentDataPropagation(tv, versionStatusNil, true, tqTypeAct) actInfo, err = s.FrontendClient().DescribeTaskQueue(ctx, &workflowservice.DescribeTaskQueueRequest{ @@ -2061,7 +2378,189 @@ func (s *Versioning3Suite) TestDescribeTaskQueueVersioningInfo() { }, actInfo.GetVersioningInfo()) } +func (s *Versioning3Suite) TestSyncDeploymentUserDataWithRoutingConfig_Update() { + if s.useNewDeploymentData == false { + s.T().Skip() + } + tv := testvars.New(s) + + data := s.getTaskQueueDeploymentData(tv, tqTypeAct) + s.Nil(data) + data = s.getTaskQueueDeploymentData(tv, tqTypeWf) + s.Nil(data) + + t1 := time.Now() + tv1 := tv.WithBuildIDNumber(1) + revisionNumber := int64(1) + + routingConfig := &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(t1), + RevisionNumber: revisionNumber, + } + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv1, routingConfig, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeAct) + + data = s.getTaskQueueDeploymentData(tv, tqTypeAct) + s.ProtoEqual(&persistencespb.DeploymentData{DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv1.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: routingConfig, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, + }, + }}, data) + data = s.getTaskQueueDeploymentData(tv, tqTypeWf) + s.Nil(data) + + // Changing things with an older revision number should not have effect. + invalidRoutingConfigWithOlderRevisionNumber := &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(t1), + RevisionNumber: revisionNumber - 1, + } + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv1, invalidRoutingConfigWithOlderRevisionNumber, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeAct) + data = s.getTaskQueueDeploymentData(tv, tqTypeAct) + s.ProtoEqual(&persistencespb.DeploymentData{DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv1.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: routingConfig, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, + }, + }}, data) + + // Changing things with a newer revision number should apply + revisionNumber++ + routingConfig = &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(t1), + RevisionNumber: revisionNumber, + } + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv1, routingConfig, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeAct) + data = s.getTaskQueueDeploymentData(tv, tqTypeAct) + s.ProtoEqual(&persistencespb.DeploymentData{DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv1.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: routingConfig, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, + }, + }}, data) + + // Add another version, with current status, this time to both tq types. + tv2 := tv.WithBuildIDNumber(2) + t2 := t1.Add(time.Second) + revisionNumber++ + routingConfig = &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(t2), + RevisionNumber: revisionNumber, + } + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv2, routingConfig, map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING, + }}, []string{}, tqTypeAct, tqTypeWf) + + // Verify the data is right for the activity TQ. + data = s.getTaskQueueDeploymentData(tv, tqTypeAct) + s.ProtoEqual(&persistencespb.DeploymentData{DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv1.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: routingConfig, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING, + }}, + }, + }}, data) + + // Verify the data is right for the workflow TQ. + data = s.getTaskQueueDeploymentData(tv, tqTypeWf) + s.ProtoEqual(&persistencespb.DeploymentData{DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv2.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: routingConfig, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_DRAINING, + }}, + }, + }}, data) + + // Forget v1 from both tq types + s.forgetDeploymentVersionsFromDeploymentData(tv1, tv1.DeploymentVersion().GetDeploymentName(), false, revisionNumber, tqTypeAct, tqTypeWf) + data = s.getTaskQueueDeploymentData(tv, tqTypeAct) + s.ProtoEqual(&persistencespb.DeploymentData{DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv2.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: routingConfig, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, + }, + }}, data) + + data = s.getTaskQueueDeploymentData(tv, tqTypeWf) + s.ProtoEqual(&persistencespb.DeploymentData{DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv2.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: routingConfig, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, + }, + }}, data) + + // Forget v1 again should be a noop + s.forgetDeploymentVersionsFromDeploymentData(tv1, tv1.DeploymentVersion().GetDeploymentName(), false, revisionNumber, tqTypeAct, tqTypeWf) + data = s.getTaskQueueDeploymentData(tv, tqTypeAct) + s.ProtoEqual(&persistencespb.DeploymentData{DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv2.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: routingConfig, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, + }, + }}, data) + + // Ramp unversioned + revisionNumber++ + t3 := t2.Add(time.Second) + routingConfig = &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv2.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(t2), + RampingDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31("__unversioned__"), + RampingVersionPercentage: 10, + RampingVersionChangedTime: timestamp.TimePtr(t3), + RampingVersionPercentageChangedTime: timestamp.TimePtr(t3), + RevisionNumber: revisionNumber, + } + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv2, routingConfig, map[string]*deploymentspb.WorkerDeploymentVersionData{ + tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, + }, []string{}, tqTypeAct, tqTypeWf) + data = s.getTaskQueueDeploymentData(tv, tqTypeAct) + s.ProtoEqual(&persistencespb.DeploymentData{DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv1.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: routingConfig, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{tv2.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, + }, + }}, data) + +} + func (s *Versioning3Suite) TestSyncDeploymentUserData_Update() { + if s.useNewDeploymentData == true { + s.T().Skip() + } tv := testvars.New(s) data := s.getTaskQueueDeploymentData(tv, tqTypeAct) @@ -2246,6 +2745,32 @@ func (s *Versioning3Suite) updateTaskQueueDeploymentData( } s.waitForDeploymentDataPropagation(tv, status, rampUnversioned, tqTypes...) + +} + +// updateTaskQueueDeploymentDataWithRoutingConfig updates the deployment data for the requested TQ types +// and also waits for the data to propagate to all the relevant partitions. +// TODO (Shivam): Update the name of this one. +func (s *Versioning3Suite) updateTaskQueueDeploymentDataWithRoutingConfig( + tv *testvars.TestVars, + routingConfig *deploymentpb.RoutingConfig, + upsertVersions map[string]*deploymentspb.WorkerDeploymentVersionData, + forgetVersions []string, + tqTypes ...enumspb.TaskQueueType, +) { + + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv, routingConfig, upsertVersions, forgetVersions, tqTypes...) + + // We need to know what the status of the version we are adding/forgetting is so that we can wait for it to propagate. + for _, version := range upsertVersions { + if version.GetStatus() == enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT { + s.waitForDeploymentDataPropagation(tv, versionStatusCurrent, false, tqTypes...) + } else if version.GetStatus() == enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_RAMPING { + s.waitForDeploymentDataPropagation(tv, versionStatusRamping, false, tqTypes...) + } else if version.GetStatus() == enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_INACTIVE { + s.waitForDeploymentDataPropagation(tv, versionStatusInactive, false, tqTypes...) + } + } } // getTaskQueueDeploymentData gets the deployment data for a given TQ type. The data is always @@ -2268,6 +2793,34 @@ func (s *Versioning3Suite) getTaskQueueDeploymentData( return resp.GetUserData().GetData().GetPerType()[int32(tqType)].GetDeploymentData() } +func (s *Versioning3Suite) syncTaskQueueDeploymentDataWithRoutingConfig( + tv *testvars.TestVars, + routingConfig *deploymentpb.RoutingConfig, + upsertVersions map[string]*deploymentspb.WorkerDeploymentVersionData, + forgetVersions []string, + t ...enumspb.TaskQueueType, +) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + + deploymentName := tv.DeploymentVersion().GetDeploymentName() + var err error + + _, err = s.GetTestCluster().MatchingClient().SyncDeploymentUserData( + ctx, &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: s.NamespaceID().String(), + TaskQueue: tv.TaskQueue().GetName(), + TaskQueueTypes: t, + DeploymentName: deploymentName, + UpdateRoutingConfig: routingConfig, + UpsertVersionsData: upsertVersions, + ForgetVersions: forgetVersions, + }, + ) + + s.NoError(err) +} + func (s *Versioning3Suite) syncTaskQueueDeploymentData( tv *testvars.TestVars, isCurrent bool, @@ -2311,6 +2864,31 @@ func (s *Versioning3Suite) syncTaskQueueDeploymentData( s.NoError(err) } +func (s *Versioning3Suite) forgetDeploymentVersionsFromDeploymentData( + tv *testvars.TestVars, + deploymentName string, + forgetUnversionedRamp bool, + revisionNumber int64, + t ...enumspb.TaskQueueType, +) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + v := tv.DeploymentVersion() + if forgetUnversionedRamp { + v.BuildId = "" + } + _, err := s.GetTestCluster().MatchingClient().SyncDeploymentUserData( + ctx, &matchingservice.SyncDeploymentUserDataRequest{ + NamespaceId: s.NamespaceID().String(), + TaskQueue: tv.TaskQueue().GetName(), + TaskQueueTypes: t, + DeploymentName: deploymentName, + ForgetVersions: []string{tv.BuildID()}, + }, + ) + s.NoError(err) +} + func (s *Versioning3Suite) forgetTaskQueueDeploymentVersion( tv *testvars.TestVars, t enumspb.TaskQueueType, @@ -2744,6 +3322,27 @@ func (s *Versioning3Suite) idlePollWorkflow( ) } +func (s *Versioning3Suite) idlePollUnversionedActivity( + tv *testvars.TestVars, + timeout time.Duration, + unexpectedTaskMessage string, +) { + poller := taskpoller.New(s.T(), s.FrontendClient(), s.Namespace().String()) + _, _ = poller.PollActivityTask( + &workflowservice.PollActivityTaskQueueRequest{}, + ).HandleTask( + tv, + func(task *workflowservice.PollActivityTaskQueueResponse) (*workflowservice.RespondActivityTaskCompletedRequest, error) { + if task != nil { + s.Logger.Error(fmt.Sprintf("Unexpected activity task received, ID: %s", task.ActivityId)) + s.Fail(unexpectedTaskMessage) + } + return nil, nil + }, + taskpoller.WithTimeout(timeout), + ) +} + func (s *Versioning3Suite) idlePollActivity( tv *testvars.TestVars, versioned bool, @@ -2829,7 +3428,7 @@ func (s *Versioning3Suite) waitForDeploymentDataPropagation( unversionedRamp bool, tqTypes ...enumspb.TaskQueueType, ) { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) + ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) defer cancel() v := s.GetTestCluster().Host().DcClient().GetValue(dynamicconfig.MatchingNumTaskqueueReadPartitions.Key()) @@ -2866,6 +3465,9 @@ func (s *Versioning3Suite) waitForDeploymentDataPropagation( perTypes := res.GetUserData().GetData().GetPerType() if perTypes != nil { deps := perTypes[int32(pt.tp)].GetDeploymentData().GetDeployments() + deploymentsData := perTypes[int32(pt.tp)].GetDeploymentData().GetDeploymentsData() + workerDeploymentData := deploymentsData[tv.DeploymentVersion().GetDeploymentName()] + for _, d := range deps { if d.GetDeployment().Equal(tv.Deployment()) { delete(remaining, pt) @@ -2875,6 +3477,14 @@ func (s *Versioning3Suite) waitForDeploymentDataPropagation( if perTypes[int32(pt.tp)].GetDeploymentData().GetUnversionedRampData() != nil { delete(remaining, pt) } + + // Using the new internal task-queue persistence schema that we have now defined. + if workerDeploymentData != nil { + routingConfig := workerDeploymentData.GetRoutingConfig() + if routingConfig.GetRampingDeploymentVersion() == nil && routingConfig.GetRampingVersionPercentage() > 0 { + delete(remaining, pt) + } + } continue } versions := perTypes[int32(pt.tp)].GetDeploymentData().GetVersions() @@ -2896,10 +3506,20 @@ func (s *Versioning3Suite) waitForDeploymentDataPropagation( } } } + + // Using the new internal task-queue persistence schema that we have now defined. + if workerDeploymentData != nil { + versions := workerDeploymentData.GetVersions() + for buildID, versionData := range versions { + if buildID == tv.DeploymentVersion().GetBuildId() && status == versionStatus(versionData.GetStatus()) { + delete(remaining, pt) + } + } + } } } return len(remaining) == 0 - }, 10*time.Second, 100*time.Millisecond) + }, 30*time.Second, 100*time.Millisecond) } func (s *Versioning3Suite) validateBacklogCount( @@ -2973,3 +3593,481 @@ func (s *Versioning3Suite) verifyVersioningSAs( } }, 5*time.Second, 50*time.Millisecond) } + +func (s *Versioning3Suite) TestAutoUpgradeWorkflows_NoBouncingBetweenVersions() { + s.T().Skip("This test is flaky right now and shall be fixed in a future PR.") // TODO (Shivam) + /* + + Test plan: + - Use only one read and write partition. + - Update the userData by setting current version to v0. + - Start 10 workflows on v0. MS reads v0 for these workflows. + - Update the userData by setting the current version to v1. + - Complete workflow task on v1. MS reads v1 for these workflows now. + - *Rollback* userData to v0 on that single partition (call lower level API) + - See if any workflow task goes back to original v0 poller (should not) + + */ + + s.OverrideDynamicConfig(dynamicconfig.MatchingNumTaskqueueReadPartitions, 1) + s.OverrideDynamicConfig(dynamicconfig.MatchingNumTaskqueueWritePartitions, 1) + + tv0 := testvars.New(s).WithBuildIDNumber(0) + tv1 := tv0.WithBuildIDNumber(1) + + // Update the userData by setting the current version to v0 + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv0, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv0.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv0.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf, tqTypeAct) + + // Wait until all task queue partitions know that v0 is current. + s.waitForDeploymentDataPropagation(tv0, versionStatusCurrent, false, tqTypeWf, tqTypeAct) + + // Make numWorkflows different workflow ID's so that we can verify that all workflows are running on v0. + numWorkflows := 10 + wfVarsV0 := make([]*testvars.TestVars, numWorkflows) + wfVarsV1 := make([]*testvars.TestVars, numWorkflows) + + for i := 0; i < numWorkflows; i++ { + wfVarsV0[i] = tv0.WithWorkflowIDNumber(i) + wfVarsV1[i] = tv1.WithWorkflowIDNumber(i) + } + + // Start all different workflows on version v0. + for i := 0; i < numWorkflows; i++ { + s.startWorkflow(wfVarsV0[i], nil) + } + + // Poll for workflows on v0. + channels := make([]chan struct{}, numWorkflows) + for i := 0; i < numWorkflows; i++ { + channels[i] = make(chan struct{}) + s.pollWftAndHandle(wfVarsV0[i], false, channels[i], + func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { + s.NotNil(task) + resp := respondEmptyWft(wfVarsV0[i], false, vbUnpinned) + resp.ForceCreateNewWorkflowTask = true + return resp, nil + }) + } + // Wait for channels to be closed + for i := 0; i < numWorkflows; i++ { + <-channels[i] + } + + // Verify that all workflows are running on v0. + for i := 0; i < numWorkflows; i++ { + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(wfVarsV0[i], vbUnpinned, tv0.Deployment(), nil, nil) + }, 10*time.Second, 100*time.Millisecond) + } + + // Verify that all workflows are running on v0 by using v1 vars + for i := 0; i < numWorkflows; i++ { + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(wfVarsV1[i], vbUnpinned, tv0.Deployment(), nil, nil) + }, 10*time.Second, 100*time.Millisecond) + } + + // Update the userData by setting the current version to v1. + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf, tqTypeAct) + + // Wait until all task queue partitions know that v1 is current. + s.waitForDeploymentDataPropagation(tv1, versionStatusCurrent, false, tqTypeWf, tqTypeAct) + + // Poll for workflows but this time the workflow task should be acted upon by a v1 worker. + channels = make([]chan struct{}, numWorkflows) + for i := 0; i < numWorkflows; i++ { + channels[i] = make(chan struct{}) + s.pollWftAndHandle(wfVarsV1[i], false, channels[i], + func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { + s.NotNil(task) + resp := respondEmptyWft(wfVarsV1[i], false, vbUnpinned) + resp.ForceCreateNewWorkflowTask = true + return resp, nil + }) + } + // Wait for channels to be closed + for i := 0; i < numWorkflows; i++ { + <-channels[i] + } + // Verify that all workflows are running on v1. + for i := 0; i < numWorkflows; i++ { + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(wfVarsV1[i], vbUnpinned, tv1.Deployment(), nil, nil) + }, 10*time.Second, 100*time.Millisecond) + } + + // Rollback the userData to v0. Using the lower API here. + _, err := s.GetTestCluster().MatchingClient().UpdateTaskQueueUserData(context.Background(), &matchingservice.UpdateTaskQueueUserDataRequest{ + NamespaceId: s.NamespaceID().String(), + TaskQueue: tv0.TaskQueue().GetName(), + UserData: &persistencespb.VersionedTaskQueueUserData{ + Data: &persistencespb.TaskQueueUserData{ + PerType: map[int32]*persistencespb.TaskQueueTypeUserData{ + int32(tqTypeWf): { + DeploymentData: &persistencespb.DeploymentData{ + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv0.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv0.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now().Add(-time.Second)), + RevisionNumber: 0, + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{ + tv0.DeploymentVersion().GetBuildId(): { + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, + }, + }, + }, + }, + }, + int32(tqTypeAct): { + DeploymentData: &persistencespb.DeploymentData{ + DeploymentsData: map[string]*persistencespb.WorkerDeploymentData{ + tv0.DeploymentVersion().GetDeploymentName(): { + RoutingConfig: &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv0.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now().Add(-time.Second)), + RevisionNumber: 0, + }, + Versions: map[string]*deploymentspb.WorkerDeploymentVersionData{ + tv0.DeploymentVersion().GetBuildId(): { + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }, + }, + }, + }, + }, + }, + }, + }, + Version: 0, + }, + }) + s.NoError(err) + // Even though the userData is rolled back to v0, the workflows should only continue to run on v1. + // Start idle pollers on v0 and ensure they never receive a task. + for i := 0; i < numWorkflows; i++ { + //nolint:testifylint + go s.idlePollWorkflow(wfVarsV0[i], true, ver3MinPollTime, "workflows should not go to the old deployment") + } + + // Complete all workflows on v1. + channels = make([]chan struct{}, numWorkflows) + for i := 0; i < numWorkflows; i++ { + channels[i] = make(chan struct{}) + s.pollWftAndHandle(wfVarsV1[i], false, channels[i], + func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { + s.NotNil(task) + return respondCompleteWorkflow(wfVarsV1[i], vbUnpinned), nil + }) + } + // Wait for channels to be closed + for i := 0; i < numWorkflows; i++ { + <-channels[i] + } + + // Verify that all workflows are completed on v1. + for i := 0; i < numWorkflows; i++ { + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(wfVarsV1[i], vbUnpinned, tv1.Deployment(), nil, nil) + }, 60*time.Second, 100*time.Millisecond) + } +} + +func (s *Versioning3Suite) TestWorkflowTQLags_DependentActivityStartsTransition() { + if !s.useNewDeploymentData { + s.T().Skip("This test is only supported on new deployment data") + } + /* + The aim of this test is to show the following does not occur when using revisionNumber mechanics: + - If the workflow TQ lags behind the activity TQ, with respect to the current version of a deployment, the activity should not be + - redirected to a new deployment and be thought of as an independent activity. + - Rather, the activity should commence a workflow transition! + + + Test plan: + - Use only one read and write partition. + - Update the userData, for workflow and activity TQ, by setting current version to v0. + - Let a controller poller complete a workflow task on v0 and schedule an activity task. + - Now, update the userData for the activity TQ by setting the current version to v1. + - Let an activity poller complete the activity task on v1. + - We should see a workflow transition happen to v1 even though the workflow TQ is lagging behind the activity TQ. + */ + s.OverrideDynamicConfig(dynamicconfig.MatchingNumTaskqueueReadPartitions, 1) + s.OverrideDynamicConfig(dynamicconfig.MatchingNumTaskqueueWritePartitions, 1) + s.OverrideDynamicConfig(dynamicconfig.UseRevisionNumberForWorkerVersioning, true) + + tv0 := testvars.New(s).WithBuildIDNumber(0) + tv1 := tv0.WithBuildIDNumber(1) + + // Update the userData by setting the current version to v0 + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv0, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv0.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv0.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf, tqTypeAct) + + // Wait until all task queue partitions know that v0 is current. + s.waitForDeploymentDataPropagation(tv0, versionStatusCurrent, false, tqTypeWf, tqTypeAct) + + // Start a workflow on v0. + s.startWorkflow(tv0, nil) + + // Poll for the workflow task on v0. + s.pollWftAndHandle(tv0, false, nil, + func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { + s.NotNil(task) + return respondWftWithActivities(tv0, tv0, false, vbUnpinned, "activity1"), nil + }) + + // Verify that the workflow is running on v1. + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(tv0, vbUnpinned, tv0.Deployment(), nil, nil) + }, 10*time.Second, 100*time.Millisecond) + + // Update the userData for the activity TQ by setting the current version to v1. + s.syncTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeAct) + + // Wait until all task queue partitions know that v1 is current. + s.waitForDeploymentDataPropagation(tv1, versionStatusCurrent, false, tqTypeAct) + + // Poll and complete the workflow task which should have been scheduled by the activity task since it would have started a transition to v1. + workflowTaskCh := make(chan struct{}, 1) + activityTaskCh := make(chan struct{}, 1) + + // Poll and complete the activity task on v1. + s.pollActivityAndHandle(tv1, activityTaskCh, + func(task *workflowservice.PollActivityTaskQueueResponse) (*workflowservice.RespondActivityTaskCompletedRequest, error) { + s.NotNil(task) + return respondActivity(), nil + }) + + // Workflow task poller transitions the workflow to v1. + s.pollWftAndHandle(tv1, false, workflowTaskCh, + func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { + s.NotNil(task) + return respondEmptyWft(tv1, false, vbUnpinned), nil + }) + + <-workflowTaskCh + <-activityTaskCh + + // Verify that the workflow is running on v1. + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(tv0, vbUnpinned, tv1.Deployment(), nil, nil) + }, 10*time.Second, 100*time.Millisecond) +} + +func (s *Versioning3Suite) TestActivityTQLags_DependentActivityCompletesOnTheNewVersion() { + if !s.useNewDeploymentData { + s.T().Skip("This test is only supported on new deployment data") + } + /* + The aim of this test is to show the following does not occur when using revisionNumber mechanics: + - If the activity TQ lags behind the workflow TQ, with respect to the current version of a deployment, the activity should not be + - dispatched to the deployment found in the un-synced activity TQ. + - The main difference between this test and TestActivityQLags_DependentActivityOnUnversionedCompletesOnTheNewVersion is that this one + - shall have the activity TQ versioned to some build ID. + + Test plan: + - Use only one read and write partition. + - Update the userData, for workflow and activity TQ, by setting current version to v0. + - Let a controlled poller complete the workflow task on v0 and schedule another workflow task. + - Update the userData, this time for the workflow TQ only, by setting the current version to v1. + - Let a controlled poller complete the workflow task on v1 and schedule an activity task. + - We should see the activity task be dispatched to a v1 poller even though it's lagging behind the workflow TQ. + */ + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + s.OverrideDynamicConfig(dynamicconfig.MatchingNumTaskqueueReadPartitions, 1) + s.OverrideDynamicConfig(dynamicconfig.MatchingNumTaskqueueWritePartitions, 1) + s.OverrideDynamicConfig(dynamicconfig.UseRevisionNumberForWorkerVersioning, true) + + tv0 := testvars.New(s).WithBuildIDNumber(0) + tv1 := tv0.WithBuildIDNumber(1) + + // Update the userData for the workflow TQ by setting the current version to v0 + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv0, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv0.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv0.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf, tqTypeAct) + // Wait until all task queue partitions know that v0 is current. + s.waitForDeploymentDataPropagation(tv0, versionStatusCurrent, false, tqTypeWf, tqTypeAct) + + // Start a workflow on v0. + s.startWorkflow(tv0, nil) + + // Let a controlled poller complete the workflow task on v0 and schedule another workflow task. + s.pollWftAndHandle(tv0, false, nil, + func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { + s.NotNil(task) + resp := respondEmptyWft(tv0, false, vbUnpinned) + resp.ForceCreateNewWorkflowTask = true + return resp, nil + }) + + // Verify that the workflow is running on v0. + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(tv0, vbUnpinned, tv0.Deployment(), nil, nil) + }, 10*time.Second, 100*time.Millisecond) + + // Update the userData for the workflow TQ *only* by setting the current version to v1 + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + // Wait until all task queue partitions know that v1 is current. + s.waitForDeploymentDataPropagation(tv1, versionStatusCurrent, false, tqTypeWf) + + // Register the v1 worker in the activity TQ to prevent matching from thinking this as an independent unpinned activity + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, nil, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_INACTIVE, + }}, []string{}, tqTypeAct) + + // Let a controlled poller complete the workflow task on v1 and schedule an activity task + s.pollWftAndHandle(tv1, false, nil, + func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { + s.NotNil(task) + return respondWftWithActivities(tv1, tv1, false, vbUnpinned, "activity1"), nil + }) + + // Start an idle activity poller on v0. This poller should not receive any activity tasks + //nolint:testifylint + go s.idlePollActivity(tv0, true, ver3MinPollTime, "activity should not go to the old deployment") + + // Start a poller on v1 + activityTaskCh := make(chan struct{}, 1) + s.pollActivityAndHandle(tv1, activityTaskCh, + func(task *workflowservice.PollActivityTaskQueueResponse) (*workflowservice.RespondActivityTaskCompletedRequest, error) { + s.NotNil(task) + return respondActivity(), nil + }) + + s.WaitForChannel(ctx, activityTaskCh) + + // Verify that the workflow is still running on v1. + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(tv1, vbUnpinned, tv1.Deployment(), nil, nil) + }, 10*time.Second, 100*time.Millisecond) +} + +// Fallback of revision number mechanics: Independent activities are eventually consistent. +func (s *Versioning3Suite) TestActivityTQLags_IndependentActivityDispatchesToItsCurrentDeployment() { + s.T().Skip("This test is skipped because revision number mechanics does not prevent bouncing for independent activities.") + /* + The aim of this test is to show that an independent unpinned activity is dispatched to its current deployment + and this works even with revision number mechanics. + + Test plan: + - Use only one read and write partition. + - Update the userData, for workflow and activity TQ, by setting current version to v0. + - Let a controlled poller complete the workflow task on v0 and schedule another workflow task. + - Update the userData, this time for the workflow TQ only, by setting the current version to v1. + - Let a controlled poller complete the workflow task on v1 and schedule an activity task. + - The activity task should be dispatched to the current deployment of the activity TQ, which will be v0 in this case. + */ + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + s.OverrideDynamicConfig(dynamicconfig.MatchingNumTaskqueueReadPartitions, 1) + s.OverrideDynamicConfig(dynamicconfig.MatchingNumTaskqueueWritePartitions, 1) + s.OverrideDynamicConfig(dynamicconfig.UseRevisionNumberForWorkerVersioning, true) + + tv0 := testvars.New(s).WithBuildIDNumber(0) + tv1 := tv0.WithBuildIDNumber(1) + + // Update the userData for the workflow TQ by setting the current version to v0 + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv0, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv0.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 1, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv0.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf, tqTypeAct) + // Wait until all task queue partitions know that v0 is current. + s.waitForDeploymentDataPropagation(tv0, versionStatusCurrent, false, tqTypeWf, tqTypeAct) + + // Start a workflow on v0. + s.startWorkflow(tv0, nil) + + // Let a controlled poller complete the workflow task on v0 and schedule another workflow task. + s.pollWftAndHandle(tv0, false, nil, + func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { + s.NotNil(task) + resp := respondEmptyWft(tv0, false, vbUnpinned) + resp.ForceCreateNewWorkflowTask = true + return resp, nil + }) + + // Verify that the workflow is running on v0. + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(tv0, vbUnpinned, tv0.Deployment(), nil, nil) + }, 10*time.Second, 100*time.Millisecond) + + // Update the userData for the workflow TQ *only* by setting the current version to v1 + s.updateTaskQueueDeploymentDataWithRoutingConfig(tv1, &deploymentpb.RoutingConfig{ + CurrentDeploymentVersion: worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(tv1.DeploymentVersionString()), + CurrentVersionChangedTime: timestamp.TimePtr(time.Now()), + RevisionNumber: 2, + }, map[string]*deploymentspb.WorkerDeploymentVersionData{tv1.DeploymentVersion().GetBuildId(): &deploymentspb.WorkerDeploymentVersionData{ + Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT, + }}, []string{}, tqTypeWf) + // Wait until all task queue partitions know that v1 is current + s.waitForDeploymentDataPropagation(tv1, versionStatusCurrent, false, tqTypeWf) + + // Let a controlled poller complete the workflow task on v1 and schedule an activity task + s.pollWftAndHandle(tv1, false, nil, + func(task *workflowservice.PollWorkflowTaskQueueResponse) (*workflowservice.RespondWorkflowTaskCompletedRequest, error) { + s.NotNil(task) + return respondWftWithActivities(tv1, tv1, false, vbUnpinned, "activity1"), nil + }) + + // Start an idle activity poller on v1. This poller should not receive any activity tasks + //nolint:testifylint + go s.idlePollActivity(tv1, true, ver3MinPollTime, "activity should not go to the old deployment") + + // Start an activity poller on v0. + activityTaskCh := make(chan struct{}, 1) + s.pollActivityAndHandle(tv0, activityTaskCh, + func(task *workflowservice.PollActivityTaskQueueResponse) (*workflowservice.RespondActivityTaskCompletedRequest, error) { + s.NotNil(task) + return respondActivity(), nil + }) + + s.WaitForChannel(ctx, activityTaskCh) + + // Verify that the workflow is still running on v1. + s.EventuallyWithT(func(t *assert.CollectT) { + s.verifyWorkflowVersioning(tv1, vbUnpinned, tv1.Deployment(), nil, nil) + }, 10*time.Second, 100*time.Millisecond) +} + +// func (s *Versioning3Suite) TestRampChangeDoesNotTriggerTransition_WithRevisionNumberMechanics() {}