From 988ae024ffd7ba6542d2729460bbb9eee98c12f3 Mon Sep 17 00:00:00 2001 From: Yuri Date: Thu, 24 Jul 2025 10:46:24 -0700 Subject: [PATCH 1/5] stub for DescribeWorker API --- .../v1/request_response.go-helpers.pb.go | 74 +++ api/matchingservice/v1/request_response.pb.go | 504 +++++++++++------- api/matchingservice/v1/service.pb.go | 157 +++--- api/matchingservice/v1/service_grpc.pb.go | 41 ++ .../v1/service_grpc.pb.mock.go | 35 ++ client/frontend/client_gen.go | 10 + client/frontend/metric_client_gen.go | 14 + client/frontend/retryable_client_gen.go | 15 + client/matching/client_gen.go | 20 + client/matching/metric_client_gen.go | 14 + client/matching/retryable_client_gen.go | 15 + cmd/tools/genrpcwrappers/main.go | 3 +- common/api/metadata.go | 1 + .../logtags/matching_service_server_gen.go | 4 + .../logtags/workflow_service_server_gen.go | 4 + common/rpc/interceptor/redirection.go | 1 + common/rpc/interceptor/redirection_test.go | 1 + .../v1/service_grpc.pb.mock.go | 20 + .../matchingservice/v1/request_response.proto | 10 + .../api/matchingservice/v1/service.proto | 8 +- service/frontend/configs/quotas.go | 1 + service/frontend/configs/quotas_test.go | 1 + service/frontend/workflow_handler.go | 16 +- service/matching/configs/quotas.go | 1 + 24 files changed, 689 insertions(+), 281 deletions(-) diff --git a/api/matchingservice/v1/request_response.go-helpers.pb.go b/api/matchingservice/v1/request_response.go-helpers.pb.go index cbd247bd6d..d6f02df5fd 100644 --- a/api/matchingservice/v1/request_response.go-helpers.pb.go +++ b/api/matchingservice/v1/request_response.go-helpers.pb.go @@ -2668,3 +2668,77 @@ func (this *UpdateTaskQueueConfigResponse) Equal(that interface{}) bool { return proto.Equal(this, that1) } + +// Marshal an object of type DescribeWorkerRequest to the protobuf v3 wire format +func (val *DescribeWorkerRequest) Marshal() ([]byte, error) { + return proto.Marshal(val) +} + +// Unmarshal an object of type DescribeWorkerRequest from the protobuf v3 wire format +func (val *DescribeWorkerRequest) Unmarshal(buf []byte) error { + return proto.Unmarshal(buf, val) +} + +// Size returns the size of the object, in bytes, once serialized +func (val *DescribeWorkerRequest) Size() int { + return proto.Size(val) +} + +// Equal returns whether two DescribeWorkerRequest 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 *DescribeWorkerRequest) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + var that1 *DescribeWorkerRequest + switch t := that.(type) { + case *DescribeWorkerRequest: + that1 = t + case DescribeWorkerRequest: + that1 = &t + default: + return false + } + + return proto.Equal(this, that1) +} + +// Marshal an object of type DescribeWorkerResponse to the protobuf v3 wire format +func (val *DescribeWorkerResponse) Marshal() ([]byte, error) { + return proto.Marshal(val) +} + +// Unmarshal an object of type DescribeWorkerResponse from the protobuf v3 wire format +func (val *DescribeWorkerResponse) Unmarshal(buf []byte) error { + return proto.Unmarshal(buf, val) +} + +// Size returns the size of the object, in bytes, once serialized +func (val *DescribeWorkerResponse) Size() int { + return proto.Size(val) +} + +// Equal returns whether two DescribeWorkerResponse 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 *DescribeWorkerResponse) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + var that1 *DescribeWorkerResponse + switch t := that.(type) { + case *DescribeWorkerResponse: + that1 = t + case DescribeWorkerResponse: + that1 = &t + default: + return false + } + + return proto.Equal(this, that1) +} diff --git a/api/matchingservice/v1/request_response.pb.go b/api/matchingservice/v1/request_response.pb.go index 84032c25f6..661a774f79 100644 --- a/api/matchingservice/v1/request_response.pb.go +++ b/api/matchingservice/v1/request_response.pb.go @@ -4571,6 +4571,102 @@ func (x *UpdateTaskQueueConfigResponse) GetUpdatedTaskqueueConfig() *v14.TaskQue return nil } +type DescribeWorkerRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + Request *v1.DescribeWorkerRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DescribeWorkerRequest) Reset() { + *x = DescribeWorkerRequest{} + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DescribeWorkerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DescribeWorkerRequest) ProtoMessage() {} + +func (x *DescribeWorkerRequest) ProtoReflect() protoreflect.Message { + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[72] + 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 DescribeWorkerRequest.ProtoReflect.Descriptor instead. +func (*DescribeWorkerRequest) Descriptor() ([]byte, []int) { + return file_temporal_server_api_matchingservice_v1_request_response_proto_rawDescGZIP(), []int{72} +} + +func (x *DescribeWorkerRequest) GetNamespaceId() string { + if x != nil { + return x.NamespaceId + } + return "" +} + +func (x *DescribeWorkerRequest) GetRequest() *v1.DescribeWorkerRequest { + if x != nil { + return x.Request + } + return nil +} + +type DescribeWorkerResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + WorkersInfo *v114.WorkerInfo `protobuf:"bytes,1,opt,name=workers_info,json=workersInfo,proto3" json:"workers_info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DescribeWorkerResponse) Reset() { + *x = DescribeWorkerResponse{} + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DescribeWorkerResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DescribeWorkerResponse) ProtoMessage() {} + +func (x *DescribeWorkerResponse) ProtoReflect() protoreflect.Message { + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[73] + 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 DescribeWorkerResponse.ProtoReflect.Descriptor instead. +func (*DescribeWorkerResponse) Descriptor() ([]byte, []int) { + return file_temporal_server_api_matchingservice_v1_request_response_proto_rawDescGZIP(), []int{73} +} + +func (x *DescribeWorkerResponse) GetWorkersInfo() *v114.WorkerInfo { + if x != nil { + return x.WorkersInfo + } + return nil +} + // (-- api-linter: core::0123::resource-annotation=disabled --) type DescribeVersionedTaskQueuesRequest_VersionTaskQueue struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -4582,7 +4678,7 @@ type DescribeVersionedTaskQueuesRequest_VersionTaskQueue struct { func (x *DescribeVersionedTaskQueuesRequest_VersionTaskQueue) Reset() { *x = DescribeVersionedTaskQueuesRequest_VersionTaskQueue{} - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[73] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4594,7 +4690,7 @@ func (x *DescribeVersionedTaskQueuesRequest_VersionTaskQueue) String() string { func (*DescribeVersionedTaskQueuesRequest_VersionTaskQueue) ProtoMessage() {} func (x *DescribeVersionedTaskQueuesRequest_VersionTaskQueue) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[73] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4640,7 +4736,7 @@ type DescribeVersionedTaskQueuesResponse_VersionTaskQueue struct { func (x *DescribeVersionedTaskQueuesResponse_VersionTaskQueue) Reset() { *x = DescribeVersionedTaskQueuesResponse_VersionTaskQueue{} - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[74] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4652,7 +4748,7 @@ func (x *DescribeVersionedTaskQueuesResponse_VersionTaskQueue) String() string { func (*DescribeVersionedTaskQueuesResponse_VersionTaskQueue) ProtoMessage() {} func (x *DescribeVersionedTaskQueuesResponse_VersionTaskQueue) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[74] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4706,7 +4802,7 @@ type UpdateWorkerBuildIdCompatibilityRequest_ApplyPublicRequest struct { func (x *UpdateWorkerBuildIdCompatibilityRequest_ApplyPublicRequest) Reset() { *x = UpdateWorkerBuildIdCompatibilityRequest_ApplyPublicRequest{} - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[77] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4718,7 +4814,7 @@ func (x *UpdateWorkerBuildIdCompatibilityRequest_ApplyPublicRequest) String() st func (*UpdateWorkerBuildIdCompatibilityRequest_ApplyPublicRequest) ProtoMessage() {} func (x *UpdateWorkerBuildIdCompatibilityRequest_ApplyPublicRequest) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[77] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4754,7 +4850,7 @@ type UpdateWorkerBuildIdCompatibilityRequest_RemoveBuildIds struct { func (x *UpdateWorkerBuildIdCompatibilityRequest_RemoveBuildIds) Reset() { *x = UpdateWorkerBuildIdCompatibilityRequest_RemoveBuildIds{} - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[78] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4766,7 +4862,7 @@ func (x *UpdateWorkerBuildIdCompatibilityRequest_RemoveBuildIds) String() string func (*UpdateWorkerBuildIdCompatibilityRequest_RemoveBuildIds) ProtoMessage() {} func (x *UpdateWorkerBuildIdCompatibilityRequest_RemoveBuildIds) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[78] + mi := &file_temporal_server_api_matchingservice_v1_request_response_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5139,7 +5235,12 @@ const file_temporal_server_api_matchingservice_v1_request_response_proto_rawDesc "\fnamespace_id\x18\x01 \x01(\tR\vnamespaceId\x12u\n" + "\x17update_taskqueue_config\x18\x03 \x01(\v2=.temporal.api.workflowservice.v1.UpdateTaskQueueConfigRequestR\x15updateTaskqueueConfig\"\x85\x01\n" + "\x1dUpdateTaskQueueConfigResponse\x12d\n" + - "\x18updated_taskqueue_config\x18\x01 \x01(\v2*.temporal.api.taskqueue.v1.TaskQueueConfigR\x16updatedTaskqueueConfigB>ZZ temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest - 80, // 1: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution - 81, // 2: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_type:type_name -> temporal.api.common.v1.WorkflowType - 82, // 3: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.query:type_name -> temporal.api.query.v1.WorkflowQuery - 83, // 4: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.transient_workflow_task:type_name -> temporal.server.api.history.v1.TransientWorkflowTaskInfo - 84, // 5: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_execution_task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 85, // 6: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.scheduled_time:type_name -> google.protobuf.Timestamp - 85, // 7: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.started_time:type_name -> google.protobuf.Timestamp - 72, // 8: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.queries:type_name -> temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.QueriesEntry - 86, // 9: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.messages:type_name -> temporal.api.protocol.v1.Message - 87, // 10: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.history:type_name -> temporal.api.history.v1.History - 88, // 11: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.poller_scaling_decision:type_name -> temporal.api.taskqueue.v1.PollerScalingDecision - 89, // 12: temporal.server.api.matchingservice.v1.PollActivityTaskQueueRequest.poll_request:type_name -> temporal.api.workflowservice.v1.PollActivityTaskQueueRequest - 80, // 13: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution - 90, // 14: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.activity_type:type_name -> temporal.api.common.v1.ActivityType - 91, // 15: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.input:type_name -> temporal.api.common.v1.Payloads - 85, // 16: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.scheduled_time:type_name -> google.protobuf.Timestamp - 92, // 17: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.schedule_to_close_timeout:type_name -> google.protobuf.Duration - 85, // 18: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.started_time:type_name -> google.protobuf.Timestamp - 92, // 19: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.start_to_close_timeout:type_name -> google.protobuf.Duration - 92, // 20: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.heartbeat_timeout:type_name -> google.protobuf.Duration - 85, // 21: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.current_attempt_scheduled_time:type_name -> google.protobuf.Timestamp - 91, // 22: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.heartbeat_details:type_name -> temporal.api.common.v1.Payloads - 81, // 23: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.workflow_type:type_name -> temporal.api.common.v1.WorkflowType - 93, // 24: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.header:type_name -> temporal.api.common.v1.Header - 88, // 25: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.poller_scaling_decision:type_name -> temporal.api.taskqueue.v1.PollerScalingDecision - 94, // 26: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.priority:type_name -> temporal.api.common.v1.Priority - 95, // 27: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.retry_policy:type_name -> temporal.api.common.v1.RetryPolicy - 80, // 28: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 84, // 29: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 92, // 30: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.schedule_to_start_timeout:type_name -> google.protobuf.Duration - 96, // 31: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.clock:type_name -> temporal.server.api.clock.v1.VectorClock - 97, // 32: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective - 98, // 33: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo - 94, // 34: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.priority:type_name -> temporal.api.common.v1.Priority - 80, // 35: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 84, // 36: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 92, // 37: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.schedule_to_start_timeout:type_name -> google.protobuf.Duration - 96, // 38: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.clock:type_name -> temporal.server.api.clock.v1.VectorClock - 97, // 39: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective - 98, // 40: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo - 94, // 41: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.priority:type_name -> temporal.api.common.v1.Priority - 84, // 42: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 99, // 43: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.query_request:type_name -> temporal.api.workflowservice.v1.QueryWorkflowRequest - 97, // 44: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective - 98, // 45: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo - 94, // 46: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.priority:type_name -> temporal.api.common.v1.Priority - 91, // 47: temporal.server.api.matchingservice.v1.QueryWorkflowResponse.query_result:type_name -> temporal.api.common.v1.Payloads - 100, // 48: temporal.server.api.matchingservice.v1.QueryWorkflowResponse.query_rejected:type_name -> temporal.api.query.v1.QueryRejected - 84, // 49: temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 101, // 50: temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedRequest.completed_request:type_name -> temporal.api.workflowservice.v1.RespondQueryTaskCompletedRequest - 102, // 51: temporal.server.api.matchingservice.v1.CancelOutstandingPollRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 84, // 52: temporal.server.api.matchingservice.v1.CancelOutstandingPollRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 103, // 53: temporal.server.api.matchingservice.v1.DescribeTaskQueueRequest.desc_request:type_name -> temporal.api.workflowservice.v1.DescribeTaskQueueRequest - 104, // 54: temporal.server.api.matchingservice.v1.DescribeTaskQueueRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 105, // 55: temporal.server.api.matchingservice.v1.DescribeTaskQueueResponse.desc_response:type_name -> temporal.api.workflowservice.v1.DescribeTaskQueueResponse - 102, // 56: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 84, // 57: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 104, // 58: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 73, // 59: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.version_task_queues:type_name -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.VersionTaskQueue - 74, // 60: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.version_task_queues:type_name -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue - 106, // 61: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition - 107, // 62: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionRequest.versions:type_name -> temporal.api.taskqueue.v1.TaskQueueVersionSelection - 76, // 63: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse.versions_info_internal:type_name -> temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry - 84, // 64: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 108, // 65: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsResponse.activity_task_queue_partitions:type_name -> temporal.api.taskqueue.v1.TaskQueuePartitionMetadata - 108, // 66: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsResponse.workflow_task_queue_partitions:type_name -> temporal.api.taskqueue.v1.TaskQueuePartitionMetadata - 77, // 67: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.apply_public_request:type_name -> temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.ApplyPublicRequest - 78, // 68: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.remove_build_ids:type_name -> temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.RemoveBuildIds - 109, // 69: temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesRequest.request:type_name -> temporal.api.workflowservice.v1.GetWorkerVersioningRulesRequest - 110, // 70: temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesResponse.response:type_name -> temporal.api.workflowservice.v1.GetWorkerVersioningRulesResponse - 111, // 71: temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesRequest.request:type_name -> temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesRequest - 112, // 72: temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesResponse.response:type_name -> temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesResponse - 113, // 73: temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityRequest.request:type_name -> temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityRequest - 114, // 74: temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityResponse.response:type_name -> temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityResponse - 102, // 75: temporal.server.api.matchingservice.v1.GetTaskQueueUserDataRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 115, // 76: temporal.server.api.matchingservice.v1.GetTaskQueueUserDataResponse.user_data:type_name -> temporal.server.api.persistence.v1.VersionedTaskQueueUserData - 102, // 77: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 102, // 78: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.task_queue_types:type_name -> temporal.api.enums.v1.TaskQueueType - 116, // 79: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.deployment:type_name -> temporal.api.deployment.v1.Deployment - 117, // 80: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData - 118, // 81: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.update_version_data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData - 104, // 82: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.forget_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 119, // 83: temporal.server.api.matchingservice.v1.ApplyTaskQueueUserDataReplicationEventRequest.user_data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData - 106, // 84: temporal.server.api.matchingservice.v1.ForceLoadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition - 102, // 85: temporal.server.api.matchingservice.v1.ForceUnloadTaskQueueRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 106, // 86: temporal.server.api.matchingservice.v1.ForceUnloadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition - 115, // 87: temporal.server.api.matchingservice.v1.UpdateTaskQueueUserDataRequest.user_data:type_name -> temporal.server.api.persistence.v1.VersionedTaskQueueUserData - 119, // 88: temporal.server.api.matchingservice.v1.ReplicateTaskQueueUserDataRequest.user_data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData - 84, // 89: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 120, // 90: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.request:type_name -> temporal.api.nexus.v1.Request - 98, // 91: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo - 121, // 92: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.handler_error:type_name -> temporal.api.nexus.v1.HandlerError - 122, // 93: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.response:type_name -> temporal.api.nexus.v1.Response - 123, // 94: temporal.server.api.matchingservice.v1.PollNexusTaskQueueRequest.request:type_name -> temporal.api.workflowservice.v1.PollNexusTaskQueueRequest - 124, // 95: temporal.server.api.matchingservice.v1.PollNexusTaskQueueResponse.response:type_name -> temporal.api.workflowservice.v1.PollNexusTaskQueueResponse - 84, // 96: temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 125, // 97: temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedRequest.request:type_name -> temporal.api.workflowservice.v1.RespondNexusTaskCompletedRequest - 84, // 98: temporal.server.api.matchingservice.v1.RespondNexusTaskFailedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue - 126, // 99: temporal.server.api.matchingservice.v1.RespondNexusTaskFailedRequest.request:type_name -> temporal.api.workflowservice.v1.RespondNexusTaskFailedRequest - 127, // 100: temporal.server.api.matchingservice.v1.CreateNexusEndpointRequest.spec:type_name -> temporal.server.api.persistence.v1.NexusEndpointSpec - 128, // 101: temporal.server.api.matchingservice.v1.CreateNexusEndpointResponse.entry:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry - 127, // 102: temporal.server.api.matchingservice.v1.UpdateNexusEndpointRequest.spec:type_name -> temporal.server.api.persistence.v1.NexusEndpointSpec - 128, // 103: temporal.server.api.matchingservice.v1.UpdateNexusEndpointResponse.entry:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry - 128, // 104: temporal.server.api.matchingservice.v1.ListNexusEndpointsResponse.entries:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry - 129, // 105: temporal.server.api.matchingservice.v1.RecordWorkerHeartbeatRequest.heartbeart_request:type_name -> temporal.api.workflowservice.v1.RecordWorkerHeartbeatRequest - 130, // 106: temporal.server.api.matchingservice.v1.ListWorkersRequest.list_request:type_name -> temporal.api.workflowservice.v1.ListWorkersRequest - 131, // 107: temporal.server.api.matchingservice.v1.ListWorkersResponse.workers_info:type_name -> temporal.api.worker.v1.WorkerInfo - 132, // 108: temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigRequest.update_taskqueue_config:type_name -> temporal.api.workflowservice.v1.UpdateTaskQueueConfigRequest - 133, // 109: temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigResponse.updated_taskqueue_config:type_name -> temporal.api.taskqueue.v1.TaskQueueConfig - 82, // 110: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.QueriesEntry.value:type_name -> temporal.api.query.v1.WorkflowQuery - 102, // 111: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType - 102, // 112: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType - 134, // 113: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.stats:type_name -> temporal.api.taskqueue.v1.TaskQueueStats - 75, // 114: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.stats_by_priority_key:type_name -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.StatsByPriorityKeyEntry - 134, // 115: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.StatsByPriorityKeyEntry.value:type_name -> temporal.api.taskqueue.v1.TaskQueueStats - 135, // 116: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry.value:type_name -> temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal - 136, // 117: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.ApplyPublicRequest.request:type_name -> temporal.api.workflowservice.v1.UpdateWorkerBuildIdCompatibilityRequest - 118, // [118:118] is the sub-list for method output_type - 118, // [118:118] is the sub-list for method input_type - 118, // [118:118] is the sub-list for extension type_name - 118, // [118:118] is the sub-list for extension extendee - 0, // [0:118] is the sub-list for field type_name + 81, // 0: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueRequest.poll_request:type_name -> temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest + 82, // 1: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution + 83, // 2: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_type:type_name -> temporal.api.common.v1.WorkflowType + 84, // 3: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.query:type_name -> temporal.api.query.v1.WorkflowQuery + 85, // 4: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.transient_workflow_task:type_name -> temporal.server.api.history.v1.TransientWorkflowTaskInfo + 86, // 5: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.workflow_execution_task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 87, // 6: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.scheduled_time:type_name -> google.protobuf.Timestamp + 87, // 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 + 88, // 9: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.messages:type_name -> temporal.api.protocol.v1.Message + 89, // 10: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.history:type_name -> temporal.api.history.v1.History + 90, // 11: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.poller_scaling_decision:type_name -> temporal.api.taskqueue.v1.PollerScalingDecision + 91, // 12: temporal.server.api.matchingservice.v1.PollActivityTaskQueueRequest.poll_request:type_name -> temporal.api.workflowservice.v1.PollActivityTaskQueueRequest + 82, // 13: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution + 92, // 14: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.activity_type:type_name -> temporal.api.common.v1.ActivityType + 93, // 15: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.input:type_name -> temporal.api.common.v1.Payloads + 87, // 16: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.scheduled_time:type_name -> google.protobuf.Timestamp + 94, // 17: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.schedule_to_close_timeout:type_name -> google.protobuf.Duration + 87, // 18: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.started_time:type_name -> google.protobuf.Timestamp + 94, // 19: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.start_to_close_timeout:type_name -> google.protobuf.Duration + 94, // 20: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.heartbeat_timeout:type_name -> google.protobuf.Duration + 87, // 21: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.current_attempt_scheduled_time:type_name -> google.protobuf.Timestamp + 93, // 22: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.heartbeat_details:type_name -> temporal.api.common.v1.Payloads + 83, // 23: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.workflow_type:type_name -> temporal.api.common.v1.WorkflowType + 95, // 24: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.header:type_name -> temporal.api.common.v1.Header + 90, // 25: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.poller_scaling_decision:type_name -> temporal.api.taskqueue.v1.PollerScalingDecision + 96, // 26: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.priority:type_name -> temporal.api.common.v1.Priority + 97, // 27: temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse.retry_policy:type_name -> temporal.api.common.v1.RetryPolicy + 82, // 28: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 86, // 29: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 94, // 30: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.schedule_to_start_timeout:type_name -> google.protobuf.Duration + 98, // 31: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.clock:type_name -> temporal.server.api.clock.v1.VectorClock + 99, // 32: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective + 100, // 33: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo + 96, // 34: temporal.server.api.matchingservice.v1.AddWorkflowTaskRequest.priority:type_name -> temporal.api.common.v1.Priority + 82, // 35: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 86, // 36: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 94, // 37: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.schedule_to_start_timeout:type_name -> google.protobuf.Duration + 98, // 38: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.clock:type_name -> temporal.server.api.clock.v1.VectorClock + 99, // 39: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective + 100, // 40: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo + 96, // 41: temporal.server.api.matchingservice.v1.AddActivityTaskRequest.priority:type_name -> temporal.api.common.v1.Priority + 86, // 42: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 101, // 43: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.query_request:type_name -> temporal.api.workflowservice.v1.QueryWorkflowRequest + 99, // 44: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.version_directive:type_name -> temporal.server.api.taskqueue.v1.TaskVersionDirective + 100, // 45: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo + 96, // 46: temporal.server.api.matchingservice.v1.QueryWorkflowRequest.priority:type_name -> temporal.api.common.v1.Priority + 93, // 47: temporal.server.api.matchingservice.v1.QueryWorkflowResponse.query_result:type_name -> temporal.api.common.v1.Payloads + 102, // 48: temporal.server.api.matchingservice.v1.QueryWorkflowResponse.query_rejected:type_name -> temporal.api.query.v1.QueryRejected + 86, // 49: temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 103, // 50: temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedRequest.completed_request:type_name -> temporal.api.workflowservice.v1.RespondQueryTaskCompletedRequest + 104, // 51: temporal.server.api.matchingservice.v1.CancelOutstandingPollRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 86, // 52: temporal.server.api.matchingservice.v1.CancelOutstandingPollRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 105, // 53: temporal.server.api.matchingservice.v1.DescribeTaskQueueRequest.desc_request:type_name -> temporal.api.workflowservice.v1.DescribeTaskQueueRequest + 106, // 54: temporal.server.api.matchingservice.v1.DescribeTaskQueueRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 107, // 55: temporal.server.api.matchingservice.v1.DescribeTaskQueueResponse.desc_response:type_name -> temporal.api.workflowservice.v1.DescribeTaskQueueResponse + 104, // 56: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 86, // 57: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 106, // 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 + 108, // 61: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition + 109, // 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 + 86, // 64: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 110, // 65: temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsResponse.activity_task_queue_partitions:type_name -> temporal.api.taskqueue.v1.TaskQueuePartitionMetadata + 110, // 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 + 111, // 69: temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesRequest.request:type_name -> temporal.api.workflowservice.v1.GetWorkerVersioningRulesRequest + 112, // 70: temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesResponse.response:type_name -> temporal.api.workflowservice.v1.GetWorkerVersioningRulesResponse + 113, // 71: temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesRequest.request:type_name -> temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesRequest + 114, // 72: temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesResponse.response:type_name -> temporal.api.workflowservice.v1.UpdateWorkerVersioningRulesResponse + 115, // 73: temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityRequest.request:type_name -> temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityRequest + 116, // 74: temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityResponse.response:type_name -> temporal.api.workflowservice.v1.GetWorkerBuildIdCompatibilityResponse + 104, // 75: temporal.server.api.matchingservice.v1.GetTaskQueueUserDataRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 117, // 76: temporal.server.api.matchingservice.v1.GetTaskQueueUserDataResponse.user_data:type_name -> temporal.server.api.persistence.v1.VersionedTaskQueueUserData + 104, // 77: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 104, // 78: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.task_queue_types:type_name -> temporal.api.enums.v1.TaskQueueType + 118, // 79: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.deployment:type_name -> temporal.api.deployment.v1.Deployment + 119, // 80: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.data:type_name -> temporal.server.api.deployment.v1.TaskQueueData + 120, // 81: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.update_version_data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData + 106, // 82: temporal.server.api.matchingservice.v1.SyncDeploymentUserDataRequest.forget_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 121, // 83: temporal.server.api.matchingservice.v1.ApplyTaskQueueUserDataReplicationEventRequest.user_data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData + 108, // 84: temporal.server.api.matchingservice.v1.ForceLoadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition + 104, // 85: temporal.server.api.matchingservice.v1.ForceUnloadTaskQueueRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 108, // 86: temporal.server.api.matchingservice.v1.ForceUnloadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition + 117, // 87: temporal.server.api.matchingservice.v1.UpdateTaskQueueUserDataRequest.user_data:type_name -> temporal.server.api.persistence.v1.VersionedTaskQueueUserData + 121, // 88: temporal.server.api.matchingservice.v1.ReplicateTaskQueueUserDataRequest.user_data:type_name -> temporal.server.api.persistence.v1.TaskQueueUserData + 86, // 89: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 122, // 90: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.request:type_name -> temporal.api.nexus.v1.Request + 100, // 91: temporal.server.api.matchingservice.v1.DispatchNexusTaskRequest.forward_info:type_name -> temporal.server.api.taskqueue.v1.TaskForwardInfo + 123, // 92: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.handler_error:type_name -> temporal.api.nexus.v1.HandlerError + 124, // 93: temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse.response:type_name -> temporal.api.nexus.v1.Response + 125, // 94: temporal.server.api.matchingservice.v1.PollNexusTaskQueueRequest.request:type_name -> temporal.api.workflowservice.v1.PollNexusTaskQueueRequest + 126, // 95: temporal.server.api.matchingservice.v1.PollNexusTaskQueueResponse.response:type_name -> temporal.api.workflowservice.v1.PollNexusTaskQueueResponse + 86, // 96: temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 127, // 97: temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedRequest.request:type_name -> temporal.api.workflowservice.v1.RespondNexusTaskCompletedRequest + 86, // 98: temporal.server.api.matchingservice.v1.RespondNexusTaskFailedRequest.task_queue:type_name -> temporal.api.taskqueue.v1.TaskQueue + 128, // 99: temporal.server.api.matchingservice.v1.RespondNexusTaskFailedRequest.request:type_name -> temporal.api.workflowservice.v1.RespondNexusTaskFailedRequest + 129, // 100: temporal.server.api.matchingservice.v1.CreateNexusEndpointRequest.spec:type_name -> temporal.server.api.persistence.v1.NexusEndpointSpec + 130, // 101: temporal.server.api.matchingservice.v1.CreateNexusEndpointResponse.entry:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry + 129, // 102: temporal.server.api.matchingservice.v1.UpdateNexusEndpointRequest.spec:type_name -> temporal.server.api.persistence.v1.NexusEndpointSpec + 130, // 103: temporal.server.api.matchingservice.v1.UpdateNexusEndpointResponse.entry:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry + 130, // 104: temporal.server.api.matchingservice.v1.ListNexusEndpointsResponse.entries:type_name -> temporal.server.api.persistence.v1.NexusEndpointEntry + 131, // 105: temporal.server.api.matchingservice.v1.RecordWorkerHeartbeatRequest.heartbeart_request:type_name -> temporal.api.workflowservice.v1.RecordWorkerHeartbeatRequest + 132, // 106: temporal.server.api.matchingservice.v1.ListWorkersRequest.list_request:type_name -> temporal.api.workflowservice.v1.ListWorkersRequest + 133, // 107: temporal.server.api.matchingservice.v1.ListWorkersResponse.workers_info:type_name -> temporal.api.worker.v1.WorkerInfo + 134, // 108: temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigRequest.update_taskqueue_config:type_name -> temporal.api.workflowservice.v1.UpdateTaskQueueConfigRequest + 135, // 109: temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigResponse.updated_taskqueue_config:type_name -> temporal.api.taskqueue.v1.TaskQueueConfig + 136, // 110: temporal.server.api.matchingservice.v1.DescribeWorkerRequest.request:type_name -> temporal.api.workflowservice.v1.DescribeWorkerRequest + 133, // 111: temporal.server.api.matchingservice.v1.DescribeWorkerResponse.workers_info:type_name -> temporal.api.worker.v1.WorkerInfo + 84, // 112: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.QueriesEntry.value:type_name -> temporal.api.query.v1.WorkflowQuery + 104, // 113: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType + 104, // 114: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType + 137, // 115: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.stats:type_name -> temporal.api.taskqueue.v1.TaskQueueStats + 77, // 116: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.stats_by_priority_key:type_name -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.StatsByPriorityKeyEntry + 137, // 117: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.StatsByPriorityKeyEntry.value:type_name -> temporal.api.taskqueue.v1.TaskQueueStats + 138, // 118: temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry.value:type_name -> temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal + 139, // 119: temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityRequest.ApplyPublicRequest.request:type_name -> temporal.api.workflowservice.v1.UpdateWorkerBuildIdCompatibilityRequest + 120, // [120:120] is the sub-list for method output_type + 120, // [120:120] is the sub-list for method input_type + 120, // [120:120] is the sub-list for extension type_name + 120, // [120:120] is the sub-list for extension extendee + 0, // [0:120] is the sub-list for field type_name } func init() { file_temporal_server_api_matchingservice_v1_request_response_proto_init() } @@ -5449,7 +5555,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: 79, + NumMessages: 81, NumExtensions: 0, NumServices: 0, }, diff --git a/api/matchingservice/v1/service.pb.go b/api/matchingservice/v1/service.pb.go index 35ca7fccc2..e5858d9593 100644 --- a/api/matchingservice/v1/service.pb.go +++ b/api/matchingservice/v1/service.pb.go @@ -25,7 +25,7 @@ var File_temporal_server_api_matchingservice_v1_service_proto protoreflect.FileD const file_temporal_server_api_matchingservice_v1_service_proto_rawDesc = "" + "\n" + - "4temporal/server/api/matchingservice/v1/service.proto\x12&temporal.server.api.matchingservice.v1\x1a=temporal/server/api/matchingservice/v1/request_response.proto2\xf70\n" + + "4temporal/server/api/matchingservice/v1/service.proto\x12&temporal.server.api.matchingservice.v1\x1a=temporal/server/api/matchingservice/v1/request_response.proto2\x8b2\n" + "\x0fMatchingService\x12\xa6\x01\n" + "\x15PollWorkflowTaskQueue\x12D.temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueRequest\x1aE.temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse\"\x00\x12\xa6\x01\n" + "\x15PollActivityTaskQueue\x12D.temporal.server.api.matchingservice.v1.PollActivityTaskQueueRequest\x1aE.temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse\"\x00\x12\x94\x01\n" + @@ -62,7 +62,8 @@ const file_temporal_server_api_matchingservice_v1_service_proto_rawDesc = "" + "\x12ListNexusEndpoints\x12A.temporal.server.api.matchingservice.v1.ListNexusEndpointsRequest\x1aB.temporal.server.api.matchingservice.v1.ListNexusEndpointsResponse\"\x00\x12\xa6\x01\n" + "\x15RecordWorkerHeartbeat\x12D.temporal.server.api.matchingservice.v1.RecordWorkerHeartbeatRequest\x1aE.temporal.server.api.matchingservice.v1.RecordWorkerHeartbeatResponse\"\x00\x12\x88\x01\n" + "\vListWorkers\x12:.temporal.server.api.matchingservice.v1.ListWorkersRequest\x1a;.temporal.server.api.matchingservice.v1.ListWorkersResponse\"\x00\x12\xa6\x01\n" + - "\x15UpdateTaskQueueConfig\x12D.temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigRequest\x1aE.temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigResponse\"\x00B>Z.temporal.server.api.matchingservice.v1.DescribeWorkerResponse\"\x00B>Z temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueRequest @@ -175,44 +178,46 @@ var file_temporal_server_api_matchingservice_v1_service_proto_depIdxs = []int32{ 33, // 33: temporal.server.api.matchingservice.v1.MatchingService.RecordWorkerHeartbeat:input_type -> temporal.server.api.matchingservice.v1.RecordWorkerHeartbeatRequest 34, // 34: temporal.server.api.matchingservice.v1.MatchingService.ListWorkers:input_type -> temporal.server.api.matchingservice.v1.ListWorkersRequest 35, // 35: temporal.server.api.matchingservice.v1.MatchingService.UpdateTaskQueueConfig:input_type -> temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigRequest - 36, // 36: temporal.server.api.matchingservice.v1.MatchingService.PollWorkflowTaskQueue:output_type -> temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse - 37, // 37: temporal.server.api.matchingservice.v1.MatchingService.PollActivityTaskQueue:output_type -> temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse - 38, // 38: temporal.server.api.matchingservice.v1.MatchingService.AddWorkflowTask:output_type -> temporal.server.api.matchingservice.v1.AddWorkflowTaskResponse - 39, // 39: temporal.server.api.matchingservice.v1.MatchingService.AddActivityTask:output_type -> temporal.server.api.matchingservice.v1.AddActivityTaskResponse - 40, // 40: temporal.server.api.matchingservice.v1.MatchingService.QueryWorkflow:output_type -> temporal.server.api.matchingservice.v1.QueryWorkflowResponse - 41, // 41: temporal.server.api.matchingservice.v1.MatchingService.RespondQueryTaskCompleted:output_type -> temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedResponse - 42, // 42: temporal.server.api.matchingservice.v1.MatchingService.DispatchNexusTask:output_type -> temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse - 43, // 43: temporal.server.api.matchingservice.v1.MatchingService.PollNexusTaskQueue:output_type -> temporal.server.api.matchingservice.v1.PollNexusTaskQueueResponse - 44, // 44: temporal.server.api.matchingservice.v1.MatchingService.RespondNexusTaskCompleted:output_type -> temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedResponse - 45, // 45: temporal.server.api.matchingservice.v1.MatchingService.RespondNexusTaskFailed:output_type -> temporal.server.api.matchingservice.v1.RespondNexusTaskFailedResponse - 46, // 46: temporal.server.api.matchingservice.v1.MatchingService.CancelOutstandingPoll:output_type -> temporal.server.api.matchingservice.v1.CancelOutstandingPollResponse - 47, // 47: temporal.server.api.matchingservice.v1.MatchingService.DescribeTaskQueue:output_type -> temporal.server.api.matchingservice.v1.DescribeTaskQueueResponse - 48, // 48: temporal.server.api.matchingservice.v1.MatchingService.DescribeTaskQueuePartition:output_type -> temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse - 49, // 49: temporal.server.api.matchingservice.v1.MatchingService.DescribeVersionedTaskQueues:output_type -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse - 50, // 50: temporal.server.api.matchingservice.v1.MatchingService.ListTaskQueuePartitions:output_type -> temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsResponse - 51, // 51: temporal.server.api.matchingservice.v1.MatchingService.UpdateWorkerBuildIdCompatibility:output_type -> temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityResponse - 52, // 52: temporal.server.api.matchingservice.v1.MatchingService.GetWorkerBuildIdCompatibility:output_type -> temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityResponse - 53, // 53: temporal.server.api.matchingservice.v1.MatchingService.GetTaskQueueUserData:output_type -> temporal.server.api.matchingservice.v1.GetTaskQueueUserDataResponse - 54, // 54: temporal.server.api.matchingservice.v1.MatchingService.UpdateWorkerVersioningRules:output_type -> temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesResponse - 55, // 55: temporal.server.api.matchingservice.v1.MatchingService.GetWorkerVersioningRules:output_type -> temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesResponse - 56, // 56: temporal.server.api.matchingservice.v1.MatchingService.SyncDeploymentUserData:output_type -> temporal.server.api.matchingservice.v1.SyncDeploymentUserDataResponse - 57, // 57: temporal.server.api.matchingservice.v1.MatchingService.ApplyTaskQueueUserDataReplicationEvent:output_type -> temporal.server.api.matchingservice.v1.ApplyTaskQueueUserDataReplicationEventResponse - 58, // 58: temporal.server.api.matchingservice.v1.MatchingService.GetBuildIdTaskQueueMapping:output_type -> temporal.server.api.matchingservice.v1.GetBuildIdTaskQueueMappingResponse - 59, // 59: temporal.server.api.matchingservice.v1.MatchingService.ForceLoadTaskQueuePartition:output_type -> temporal.server.api.matchingservice.v1.ForceLoadTaskQueuePartitionResponse - 60, // 60: temporal.server.api.matchingservice.v1.MatchingService.ForceUnloadTaskQueue:output_type -> temporal.server.api.matchingservice.v1.ForceUnloadTaskQueueResponse - 61, // 61: temporal.server.api.matchingservice.v1.MatchingService.ForceUnloadTaskQueuePartition:output_type -> temporal.server.api.matchingservice.v1.ForceUnloadTaskQueuePartitionResponse - 62, // 62: temporal.server.api.matchingservice.v1.MatchingService.UpdateTaskQueueUserData:output_type -> temporal.server.api.matchingservice.v1.UpdateTaskQueueUserDataResponse - 63, // 63: temporal.server.api.matchingservice.v1.MatchingService.ReplicateTaskQueueUserData:output_type -> temporal.server.api.matchingservice.v1.ReplicateTaskQueueUserDataResponse - 64, // 64: temporal.server.api.matchingservice.v1.MatchingService.CheckTaskQueueUserDataPropagation:output_type -> temporal.server.api.matchingservice.v1.CheckTaskQueueUserDataPropagationResponse - 65, // 65: temporal.server.api.matchingservice.v1.MatchingService.CreateNexusEndpoint:output_type -> temporal.server.api.matchingservice.v1.CreateNexusEndpointResponse - 66, // 66: temporal.server.api.matchingservice.v1.MatchingService.UpdateNexusEndpoint:output_type -> temporal.server.api.matchingservice.v1.UpdateNexusEndpointResponse - 67, // 67: temporal.server.api.matchingservice.v1.MatchingService.DeleteNexusEndpoint:output_type -> temporal.server.api.matchingservice.v1.DeleteNexusEndpointResponse - 68, // 68: temporal.server.api.matchingservice.v1.MatchingService.ListNexusEndpoints:output_type -> temporal.server.api.matchingservice.v1.ListNexusEndpointsResponse - 69, // 69: temporal.server.api.matchingservice.v1.MatchingService.RecordWorkerHeartbeat:output_type -> temporal.server.api.matchingservice.v1.RecordWorkerHeartbeatResponse - 70, // 70: temporal.server.api.matchingservice.v1.MatchingService.ListWorkers:output_type -> temporal.server.api.matchingservice.v1.ListWorkersResponse - 71, // 71: temporal.server.api.matchingservice.v1.MatchingService.UpdateTaskQueueConfig:output_type -> temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigResponse - 36, // [36:72] is the sub-list for method output_type - 0, // [0:36] is the sub-list for method input_type + 36, // 36: temporal.server.api.matchingservice.v1.MatchingService.DescribeWorker:input_type -> temporal.server.api.matchingservice.v1.DescribeWorkerRequest + 37, // 37: temporal.server.api.matchingservice.v1.MatchingService.PollWorkflowTaskQueue:output_type -> temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse + 38, // 38: temporal.server.api.matchingservice.v1.MatchingService.PollActivityTaskQueue:output_type -> temporal.server.api.matchingservice.v1.PollActivityTaskQueueResponse + 39, // 39: temporal.server.api.matchingservice.v1.MatchingService.AddWorkflowTask:output_type -> temporal.server.api.matchingservice.v1.AddWorkflowTaskResponse + 40, // 40: temporal.server.api.matchingservice.v1.MatchingService.AddActivityTask:output_type -> temporal.server.api.matchingservice.v1.AddActivityTaskResponse + 41, // 41: temporal.server.api.matchingservice.v1.MatchingService.QueryWorkflow:output_type -> temporal.server.api.matchingservice.v1.QueryWorkflowResponse + 42, // 42: temporal.server.api.matchingservice.v1.MatchingService.RespondQueryTaskCompleted:output_type -> temporal.server.api.matchingservice.v1.RespondQueryTaskCompletedResponse + 43, // 43: temporal.server.api.matchingservice.v1.MatchingService.DispatchNexusTask:output_type -> temporal.server.api.matchingservice.v1.DispatchNexusTaskResponse + 44, // 44: temporal.server.api.matchingservice.v1.MatchingService.PollNexusTaskQueue:output_type -> temporal.server.api.matchingservice.v1.PollNexusTaskQueueResponse + 45, // 45: temporal.server.api.matchingservice.v1.MatchingService.RespondNexusTaskCompleted:output_type -> temporal.server.api.matchingservice.v1.RespondNexusTaskCompletedResponse + 46, // 46: temporal.server.api.matchingservice.v1.MatchingService.RespondNexusTaskFailed:output_type -> temporal.server.api.matchingservice.v1.RespondNexusTaskFailedResponse + 47, // 47: temporal.server.api.matchingservice.v1.MatchingService.CancelOutstandingPoll:output_type -> temporal.server.api.matchingservice.v1.CancelOutstandingPollResponse + 48, // 48: temporal.server.api.matchingservice.v1.MatchingService.DescribeTaskQueue:output_type -> temporal.server.api.matchingservice.v1.DescribeTaskQueueResponse + 49, // 49: temporal.server.api.matchingservice.v1.MatchingService.DescribeTaskQueuePartition:output_type -> temporal.server.api.matchingservice.v1.DescribeTaskQueuePartitionResponse + 50, // 50: temporal.server.api.matchingservice.v1.MatchingService.DescribeVersionedTaskQueues:output_type -> temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse + 51, // 51: temporal.server.api.matchingservice.v1.MatchingService.ListTaskQueuePartitions:output_type -> temporal.server.api.matchingservice.v1.ListTaskQueuePartitionsResponse + 52, // 52: temporal.server.api.matchingservice.v1.MatchingService.UpdateWorkerBuildIdCompatibility:output_type -> temporal.server.api.matchingservice.v1.UpdateWorkerBuildIdCompatibilityResponse + 53, // 53: temporal.server.api.matchingservice.v1.MatchingService.GetWorkerBuildIdCompatibility:output_type -> temporal.server.api.matchingservice.v1.GetWorkerBuildIdCompatibilityResponse + 54, // 54: temporal.server.api.matchingservice.v1.MatchingService.GetTaskQueueUserData:output_type -> temporal.server.api.matchingservice.v1.GetTaskQueueUserDataResponse + 55, // 55: temporal.server.api.matchingservice.v1.MatchingService.UpdateWorkerVersioningRules:output_type -> temporal.server.api.matchingservice.v1.UpdateWorkerVersioningRulesResponse + 56, // 56: temporal.server.api.matchingservice.v1.MatchingService.GetWorkerVersioningRules:output_type -> temporal.server.api.matchingservice.v1.GetWorkerVersioningRulesResponse + 57, // 57: temporal.server.api.matchingservice.v1.MatchingService.SyncDeploymentUserData:output_type -> temporal.server.api.matchingservice.v1.SyncDeploymentUserDataResponse + 58, // 58: temporal.server.api.matchingservice.v1.MatchingService.ApplyTaskQueueUserDataReplicationEvent:output_type -> temporal.server.api.matchingservice.v1.ApplyTaskQueueUserDataReplicationEventResponse + 59, // 59: temporal.server.api.matchingservice.v1.MatchingService.GetBuildIdTaskQueueMapping:output_type -> temporal.server.api.matchingservice.v1.GetBuildIdTaskQueueMappingResponse + 60, // 60: temporal.server.api.matchingservice.v1.MatchingService.ForceLoadTaskQueuePartition:output_type -> temporal.server.api.matchingservice.v1.ForceLoadTaskQueuePartitionResponse + 61, // 61: temporal.server.api.matchingservice.v1.MatchingService.ForceUnloadTaskQueue:output_type -> temporal.server.api.matchingservice.v1.ForceUnloadTaskQueueResponse + 62, // 62: temporal.server.api.matchingservice.v1.MatchingService.ForceUnloadTaskQueuePartition:output_type -> temporal.server.api.matchingservice.v1.ForceUnloadTaskQueuePartitionResponse + 63, // 63: temporal.server.api.matchingservice.v1.MatchingService.UpdateTaskQueueUserData:output_type -> temporal.server.api.matchingservice.v1.UpdateTaskQueueUserDataResponse + 64, // 64: temporal.server.api.matchingservice.v1.MatchingService.ReplicateTaskQueueUserData:output_type -> temporal.server.api.matchingservice.v1.ReplicateTaskQueueUserDataResponse + 65, // 65: temporal.server.api.matchingservice.v1.MatchingService.CheckTaskQueueUserDataPropagation:output_type -> temporal.server.api.matchingservice.v1.CheckTaskQueueUserDataPropagationResponse + 66, // 66: temporal.server.api.matchingservice.v1.MatchingService.CreateNexusEndpoint:output_type -> temporal.server.api.matchingservice.v1.CreateNexusEndpointResponse + 67, // 67: temporal.server.api.matchingservice.v1.MatchingService.UpdateNexusEndpoint:output_type -> temporal.server.api.matchingservice.v1.UpdateNexusEndpointResponse + 68, // 68: temporal.server.api.matchingservice.v1.MatchingService.DeleteNexusEndpoint:output_type -> temporal.server.api.matchingservice.v1.DeleteNexusEndpointResponse + 69, // 69: temporal.server.api.matchingservice.v1.MatchingService.ListNexusEndpoints:output_type -> temporal.server.api.matchingservice.v1.ListNexusEndpointsResponse + 70, // 70: temporal.server.api.matchingservice.v1.MatchingService.RecordWorkerHeartbeat:output_type -> temporal.server.api.matchingservice.v1.RecordWorkerHeartbeatResponse + 71, // 71: temporal.server.api.matchingservice.v1.MatchingService.ListWorkers:output_type -> temporal.server.api.matchingservice.v1.ListWorkersResponse + 72, // 72: temporal.server.api.matchingservice.v1.MatchingService.UpdateTaskQueueConfig:output_type -> temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigResponse + 73, // 73: temporal.server.api.matchingservice.v1.MatchingService.DescribeWorker:output_type -> temporal.server.api.matchingservice.v1.DescribeWorkerResponse + 37, // [37:74] is the sub-list for method output_type + 0, // [0:37] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/api/matchingservice/v1/service_grpc.pb.go b/api/matchingservice/v1/service_grpc.pb.go index 5d35748988..c7e786c8e4 100644 --- a/api/matchingservice/v1/service_grpc.pb.go +++ b/api/matchingservice/v1/service_grpc.pb.go @@ -56,6 +56,7 @@ const ( MatchingService_RecordWorkerHeartbeat_FullMethodName = "/temporal.server.api.matchingservice.v1.MatchingService/RecordWorkerHeartbeat" MatchingService_ListWorkers_FullMethodName = "/temporal.server.api.matchingservice.v1.MatchingService/ListWorkers" MatchingService_UpdateTaskQueueConfig_FullMethodName = "/temporal.server.api.matchingservice.v1.MatchingService/UpdateTaskQueueConfig" + MatchingService_DescribeWorker_FullMethodName = "/temporal.server.api.matchingservice.v1.MatchingService/DescribeWorker" ) // MatchingServiceClient is the client API for MatchingService service. @@ -217,6 +218,9 @@ type MatchingServiceClient interface { // // aip.dev/not-precedent: UpdateTaskQueueConfig RPC doesn't follow Google API format. --) UpdateTaskQueueConfig(ctx context.Context, in *UpdateTaskQueueConfigRequest, opts ...grpc.CallOption) (*UpdateTaskQueueConfigResponse, error) + // DescribeWorker retrieves a worker information in the specified namespace that match the provided instance key. + // Returns an error if the namespace or worker doesn't exist. + DescribeWorker(ctx context.Context, in *DescribeWorkerRequest, opts ...grpc.CallOption) (*DescribeWorkerResponse, error) } type matchingServiceClient struct { @@ -551,6 +555,15 @@ func (c *matchingServiceClient) UpdateTaskQueueConfig(ctx context.Context, in *U return out, nil } +func (c *matchingServiceClient) DescribeWorker(ctx context.Context, in *DescribeWorkerRequest, opts ...grpc.CallOption) (*DescribeWorkerResponse, error) { + out := new(DescribeWorkerResponse) + err := c.cc.Invoke(ctx, MatchingService_DescribeWorker_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MatchingServiceServer is the server API for MatchingService service. // All implementations must embed UnimplementedMatchingServiceServer // for forward compatibility @@ -710,6 +723,9 @@ type MatchingServiceServer interface { // // aip.dev/not-precedent: UpdateTaskQueueConfig RPC doesn't follow Google API format. --) UpdateTaskQueueConfig(context.Context, *UpdateTaskQueueConfigRequest) (*UpdateTaskQueueConfigResponse, error) + // DescribeWorker retrieves a worker information in the specified namespace that match the provided instance key. + // Returns an error if the namespace or worker doesn't exist. + DescribeWorker(context.Context, *DescribeWorkerRequest) (*DescribeWorkerResponse, error) mustEmbedUnimplementedMatchingServiceServer() } @@ -825,6 +841,9 @@ func (UnimplementedMatchingServiceServer) ListWorkers(context.Context, *ListWork func (UnimplementedMatchingServiceServer) UpdateTaskQueueConfig(context.Context, *UpdateTaskQueueConfigRequest) (*UpdateTaskQueueConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateTaskQueueConfig not implemented") } +func (UnimplementedMatchingServiceServer) DescribeWorker(context.Context, *DescribeWorkerRequest) (*DescribeWorkerResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DescribeWorker not implemented") +} func (UnimplementedMatchingServiceServer) mustEmbedUnimplementedMatchingServiceServer() {} // UnsafeMatchingServiceServer may be embedded to opt out of forward compatibility for this service. @@ -1486,6 +1505,24 @@ func _MatchingService_UpdateTaskQueueConfig_Handler(srv interface{}, ctx context return interceptor(ctx, in, info, handler) } +func _MatchingService_DescribeWorker_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DescribeWorkerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MatchingServiceServer).DescribeWorker(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: MatchingService_DescribeWorker_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MatchingServiceServer).DescribeWorker(ctx, req.(*DescribeWorkerRequest)) + } + return interceptor(ctx, in, info, handler) +} + // MatchingService_ServiceDesc is the grpc.ServiceDesc for MatchingService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1637,6 +1674,10 @@ var MatchingService_ServiceDesc = grpc.ServiceDesc{ MethodName: "UpdateTaskQueueConfig", Handler: _MatchingService_UpdateTaskQueueConfig_Handler, }, + { + MethodName: "DescribeWorker", + Handler: _MatchingService_DescribeWorker_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "temporal/server/api/matchingservice/v1/service.proto", diff --git a/api/matchingservicemock/v1/service_grpc.pb.mock.go b/api/matchingservicemock/v1/service_grpc.pb.mock.go index 04ceaf2159..21aa65f868 100644 --- a/api/matchingservicemock/v1/service_grpc.pb.mock.go +++ b/api/matchingservicemock/v1/service_grpc.pb.mock.go @@ -242,6 +242,26 @@ func (mr *MockMatchingServiceClientMockRecorder) DescribeVersionedTaskQueues(ctx return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeVersionedTaskQueues", reflect.TypeOf((*MockMatchingServiceClient)(nil).DescribeVersionedTaskQueues), varargs...) } +// DescribeWorker mocks base method. +func (m *MockMatchingServiceClient) DescribeWorker(ctx context.Context, in *matchingservice.DescribeWorkerRequest, opts ...grpc.CallOption) (*matchingservice.DescribeWorkerResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DescribeWorker", varargs...) + ret0, _ := ret[0].(*matchingservice.DescribeWorkerResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DescribeWorker indicates an expected call of DescribeWorker. +func (mr *MockMatchingServiceClientMockRecorder) DescribeWorker(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeWorker", reflect.TypeOf((*MockMatchingServiceClient)(nil).DescribeWorker), varargs...) +} + // DispatchNexusTask mocks base method. func (m *MockMatchingServiceClient) DispatchNexusTask(ctx context.Context, in *matchingservice.DispatchNexusTaskRequest, opts ...grpc.CallOption) (*matchingservice.DispatchNexusTaskResponse, error) { m.ctrl.T.Helper() @@ -936,6 +956,21 @@ func (mr *MockMatchingServiceServerMockRecorder) DescribeVersionedTaskQueues(arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeVersionedTaskQueues", reflect.TypeOf((*MockMatchingServiceServer)(nil).DescribeVersionedTaskQueues), arg0, arg1) } +// DescribeWorker mocks base method. +func (m *MockMatchingServiceServer) DescribeWorker(arg0 context.Context, arg1 *matchingservice.DescribeWorkerRequest) (*matchingservice.DescribeWorkerResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DescribeWorker", arg0, arg1) + ret0, _ := ret[0].(*matchingservice.DescribeWorkerResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DescribeWorker indicates an expected call of DescribeWorker. +func (mr *MockMatchingServiceServerMockRecorder) DescribeWorker(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeWorker", reflect.TypeOf((*MockMatchingServiceServer)(nil).DescribeWorker), arg0, arg1) +} + // DispatchNexusTask mocks base method. func (m *MockMatchingServiceServer) DispatchNexusTask(arg0 context.Context, arg1 *matchingservice.DispatchNexusTaskRequest) (*matchingservice.DispatchNexusTaskResponse, error) { m.ctrl.T.Helper() diff --git a/client/frontend/client_gen.go b/client/frontend/client_gen.go index 002de09c3d..00090b3476 100644 --- a/client/frontend/client_gen.go +++ b/client/frontend/client_gen.go @@ -149,6 +149,16 @@ func (c *clientImpl) DescribeTaskQueue( return c.client.DescribeTaskQueue(ctx, request, opts...) } +func (c *clientImpl) DescribeWorker( + ctx context.Context, + request *workflowservice.DescribeWorkerRequest, + opts ...grpc.CallOption, +) (*workflowservice.DescribeWorkerResponse, error) { + ctx, cancel := c.createContext(ctx) + defer cancel() + return c.client.DescribeWorker(ctx, request, opts...) +} + func (c *clientImpl) DescribeWorkerDeployment( ctx context.Context, request *workflowservice.DescribeWorkerDeploymentRequest, diff --git a/client/frontend/metric_client_gen.go b/client/frontend/metric_client_gen.go index d3bc46bf75..6ae178fefa 100644 --- a/client/frontend/metric_client_gen.go +++ b/client/frontend/metric_client_gen.go @@ -205,6 +205,20 @@ func (c *metricClient) DescribeTaskQueue( return c.client.DescribeTaskQueue(ctx, request, opts...) } +func (c *metricClient) DescribeWorker( + ctx context.Context, + request *workflowservice.DescribeWorkerRequest, + opts ...grpc.CallOption, +) (_ *workflowservice.DescribeWorkerResponse, retError error) { + + metricsHandler, startTime := c.startMetricsRecording(ctx, "FrontendClientDescribeWorker") + defer func() { + c.finishMetricsRecording(metricsHandler, startTime, retError) + }() + + return c.client.DescribeWorker(ctx, request, opts...) +} + func (c *metricClient) DescribeWorkerDeployment( ctx context.Context, request *workflowservice.DescribeWorkerDeploymentRequest, diff --git a/client/frontend/retryable_client_gen.go b/client/frontend/retryable_client_gen.go index 7534a43877..2f543ee5b5 100644 --- a/client/frontend/retryable_client_gen.go +++ b/client/frontend/retryable_client_gen.go @@ -221,6 +221,21 @@ func (c *retryableClient) DescribeTaskQueue( return resp, err } +func (c *retryableClient) DescribeWorker( + ctx context.Context, + request *workflowservice.DescribeWorkerRequest, + opts ...grpc.CallOption, +) (*workflowservice.DescribeWorkerResponse, error) { + var resp *workflowservice.DescribeWorkerResponse + op := func(ctx context.Context) error { + var err error + resp, err = c.client.DescribeWorker(ctx, request, opts...) + return err + } + err := backoff.ThrottleRetryContext(ctx, op, c.policy, c.isRetryable) + return resp, err +} + func (c *retryableClient) DescribeWorkerDeployment( ctx context.Context, request *workflowservice.DescribeWorkerDeploymentRequest, diff --git a/client/matching/client_gen.go b/client/matching/client_gen.go index 34537aa25b..1106425229 100644 --- a/client/matching/client_gen.go +++ b/client/matching/client_gen.go @@ -170,6 +170,26 @@ func (c *clientImpl) DescribeVersionedTaskQueues( return client.DescribeVersionedTaskQueues(ctx, request, opts...) } +func (c *clientImpl) DescribeWorker( + ctx context.Context, + request *matchingservice.DescribeWorkerRequest, + opts ...grpc.CallOption, +) (*matchingservice.DescribeWorkerResponse, error) { + + p, err := tqid.NormalPartitionFromRpcName("not-applicable", request.GetNamespaceId(), enumspb.TASK_QUEUE_TYPE_UNSPECIFIED) + if err != nil { + return nil, err + } + + client, err := c.getClientForTaskQueuePartition(p) + if err != nil { + return nil, err + } + ctx, cancel := c.createContext(ctx) + defer cancel() + return client.DescribeWorker(ctx, request, opts...) +} + func (c *clientImpl) DispatchNexusTask( ctx context.Context, request *matchingservice.DispatchNexusTaskRequest, diff --git a/client/matching/metric_client_gen.go b/client/matching/metric_client_gen.go index a0626017cb..c72c917948 100644 --- a/client/matching/metric_client_gen.go +++ b/client/matching/metric_client_gen.go @@ -121,6 +121,20 @@ func (c *metricClient) DescribeVersionedTaskQueues( return c.client.DescribeVersionedTaskQueues(ctx, request, opts...) } +func (c *metricClient) DescribeWorker( + ctx context.Context, + request *matchingservice.DescribeWorkerRequest, + opts ...grpc.CallOption, +) (_ *matchingservice.DescribeWorkerResponse, retError error) { + + metricsHandler, startTime := c.startMetricsRecording(ctx, "MatchingClientDescribeWorker") + defer func() { + c.finishMetricsRecording(metricsHandler, startTime, retError) + }() + + return c.client.DescribeWorker(ctx, request, opts...) +} + func (c *metricClient) DispatchNexusTask( ctx context.Context, request *matchingservice.DispatchNexusTaskRequest, diff --git a/client/matching/retryable_client_gen.go b/client/matching/retryable_client_gen.go index b9e6674e83..415103ae7b 100644 --- a/client/matching/retryable_client_gen.go +++ b/client/matching/retryable_client_gen.go @@ -161,6 +161,21 @@ func (c *retryableClient) DescribeVersionedTaskQueues( return resp, err } +func (c *retryableClient) DescribeWorker( + ctx context.Context, + request *matchingservice.DescribeWorkerRequest, + opts ...grpc.CallOption, +) (*matchingservice.DescribeWorkerResponse, error) { + var resp *matchingservice.DescribeWorkerResponse + op := func(ctx context.Context) error { + var err error + resp, err = c.client.DescribeWorker(ctx, request, opts...) + return err + } + err := backoff.ThrottleRetryContext(ctx, op, c.policy, c.isRetryable) + return resp, err +} + func (c *retryableClient) DispatchNexusTask( ctx context.Context, request *matchingservice.DispatchNexusTaskRequest, diff --git a/cmd/tools/genrpcwrappers/main.go b/cmd/tools/genrpcwrappers/main.go index 5bf8dfa2e1..a495373076 100644 --- a/cmd/tools/genrpcwrappers/main.go +++ b/cmd/tools/genrpcwrappers/main.go @@ -291,7 +291,8 @@ func makeGetMatchingClient(reqType reflect.Type) string { case "UpdateTaskQueueUserDataRequest", "ReplicateTaskQueueUserDataRequest", "RecordWorkerHeartbeatRequest", - "ListWorkersRequest": + "ListWorkersRequest", + "DescribeWorkerRequest": // Always route these requests to the same matching node by namespace. tq = fieldWithPath{path: "\"not-applicable\""} tqt = fieldWithPath{path: "enumspb.TASK_QUEUE_TYPE_UNSPECIFIED"} diff --git a/common/api/metadata.go b/common/api/metadata.go index de2e99e43c..1c38d57033 100644 --- a/common/api/metadata.go +++ b/common/api/metadata.go @@ -157,6 +157,7 @@ var ( "TriggerWorkflowRule": {Scope: ScopeNamespace, Access: AccessWrite, Polling: PollingNone}, "RecordWorkerHeartbeat": {Scope: ScopeNamespace, Access: AccessWrite, Polling: PollingNone}, "ListWorkers": {Scope: ScopeNamespace, Access: AccessReadOnly, Polling: PollingNone}, + "DescribeWorker": {Scope: ScopeNamespace, Access: AccessReadOnly, Polling: PollingNone}, "UpdateTaskQueueConfig": {Scope: ScopeNamespace, Access: AccessWrite, Polling: PollingNone}, "FetchWorkerConfig": {Scope: ScopeNamespace, Access: AccessReadOnly, Polling: PollingNone}, "UpdateWorkerConfig": {Scope: ScopeNamespace, Access: AccessWrite, Polling: PollingNone}, diff --git a/common/rpc/interceptor/logtags/matching_service_server_gen.go b/common/rpc/interceptor/logtags/matching_service_server_gen.go index f1eb6de3b8..04eb583fa6 100644 --- a/common/rpc/interceptor/logtags/matching_service_server_gen.go +++ b/common/rpc/interceptor/logtags/matching_service_server_gen.go @@ -55,6 +55,10 @@ func (wt *WorkflowTags) extractFromMatchingServiceServerMessage(message any) []t return nil case *matchingservice.DescribeVersionedTaskQueuesResponse: return nil + case *matchingservice.DescribeWorkerRequest: + return nil + case *matchingservice.DescribeWorkerResponse: + return nil case *matchingservice.DispatchNexusTaskRequest: return nil case *matchingservice.DispatchNexusTaskResponse: diff --git a/common/rpc/interceptor/logtags/workflow_service_server_gen.go b/common/rpc/interceptor/logtags/workflow_service_server_gen.go index 0161d01d0f..80ad4ad36c 100644 --- a/common/rpc/interceptor/logtags/workflow_service_server_gen.go +++ b/common/rpc/interceptor/logtags/workflow_service_server_gen.go @@ -68,6 +68,10 @@ func (wt *WorkflowTags) extractFromWorkflowServiceServerMessage(message any) []t return nil case *workflowservice.DescribeTaskQueueResponse: return nil + case *workflowservice.DescribeWorkerRequest: + return nil + case *workflowservice.DescribeWorkerResponse: + return nil case *workflowservice.DescribeWorkerDeploymentRequest: return nil case *workflowservice.DescribeWorkerDeploymentResponse: diff --git a/common/rpc/interceptor/redirection.go b/common/rpc/interceptor/redirection.go index 1751253d1d..b25e6c4768 100644 --- a/common/rpc/interceptor/redirection.go +++ b/common/rpc/interceptor/redirection.go @@ -130,6 +130,7 @@ var ( "TriggerWorkflowRule": func() any { return &workflowservice.TriggerWorkflowRuleResponse{} }, "RecordWorkerHeartbeat": func() any { return &workflowservice.RecordWorkerHeartbeatResponse{} }, "ListWorkers": func() any { return &workflowservice.ListWorkersResponse{} }, + "DescribeWorker": func() any { return &workflowservice.DescribeWorkerResponse{} }, "UpdateTaskQueueConfig": func() any { return &workflowservice.UpdateTaskQueueConfigResponse{} }, "FetchWorkerConfig": func() any { return &workflowservice.FetchWorkerConfigResponse{} }, "UpdateWorkerConfig": func() any { return &workflowservice.UpdateWorkerConfigResponse{} }, diff --git a/common/rpc/interceptor/redirection_test.go b/common/rpc/interceptor/redirection_test.go index cc95e68da5..e96f204eca 100644 --- a/common/rpc/interceptor/redirection_test.go +++ b/common/rpc/interceptor/redirection_test.go @@ -185,6 +185,7 @@ func (s *redirectionInterceptorSuite) TestGlobalAPI() { "TriggerWorkflowRule": {}, "RecordWorkerHeartbeat": {}, "ListWorkers": {}, + "DescribeWorker": {}, "UpdateTaskQueueConfig": {}, "FetchWorkerConfig": {}, "UpdateWorkerConfig": {}, diff --git a/common/testing/mockapi/workflowservicemock/v1/service_grpc.pb.mock.go b/common/testing/mockapi/workflowservicemock/v1/service_grpc.pb.mock.go index d6a56b2de1..5e373741a0 100644 --- a/common/testing/mockapi/workflowservicemock/v1/service_grpc.pb.mock.go +++ b/common/testing/mockapi/workflowservicemock/v1/service_grpc.pb.mock.go @@ -322,6 +322,26 @@ func (mr *MockWorkflowServiceClientMockRecorder) DescribeTaskQueue(ctx, in any, return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeTaskQueue", reflect.TypeOf((*MockWorkflowServiceClient)(nil).DescribeTaskQueue), varargs...) } +// DescribeWorker mocks base method. +func (m *MockWorkflowServiceClient) DescribeWorker(ctx context.Context, in *workflowservice.DescribeWorkerRequest, opts ...grpc.CallOption) (*workflowservice.DescribeWorkerResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DescribeWorker", varargs...) + ret0, _ := ret[0].(*workflowservice.DescribeWorkerResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DescribeWorker indicates an expected call of DescribeWorker. +func (mr *MockWorkflowServiceClientMockRecorder) DescribeWorker(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeWorker", reflect.TypeOf((*MockWorkflowServiceClient)(nil).DescribeWorker), varargs...) +} + // DescribeWorkerDeployment mocks base method. func (m *MockWorkflowServiceClient) DescribeWorkerDeployment(ctx context.Context, in *workflowservice.DescribeWorkerDeploymentRequest, opts ...grpc.CallOption) (*workflowservice.DescribeWorkerDeploymentResponse, error) { m.ctrl.T.Helper() 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 423d10f49c..bad4969bdd 100644 --- a/proto/internal/temporal/server/api/matchingservice/v1/request_response.proto +++ b/proto/internal/temporal/server/api/matchingservice/v1/request_response.proto @@ -609,3 +609,13 @@ message UpdateTaskQueueConfigRequest { message UpdateTaskQueueConfigResponse { temporal.api.taskqueue.v1.TaskQueueConfig updated_taskqueue_config = 1; } + +message DescribeWorkerRequest { + string namespace_id = 1; + temporal.api.workflowservice.v1.DescribeWorkerRequest request = 2; +} + +message DescribeWorkerResponse { + temporal.api.worker.v1.WorkerInfo workers_info = 1; +} + diff --git a/proto/internal/temporal/server/api/matchingservice/v1/service.proto b/proto/internal/temporal/server/api/matchingservice/v1/service.proto index 7c7d20b275..993fc290f1 100644 --- a/proto/internal/temporal/server/api/matchingservice/v1/service.proto +++ b/proto/internal/temporal/server/api/matchingservice/v1/service.proto @@ -184,5 +184,11 @@ service MatchingService { // aip.dev/not-precedent: UpdateTaskQueueConfig RPC doesn't follow Google API format. --) // (-- api-linter: core::0134::request-resource-required=disabled // aip.dev/not-precedent: UpdateTaskQueueConfig RPC doesn't follow Google API format. --) - rpc UpdateTaskQueueConfig (UpdateTaskQueueConfigRequest) returns (UpdateTaskQueueConfigResponse) {} + rpc UpdateTaskQueueConfig (UpdateTaskQueueConfigRequest) returns (UpdateTaskQueueConfigResponse) {} + + // DescribeWorker retrieves a worker information in the specified namespace that match the provided instance key. + // Returns an error if the namespace or worker doesn't exist. + rpc DescribeWorker (DescribeWorkerRequest) returns (DescribeWorkerResponse) {} + } + diff --git a/service/frontend/configs/quotas.go b/service/frontend/configs/quotas.go index d516e5c471..3fdacdb5c9 100644 --- a/service/frontend/configs/quotas.go +++ b/service/frontend/configs/quotas.go @@ -168,6 +168,7 @@ var ( "/temporal.api.workflowservice.v1.WorkflowService/ListWorkflowExecutions": 1, "/temporal.api.workflowservice.v1.WorkflowService/ListArchivedWorkflowExecutions": 1, "/temporal.api.workflowservice.v1.WorkflowService/ListWorkers": 1, + "/temporal.api.workflowservice.v1.WorkflowService/DescribeWorker": 1, // APIs that rely on visibility "/temporal.api.workflowservice.v1.WorkflowService/GetWorkerTaskReachability": 1, diff --git a/service/frontend/configs/quotas_test.go b/service/frontend/configs/quotas_test.go index 7cb077ada8..cf9c35e27d 100644 --- a/service/frontend/configs/quotas_test.go +++ b/service/frontend/configs/quotas_test.go @@ -93,6 +93,7 @@ func (s *quotasSuite) TestVisibilityAPIs() { "/temporal.api.workflowservice.v1.WorkflowService/ListWorkflowExecutions": {}, "/temporal.api.workflowservice.v1.WorkflowService/ListArchivedWorkflowExecutions": {}, "/temporal.api.workflowservice.v1.WorkflowService/ListWorkers": {}, + "/temporal.api.workflowservice.v1.WorkflowService/DescribeWorker": {}, "/temporal.api.workflowservice.v1.WorkflowService/GetWorkerTaskReachability": {}, "/temporal.api.workflowservice.v1.WorkflowService/ListSchedules": {}, diff --git a/service/frontend/workflow_handler.go b/service/frontend/workflow_handler.go index dd2780a711..e8f37ae6b6 100644 --- a/service/frontend/workflow_handler.go +++ b/service/frontend/workflow_handler.go @@ -6192,15 +6192,15 @@ func (wh *WorkflowHandler) UpdateTaskQueueConfig( func (wh *WorkflowHandler) FetchWorkerConfig(_ context.Context, request *workflowservice.FetchWorkerConfigRequest, ) (*workflowservice.FetchWorkerConfigResponse, error) { if !wh.config.WorkerCommandsEnabled(request.GetNamespace()) { - return nil, serviceerror.NewUnimplemented("FetchWorkerConfig command is not supported") + return nil, serviceerror.NewUnimplemented("FetchWorkerConfig command is not enabled.") } - return nil, serviceerror.NewUnimplemented("FetchWorkerConfig command is not supported") + return nil, serviceerror.NewUnimplemented("FetchWorkerConfig command is not enabled.") } func (wh *WorkflowHandler) UpdateWorkerConfig(_ context.Context, request *workflowservice.UpdateWorkerConfigRequest, ) (*workflowservice.UpdateWorkerConfigResponse, error) { if !wh.config.WorkerCommandsEnabled(request.GetNamespace()) { - return nil, serviceerror.NewUnimplemented("UpdateWorkerConfig command is not supported") + return nil, serviceerror.NewUnimplemented("UpdateWorkerConfig command is not enabled.") } if request == nil { return nil, errRequestNotSet @@ -6215,5 +6215,13 @@ func (wh *WorkflowHandler) UpdateWorkerConfig(_ context.Context, request *workfl return nil, err } - return nil, serviceerror.NewUnimplemented("UpdateWorkerConfig command is not supported") + return nil, serviceerror.NewUnimplemented("UpdateWorkerConfig command is not enabled.") +} + +func (wh *WorkflowHandler) DescribeWorker(_ context.Context, request *workflowservice.DescribeWorkerRequest, +) (*workflowservice.DescribeWorkerResponse, error) { + if !wh.config.ListWorkersEnabled(request.GetNamespace()) { + return nil, serviceerror.NewUnimplemented("DescribeWorker command is not enabled.") + } + return nil, serviceerror.NewUnimplemented("DescribeWorker command is not enabled.") } diff --git a/service/matching/configs/quotas.go b/service/matching/configs/quotas.go index 4aab20d14f..741d112c94 100644 --- a/service/matching/configs/quotas.go +++ b/service/matching/configs/quotas.go @@ -49,6 +49,7 @@ var ( "/temporal.server.api.matchingservice.v1.MatchingService/RecordWorkerHeartbeat": 1, "/temporal.server.api.matchingservice.v1.MatchingService/ListWorkers": 1, "/temporal.server.api.matchingservice.v1.MatchingService/UpdateTaskQueueConfig": 1, + "/temporal.server.api.matchingservice.v1.MatchingService/DescribeWorker": 1, } APIPrioritiesOrdered = []int{0, 1} From c001dbde3de0de3e70d36486b8111e289e5e6d29 Mon Sep 17 00:00:00 2001 From: Yuri Date: Thu, 24 Jul 2025 18:57:35 -0700 Subject: [PATCH 2/5] add tests, unit and func --- api/matchingservice/v1/request_response.pb.go | 15 +-- go.mod | 2 +- go.sum | 4 +- .../matchingservice/v1/request_response.proto | 3 +- service/frontend/workflow_handler.go | 21 +++- service/matching/handler.go | 16 +++ service/matching/workers/registry.go | 1 + service/matching/workers/registry_impl.go | 48 ++++++-- service/matching/workers/registry_test.go | 92 ++++++++++++++ tests/worker_registry_test.go | 114 ++++++++++++++++++ 10 files changed, 291 insertions(+), 25 deletions(-) create mode 100644 tests/worker_registry_test.go diff --git a/api/matchingservice/v1/request_response.pb.go b/api/matchingservice/v1/request_response.pb.go index 661a774f79..25f8c18255 100644 --- a/api/matchingservice/v1/request_response.pb.go +++ b/api/matchingservice/v1/request_response.pb.go @@ -4625,7 +4625,7 @@ func (x *DescribeWorkerRequest) GetRequest() *v1.DescribeWorkerRequest { type DescribeWorkerResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - WorkersInfo *v114.WorkerInfo `protobuf:"bytes,1,opt,name=workers_info,json=workersInfo,proto3" json:"workers_info,omitempty"` + WorkerInfo *v114.WorkerInfo `protobuf:"bytes,1,opt,name=worker_info,json=workerInfo,proto3" json:"worker_info,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4660,9 +4660,9 @@ func (*DescribeWorkerResponse) Descriptor() ([]byte, []int) { return file_temporal_server_api_matchingservice_v1_request_response_proto_rawDescGZIP(), []int{73} } -func (x *DescribeWorkerResponse) GetWorkersInfo() *v114.WorkerInfo { +func (x *DescribeWorkerResponse) GetWorkerInfo() *v114.WorkerInfo { if x != nil { - return x.WorkersInfo + return x.WorkerInfo } return nil } @@ -5238,9 +5238,10 @@ const file_temporal_server_api_matchingservice_v1_request_response_proto_rawDesc "\x18updated_taskqueue_config\x18\x01 \x01(\v2*.temporal.api.taskqueue.v1.TaskQueueConfigR\x16updatedTaskqueueConfig\"\x8c\x01\n" + "\x15DescribeWorkerRequest\x12!\n" + "\fnamespace_id\x18\x01 \x01(\tR\vnamespaceId\x12P\n" + - "\arequest\x18\x02 \x01(\v26.temporal.api.workflowservice.v1.DescribeWorkerRequestR\arequest\"_\n" + - "\x16DescribeWorkerResponse\x12E\n" + - "\fworkers_info\x18\x01 \x01(\v2\".temporal.api.worker.v1.WorkerInfoR\vworkersInfoB>ZZ temporal.api.workflowservice.v1.UpdateTaskQueueConfigRequest 135, // 109: temporal.server.api.matchingservice.v1.UpdateTaskQueueConfigResponse.updated_taskqueue_config:type_name -> temporal.api.taskqueue.v1.TaskQueueConfig 136, // 110: temporal.server.api.matchingservice.v1.DescribeWorkerRequest.request:type_name -> temporal.api.workflowservice.v1.DescribeWorkerRequest - 133, // 111: temporal.server.api.matchingservice.v1.DescribeWorkerResponse.workers_info:type_name -> temporal.api.worker.v1.WorkerInfo + 133, // 111: temporal.server.api.matchingservice.v1.DescribeWorkerResponse.worker_info:type_name -> temporal.api.worker.v1.WorkerInfo 84, // 112: temporal.server.api.matchingservice.v1.PollWorkflowTaskQueueResponse.QueriesEntry.value:type_name -> temporal.api.query.v1.WorkflowQuery 104, // 113: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesRequest.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType 104, // 114: temporal.server.api.matchingservice.v1.DescribeVersionedTaskQueuesResponse.VersionTaskQueue.type:type_name -> temporal.api.enums.v1.TaskQueueType diff --git a/go.mod b/go.mod index 3328944c5d..4cb5a0d9dd 100644 --- a/go.mod +++ b/go.mod @@ -60,7 +60,7 @@ require ( go.opentelemetry.io/otel/sdk v1.34.0 go.opentelemetry.io/otel/sdk/metric v1.34.0 go.opentelemetry.io/otel/trace v1.34.0 - go.temporal.io/api v1.51.0 + go.temporal.io/api v1.51.1-0.20250725001547-f146f460d5c9 go.temporal.io/sdk v1.34.0 go.uber.org/automaxprocs v1.6.0 go.uber.org/fx v1.23.0 diff --git a/go.sum b/go.sum index 20f695c930..46bb22d4b2 100644 --- a/go.sum +++ b/go.sum @@ -399,8 +399,8 @@ 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.51.0 h1:9+e14GrIa7nWoWoudqj/PSwm33yYjV+u8TAR9If7s/g= -go.temporal.io/api v1.51.0/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= +go.temporal.io/api v1.51.1-0.20250725001547-f146f460d5c9 h1:TC5floyNPVF18aZHx10KnjDE1YRAq3sssDMAY7DEq9s= +go.temporal.io/api v1.51.1-0.20250725001547-f146f460d5c9/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= go.temporal.io/sdk v1.34.0 h1:VLg/h6ny7GvLFVoQPqz2NcC93V9yXboQwblkRvZ1cZE= go.temporal.io/sdk v1.34.0/go.mod h1:iE4U5vFrH3asOhqpBBphpj9zNtw8btp8+MSaf5A0D3w= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= 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 bad4969bdd..e02028e00d 100644 --- a/proto/internal/temporal/server/api/matchingservice/v1/request_response.proto +++ b/proto/internal/temporal/server/api/matchingservice/v1/request_response.proto @@ -616,6 +616,5 @@ message DescribeWorkerRequest { } message DescribeWorkerResponse { - temporal.api.worker.v1.WorkerInfo workers_info = 1; + temporal.api.worker.v1.WorkerInfo worker_info = 1; } - diff --git a/service/frontend/workflow_handler.go b/service/frontend/workflow_handler.go index e8f37ae6b6..0d8d740440 100644 --- a/service/frontend/workflow_handler.go +++ b/service/frontend/workflow_handler.go @@ -6218,10 +6218,27 @@ func (wh *WorkflowHandler) UpdateWorkerConfig(_ context.Context, request *workfl return nil, serviceerror.NewUnimplemented("UpdateWorkerConfig command is not enabled.") } -func (wh *WorkflowHandler) DescribeWorker(_ context.Context, request *workflowservice.DescribeWorkerRequest, +func (wh *WorkflowHandler) DescribeWorker(ctx context.Context, request *workflowservice.DescribeWorkerRequest, ) (*workflowservice.DescribeWorkerResponse, error) { if !wh.config.ListWorkersEnabled(request.GetNamespace()) { return nil, serviceerror.NewUnimplemented("DescribeWorker command is not enabled.") } - return nil, serviceerror.NewUnimplemented("DescribeWorker command is not enabled.") + namespaceName := namespace.Name(request.GetNamespace()) + namespaceID, err := wh.namespaceRegistry.GetNamespaceID(namespaceName) + if err != nil { + return nil, err + } + + resp, err := wh.matchingClient.DescribeWorker(ctx, &matchingservice.DescribeWorkerRequest{ + NamespaceId: namespaceID.String(), + Request: request, + }) + + if err != nil { + return nil, err + } + + return &workflowservice.DescribeWorkerResponse{ + WorkerInfo: resp.GetWorkerInfo(), + }, nil } diff --git a/service/matching/handler.go b/service/matching/handler.go index fb59a43e24..01b85edeaf 100644 --- a/service/matching/handler.go +++ b/service/matching/handler.go @@ -601,3 +601,19 @@ func (h *Handler) UpdateTaskQueueConfig( ) (*matchingservice.UpdateTaskQueueConfigResponse, error) { return h.engine.UpdateTaskQueueConfig(ctx, request) } + +func (h *Handler) DescribeWorker( + _ context.Context, request *matchingservice.DescribeWorkerRequest, +) (*matchingservice.DescribeWorkerResponse, error) { + nsID := namespace.ID(request.GetNamespaceId()) + hb, err := h.workersRegistry.DescribeWorker( + nsID, request.Request.GetWorkerInstanceKey()) + if err != nil { + return nil, err + } + return &matchingservice.DescribeWorkerResponse{ + WorkerInfo: &workerpb.WorkerInfo{ + WorkerHeartbeat: hb, + }, + }, nil +} diff --git a/service/matching/workers/registry.go b/service/matching/workers/registry.go index 0fc0725371..cfee83dfc8 100644 --- a/service/matching/workers/registry.go +++ b/service/matching/workers/registry.go @@ -9,5 +9,6 @@ type ( Registry interface { RecordWorkerHeartbeats(nsID namespace.ID, workerHeartbeat []*workerpb.WorkerHeartbeat) ListWorkers(nsID namespace.ID, queue string, nextPageToken []byte) ([]*workerpb.WorkerHeartbeat, error) + DescribeWorker(nsID namespace.ID, workerInstanceKey string) (*workerpb.WorkerHeartbeat, error) } ) diff --git a/service/matching/workers/registry_impl.go b/service/matching/workers/registry_impl.go index f4ee0b145c..885244b67f 100644 --- a/service/matching/workers/registry_impl.go +++ b/service/matching/workers/registry_impl.go @@ -7,6 +7,7 @@ import ( "sync/atomic" "time" + "go.temporal.io/api/serviceerror" workerpb "go.temporal.io/api/worker/v1" "go.temporal.io/server/common/namespace" "go.uber.org/fx" @@ -116,6 +117,23 @@ func (b *bucket) filterWorkers( return out } +func (b *bucket) getWorkerHeartbeat(nsID namespace.ID, workerInstanceKey string) (*workerpb.WorkerHeartbeat, error) { + b.mu.Lock() + defer b.mu.Unlock() + + mp, ok := b.namespaces[nsID] + if !ok { + return nil, serviceerror.NewNotFoundf("namespace not found: %s", nsID.String()) + } + + e, exists := mp[workerInstanceKey] + if !exists { + return nil, serviceerror.NewNotFoundf("worker not found: %s", workerInstanceKey) + } + + return e.hb, nil +} + // evictByTTL removes entries older than expireBefore from this bucket. // Returns the number of entries removed. func (b *bucket) evictByTTL(expireBefore time.Time) int { @@ -224,7 +242,6 @@ func (m *registryImpl) filterWorkers( return nil } return b.filterWorkers(nsID, predicate) - } // evictLoop periodically triggers TTL and capacity-based eviction. @@ -289,17 +306,26 @@ func (m *registryImpl) RecordWorkerHeartbeats(nsID namespace.ID, workerHeartbeat } func (m *registryImpl) ListWorkers(nsID namespace.ID, query string, _ []byte) ([]*workerpb.WorkerHeartbeat, error) { - predicate := func(_ *workerpb.WorkerHeartbeat) bool { return true } - if query != "" { - queryEngine, err := newWorkerQueryEngine(nsID.String(), query) - if err != nil { - return nil, err - } + if query == "" { + return m.filterWorkers(nsID, func(_ *workerpb.WorkerHeartbeat) bool { return true }), nil + } - predicate = func(heartbeat *workerpb.WorkerHeartbeat) bool { - result, err := queryEngine.EvaluateWorker(heartbeat) - return err == nil && result - } + queryEngine, err := newWorkerQueryEngine(nsID.String(), query) + if err != nil { + return nil, err + } + + predicate := func(heartbeat *workerpb.WorkerHeartbeat) bool { + result, err := queryEngine.EvaluateWorker(heartbeat) + return err == nil && result } return m.filterWorkers(nsID, predicate), nil } + +func (m *registryImpl) DescribeWorker(nsID namespace.ID, workerInstanceKey string) (*workerpb.WorkerHeartbeat, error) { + b := m.getBucket(nsID) + if b == nil { + return nil, serviceerror.NewNotFoundf("namespace not found: %s", nsID.String()) + } + return b.getWorkerHeartbeat(nsID, workerInstanceKey) +} diff --git a/service/matching/workers/registry_test.go b/service/matching/workers/registry_test.go index 14e782ffb9..78c3147851 100644 --- a/service/matching/workers/registry_test.go +++ b/service/matching/workers/registry_test.go @@ -194,3 +194,95 @@ func TestRegistryImpl_ListWorkers(t *testing.T) { }) } } + +func TestRegistryImpl_DescribeWorker(t *testing.T) { + tests := []struct { + name string + setup func(*registryImpl) + nsID namespace.ID + workerInstanceKey string + expectError bool + }{ + { + name: "list workers from non-existent namespace", + setup: func(r *registryImpl) {}, + nsID: "non-existent", + workerInstanceKey: "worker", + expectError: true, + }, + { + name: "list workers from empty namespace", + setup: func(r *registryImpl) { + }, + nsID: "empty-ns", + workerInstanceKey: "worker", + expectError: true, + }, + { + name: "list empty worker", + setup: func(r *registryImpl) { + r.upsertHeartbeats("namespace1", []*workerpb.WorkerHeartbeat{{ + WorkerInstanceKey: "worker1", + }}) + }, + nsID: "namespace1", + workerInstanceKey: "", + expectError: true, + }, + { + name: "list single worker, doesn't exist", + setup: func(r *registryImpl) { + r.upsertHeartbeats("namespace1", []*workerpb.WorkerHeartbeat{{ + WorkerInstanceKey: "worker1", + }}) + }, + nsID: "namespace1", + workerInstanceKey: "worker2", + expectError: true, + }, + { + name: "list single worker", + setup: func(r *registryImpl) { + r.upsertHeartbeats("namespace1", []*workerpb.WorkerHeartbeat{{ + WorkerInstanceKey: "worker1", + }}) + }, + nsID: "namespace1", + workerInstanceKey: "worker1", + }, + { + name: "list workers from specific namespace only", + setup: func(r *registryImpl) { + // Setup namespace1 + r.upsertHeartbeats("namespace1", []*workerpb.WorkerHeartbeat{{ + WorkerInstanceKey: "worker1", + }}) + // Setup namespace2 + r.upsertHeartbeats("namespace2", []*workerpb.WorkerHeartbeat{{ + WorkerInstanceKey: "worker2", + }}) + }, + nsID: "namespace2", + workerInstanceKey: "worker2", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + r := newRegistryImpl( + defaultBuckets, defaultEntryTTL, defaultMinEvictAge, defaultMaxEntries, defaultEvictionInterval, + ) + tt.setup(r) + + result, err := r.DescribeWorker(tt.nsID, tt.workerInstanceKey) + if tt.expectError { + assert.Error(t, err, "expected an error for non-existent namespace") + assert.Nil(t, result, "result should be nil when an error occurs") + return + } + assert.NoError(t, err, "unexpected error when listing workers") + assert.NotNil(t, result, "result should not be nil when worker exists") + assert.Equal(t, tt.workerInstanceKey, result.WorkerInstanceKey) + }) + } +} diff --git a/tests/worker_registry_test.go b/tests/worker_registry_test.go new file mode 100644 index 0000000000..a69aac2930 --- /dev/null +++ b/tests/worker_registry_test.go @@ -0,0 +1,114 @@ +package tests + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/suite" + "go.temporal.io/api/serviceerror" + workerpb "go.temporal.io/api/worker/v1" + "go.temporal.io/api/workflowservice/v1" + "go.temporal.io/server/common/dynamicconfig" + "go.temporal.io/server/common/testing/testvars" + "go.temporal.io/server/tests/testcore" +) + +type WorkerRegistryTestSuite struct { + testcore.FunctionalTestBase + tv *testvars.TestVars +} + +func TestWorkerRegistryTestSuite(t *testing.T) { + s := new(WorkerRegistryTestSuite) + suite.Run(t, s) +} + +func (s *WorkerRegistryTestSuite) SetupTest() { + s.OverrideDynamicConfig(dynamicconfig.ListWorkersEnabled, true) + s.OverrideDynamicConfig(dynamicconfig.WorkerHeartbeatsEnabled, true) + s.FunctionalTestBase.SetupTest() + + s.tv = testvars.New(s.T()).WithTaskQueue(s.TaskQueue()).WithNamespaceName(s.Namespace()) +} + +func (s *WorkerRegistryTestSuite) TestWorkerRegistry_DescribeWorker() { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + _, err := s.FrontendClient().RecordWorkerHeartbeat(ctx, &workflowservice.RecordWorkerHeartbeatRequest{ + Namespace: s.Namespace().String(), + WorkerHeartbeat: []*workerpb.WorkerHeartbeat{ + {WorkerInstanceKey: "worker1", TaskQueue: "taskQueue1"}, + {WorkerInstanceKey: "worker2", TaskQueue: "taskQueue2"}, + }, + }) + s.NoError(err) + + _, err = s.FrontendClient().DescribeWorker(ctx, &workflowservice.DescribeWorkerRequest{ + Namespace: s.Namespace().String(), + WorkerInstanceKey: "worker0", + }) + s.Error(err) + var notFound *serviceerror.NotFound + s.ErrorAs(err, ¬Found) + + _, err = s.FrontendClient().DescribeWorker(ctx, &workflowservice.DescribeWorkerRequest{ + Namespace: "unknown-namespace", + WorkerInstanceKey: "worker1", + }) + s.Error(err) + s.ErrorAs(err, ¬Found) + + resp, err := s.FrontendClient().DescribeWorker(ctx, &workflowservice.DescribeWorkerRequest{ + Namespace: s.Namespace().String(), + WorkerInstanceKey: "worker1", + }) + s.NoError(err) + s.NotNil(resp) +} + +func (s *WorkerRegistryTestSuite) TestWorkerRegistry_ListWorkers() { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + _, err := s.FrontendClient().RecordWorkerHeartbeat(ctx, &workflowservice.RecordWorkerHeartbeatRequest{ + Namespace: s.Namespace().String(), + WorkerHeartbeat: []*workerpb.WorkerHeartbeat{ + {WorkerInstanceKey: "worker1", TaskQueue: "taskQueueTest"}, + {WorkerInstanceKey: "worker2", TaskQueue: "taskQueueTest"}, + }, + }) + s.NoError(err) + + { + resp, err := s.FrontendClient().ListWorkers(ctx, &workflowservice.ListWorkersRequest{ + Namespace: s.Namespace().String(), + Query: "WorkerInstanceKey='worker1'", + }) + s.NoError(err) + s.NotNil(resp) + s.Len(resp.GetWorkersInfo(), 1, "Expected one worker with WorkerInstanceKey 'worker1'") + s.Equal("worker1", resp.GetWorkersInfo()[0].GetWorkerHeartbeat().WorkerInstanceKey) + } + { + resp, err := s.FrontendClient().ListWorkers(ctx, &workflowservice.ListWorkersRequest{ + Namespace: s.Namespace().String(), + Query: "TaskQueue='taskQueueTest'", + }) + s.NoError(err) + s.NotNil(resp) + s.Len(resp.GetWorkersInfo(), 2, "Expected two workers with TaskQueue 'taskQueueTest'") + s.Equal("taskQueueTest", resp.GetWorkersInfo()[0].GetWorkerHeartbeat().TaskQueue) + s.Equal("taskQueueTest", resp.GetWorkersInfo()[1].GetWorkerHeartbeat().TaskQueue) + } + { + resp, err := s.FrontendClient().ListWorkers(ctx, &workflowservice.ListWorkersRequest{ + Namespace: s.Namespace().String(), + Query: "WorkerInstanceKey='worker0'", + }) + s.NoError(err) + s.NotNil(resp) + s.Len(resp.GetWorkersInfo(), 0, "Expected no workers with WorkerInstanceKey 'worker0'") + } +} From 112f888d2aa05bd7e0a4963b41f4533d36d6faa1 Mon Sep 17 00:00:00 2001 From: Yuri Date: Fri, 25 Jul 2025 14:16:48 -0700 Subject: [PATCH 3/5] update api version --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4cb5a0d9dd..3a6fca2151 100644 --- a/go.mod +++ b/go.mod @@ -60,7 +60,7 @@ require ( go.opentelemetry.io/otel/sdk v1.34.0 go.opentelemetry.io/otel/sdk/metric v1.34.0 go.opentelemetry.io/otel/trace v1.34.0 - go.temporal.io/api v1.51.1-0.20250725001547-f146f460d5c9 + go.temporal.io/api v1.51.1-0.20250725211336-3d6e39249ecf go.temporal.io/sdk v1.34.0 go.uber.org/automaxprocs v1.6.0 go.uber.org/fx v1.23.0 diff --git a/go.sum b/go.sum index 46bb22d4b2..74676ea98b 100644 --- a/go.sum +++ b/go.sum @@ -399,8 +399,8 @@ 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.51.1-0.20250725001547-f146f460d5c9 h1:TC5floyNPVF18aZHx10KnjDE1YRAq3sssDMAY7DEq9s= -go.temporal.io/api v1.51.1-0.20250725001547-f146f460d5c9/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= +go.temporal.io/api v1.51.1-0.20250725211336-3d6e39249ecf h1:zdpVU00K3bF+J9fkvKW092Uk+8tYuh6yxqq+AXp2lbE= +go.temporal.io/api v1.51.1-0.20250725211336-3d6e39249ecf/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= go.temporal.io/sdk v1.34.0 h1:VLg/h6ny7GvLFVoQPqz2NcC93V9yXboQwblkRvZ1cZE= go.temporal.io/sdk v1.34.0/go.mod h1:iE4U5vFrH3asOhqpBBphpj9zNtw8btp8+MSaf5A0D3w= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= From e5932852c1303c69ec616272c8a0893273a6556c Mon Sep 17 00:00:00 2001 From: Yuri Date: Fri, 25 Jul 2025 14:23:47 -0700 Subject: [PATCH 4/5] change exception type --- service/matching/workers/registry_impl.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/matching/workers/registry_impl.go b/service/matching/workers/registry_impl.go index 885244b67f..682d6736f6 100644 --- a/service/matching/workers/registry_impl.go +++ b/service/matching/workers/registry_impl.go @@ -123,12 +123,12 @@ func (b *bucket) getWorkerHeartbeat(nsID namespace.ID, workerInstanceKey string) mp, ok := b.namespaces[nsID] if !ok { - return nil, serviceerror.NewNotFoundf("namespace not found: %s", nsID.String()) + return nil, serviceerror.NewNamespaceNotFound(nsID.String()) } e, exists := mp[workerInstanceKey] if !exists { - return nil, serviceerror.NewNotFoundf("worker not found: %s", workerInstanceKey) + return nil, serviceerror.NewNamespaceNotFound(workerInstanceKey) } return e.hb, nil From 889fa11022f7f87a664c28509fdec789b0be16f8 Mon Sep 17 00:00:00 2001 From: Yuri Date: Fri, 25 Jul 2025 14:45:29 -0700 Subject: [PATCH 5/5] fix tests for different error types --- service/matching/workers/registry_impl.go | 2 +- tests/worker_registry_test.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/service/matching/workers/registry_impl.go b/service/matching/workers/registry_impl.go index 682d6736f6..8d65b6d992 100644 --- a/service/matching/workers/registry_impl.go +++ b/service/matching/workers/registry_impl.go @@ -128,7 +128,7 @@ func (b *bucket) getWorkerHeartbeat(nsID namespace.ID, workerInstanceKey string) e, exists := mp[workerInstanceKey] if !exists { - return nil, serviceerror.NewNamespaceNotFound(workerInstanceKey) + return nil, serviceerror.NewNotFoundf("Worker %s not found", workerInstanceKey) } return e.hb, nil diff --git a/tests/worker_registry_test.go b/tests/worker_registry_test.go index a69aac2930..91c13e8f83 100644 --- a/tests/worker_registry_test.go +++ b/tests/worker_registry_test.go @@ -58,7 +58,8 @@ func (s *WorkerRegistryTestSuite) TestWorkerRegistry_DescribeWorker() { WorkerInstanceKey: "worker1", }) s.Error(err) - s.ErrorAs(err, ¬Found) + var namespaceNotFound *serviceerror.NamespaceNotFound + s.ErrorAs(err, &namespaceNotFound) resp, err := s.FrontendClient().DescribeWorker(ctx, &workflowservice.DescribeWorkerRequest{ Namespace: s.Namespace().String(),