diff --git a/api/adminservice/v1/request_response.go-helpers.pb.go b/api/adminservice/v1/request_response.go-helpers.pb.go index abe2bc88ef..c2c6304039 100644 --- a/api/adminservice/v1/request_response.go-helpers.pb.go +++ b/api/adminservice/v1/request_response.go-helpers.pb.go @@ -3260,3 +3260,114 @@ func (this *ForceUnloadTaskQueuePartitionResponse) Equal(that interface{}) bool return proto.Equal(this, that1) } + +// Marshal an object of type StartAdminBatchOperationRequest to the protobuf v3 wire format +func (val *StartAdminBatchOperationRequest) Marshal() ([]byte, error) { + return proto.Marshal(val) +} + +// Unmarshal an object of type StartAdminBatchOperationRequest from the protobuf v3 wire format +func (val *StartAdminBatchOperationRequest) Unmarshal(buf []byte) error { + return proto.Unmarshal(buf, val) +} + +// Size returns the size of the object, in bytes, once serialized +func (val *StartAdminBatchOperationRequest) Size() int { + return proto.Size(val) +} + +// Equal returns whether two StartAdminBatchOperationRequest 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 *StartAdminBatchOperationRequest) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + var that1 *StartAdminBatchOperationRequest + switch t := that.(type) { + case *StartAdminBatchOperationRequest: + that1 = t + case StartAdminBatchOperationRequest: + that1 = &t + default: + return false + } + + return proto.Equal(this, that1) +} + +// Marshal an object of type StartAdminBatchOperationResponse to the protobuf v3 wire format +func (val *StartAdminBatchOperationResponse) Marshal() ([]byte, error) { + return proto.Marshal(val) +} + +// Unmarshal an object of type StartAdminBatchOperationResponse from the protobuf v3 wire format +func (val *StartAdminBatchOperationResponse) Unmarshal(buf []byte) error { + return proto.Unmarshal(buf, val) +} + +// Size returns the size of the object, in bytes, once serialized +func (val *StartAdminBatchOperationResponse) Size() int { + return proto.Size(val) +} + +// Equal returns whether two StartAdminBatchOperationResponse 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 *StartAdminBatchOperationResponse) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + var that1 *StartAdminBatchOperationResponse + switch t := that.(type) { + case *StartAdminBatchOperationResponse: + that1 = t + case StartAdminBatchOperationResponse: + that1 = &t + default: + return false + } + + return proto.Equal(this, that1) +} + +// Marshal an object of type BatchOperationRefreshWorkflowTasks to the protobuf v3 wire format +func (val *BatchOperationRefreshWorkflowTasks) Marshal() ([]byte, error) { + return proto.Marshal(val) +} + +// Unmarshal an object of type BatchOperationRefreshWorkflowTasks from the protobuf v3 wire format +func (val *BatchOperationRefreshWorkflowTasks) Unmarshal(buf []byte) error { + return proto.Unmarshal(buf, val) +} + +// Size returns the size of the object, in bytes, once serialized +func (val *BatchOperationRefreshWorkflowTasks) Size() int { + return proto.Size(val) +} + +// Equal returns whether two BatchOperationRefreshWorkflowTasks 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 *BatchOperationRefreshWorkflowTasks) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + var that1 *BatchOperationRefreshWorkflowTasks + switch t := that.(type) { + case *BatchOperationRefreshWorkflowTasks: + that1 = t + case BatchOperationRefreshWorkflowTasks: + that1 = &t + default: + return false + } + + return proto.Equal(this, that1) +} diff --git a/api/adminservice/v1/request_response.pb.go b/api/adminservice/v1/request_response.pb.go index 2c539d29ba..711ae39283 100644 --- a/api/adminservice/v1/request_response.pb.go +++ b/api/adminservice/v1/request_response.pb.go @@ -5247,6 +5247,215 @@ func (x *ForceUnloadTaskQueuePartitionResponse) GetWasLoaded() bool { return false } +// StartAdminBatchOperationRequest starts an admin batch operation. +type StartAdminBatchOperationRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Namespace that contains the batch operation. + Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` + // Visibility query defines the group of workflows to apply the batch operation. + // This field and `executions` are mutually exclusive. + VisibilityQuery string `protobuf:"bytes,2,opt,name=visibility_query,json=visibilityQuery,proto3" json:"visibility_query,omitempty"` + // A unique job identifier for this batch operation. + JobId string `protobuf:"bytes,3,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"` + // Reason for the operation. + Reason string `protobuf:"bytes,4,opt,name=reason,proto3" json:"reason,omitempty"` + // List of workflow executions to apply the batch operation to. + // This field and `visibility_query` are mutually exclusive. + Executions []*v1.WorkflowExecution `protobuf:"bytes,5,rep,name=executions,proto3" json:"executions,omitempty"` + // The admin batch operation to perform. + // + // Types that are valid to be assigned to Operation: + // + // *StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation + Operation isStartAdminBatchOperationRequest_Operation `protobuf_oneof:"operation"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StartAdminBatchOperationRequest) Reset() { + *x = StartAdminBatchOperationRequest{} + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartAdminBatchOperationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartAdminBatchOperationRequest) ProtoMessage() {} + +func (x *StartAdminBatchOperationRequest) ProtoReflect() protoreflect.Message { + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[88] + 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 StartAdminBatchOperationRequest.ProtoReflect.Descriptor instead. +func (*StartAdminBatchOperationRequest) Descriptor() ([]byte, []int) { + return file_temporal_server_api_adminservice_v1_request_response_proto_rawDescGZIP(), []int{88} +} + +func (x *StartAdminBatchOperationRequest) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *StartAdminBatchOperationRequest) GetVisibilityQuery() string { + if x != nil { + return x.VisibilityQuery + } + return "" +} + +func (x *StartAdminBatchOperationRequest) GetJobId() string { + if x != nil { + return x.JobId + } + return "" +} + +func (x *StartAdminBatchOperationRequest) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *StartAdminBatchOperationRequest) GetExecutions() []*v1.WorkflowExecution { + if x != nil { + return x.Executions + } + return nil +} + +func (x *StartAdminBatchOperationRequest) GetOperation() isStartAdminBatchOperationRequest_Operation { + if x != nil { + return x.Operation + } + return nil +} + +func (x *StartAdminBatchOperationRequest) GetRefreshWorkflowTasksOperation() *BatchOperationRefreshWorkflowTasks { + if x != nil { + if x, ok := x.Operation.(*StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation); ok { + return x.RefreshWorkflowTasksOperation + } + } + return nil +} + +type isStartAdminBatchOperationRequest_Operation interface { + isStartAdminBatchOperationRequest_Operation() +} + +type StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation struct { + RefreshWorkflowTasksOperation *BatchOperationRefreshWorkflowTasks `protobuf:"bytes,10,opt,name=refresh_workflow_tasks_operation,json=refreshWorkflowTasksOperation,proto3,oneof"` +} + +func (*StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation) isStartAdminBatchOperationRequest_Operation() { +} + +type StartAdminBatchOperationResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StartAdminBatchOperationResponse) Reset() { + *x = StartAdminBatchOperationResponse{} + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartAdminBatchOperationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartAdminBatchOperationResponse) ProtoMessage() {} + +func (x *StartAdminBatchOperationResponse) ProtoReflect() protoreflect.Message { + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[89] + 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 StartAdminBatchOperationResponse.ProtoReflect.Descriptor instead. +func (*StartAdminBatchOperationResponse) Descriptor() ([]byte, []int) { + return file_temporal_server_api_adminservice_v1_request_response_proto_rawDescGZIP(), []int{89} +} + +// BatchOperationRefreshWorkflowTasks refreshes workflow tasks for batch workflows. +// This regenerates all pending tasks for each workflow. +type BatchOperationRefreshWorkflowTasks struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The identity of the worker/client. + Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + // Archetype to use for the refresh operation. If not specified, defaults to workflow archetype. + Archetype string `protobuf:"bytes,2,opt,name=archetype,proto3" json:"archetype,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BatchOperationRefreshWorkflowTasks) Reset() { + *x = BatchOperationRefreshWorkflowTasks{} + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BatchOperationRefreshWorkflowTasks) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchOperationRefreshWorkflowTasks) ProtoMessage() {} + +func (x *BatchOperationRefreshWorkflowTasks) ProtoReflect() protoreflect.Message { + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[90] + 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 BatchOperationRefreshWorkflowTasks.ProtoReflect.Descriptor instead. +func (*BatchOperationRefreshWorkflowTasks) Descriptor() ([]byte, []int) { + return file_temporal_server_api_adminservice_v1_request_response_proto_rawDescGZIP(), []int{90} +} + +func (x *BatchOperationRefreshWorkflowTasks) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" +} + +func (x *BatchOperationRefreshWorkflowTasks) GetArchetype() string { + if x != nil { + return x.Archetype + } + return "" +} + type AddTasksRequest_Task struct { state protoimpl.MessageState `protogen:"open.v1"` CategoryId int32 `protobuf:"varint,1,opt,name=category_id,json=categoryId,proto3" json:"category_id,omitempty"` @@ -5257,7 +5466,7 @@ type AddTasksRequest_Task struct { func (x *AddTasksRequest_Task) Reset() { *x = AddTasksRequest_Task{} - mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[95] + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5269,7 +5478,7 @@ func (x *AddTasksRequest_Task) String() string { func (*AddTasksRequest_Task) ProtoMessage() {} func (x *AddTasksRequest_Task) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[95] + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5310,7 +5519,7 @@ type ListQueuesResponse_QueueInfo struct { func (x *ListQueuesResponse_QueueInfo) Reset() { *x = ListQueuesResponse_QueueInfo{} - mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[96] + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5322,7 +5531,7 @@ func (x *ListQueuesResponse_QueueInfo) String() string { func (*ListQueuesResponse_QueueInfo) ProtoMessage() {} func (x *ListQueuesResponse_QueueInfo) ProtoReflect() protoreflect.Message { - mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[96] + mi := &file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5752,7 +5961,22 @@ const file_temporal_server_api_adminservice_v1_request_response_proto_rawDesc = "\x14task_queue_partition\x18\x02 \x01(\v24.temporal.server.api.taskqueue.v1.TaskQueuePartitionR\x12taskQueuePartition\"F\n" + "%ForceUnloadTaskQueuePartitionResponse\x12\x1d\n" + "\n" + - "was_loaded\x18\x01 \x01(\bR\twasLoadedB8Z6go.temporal.io/server/api/adminservice/v1;adminserviceb\x06proto3" + "was_loaded\x18\x01 \x01(\bR\twasLoaded\"\x86\x03\n" + + "\x1fStartAdminBatchOperationRequest\x12\x1c\n" + + "\tnamespace\x18\x01 \x01(\tR\tnamespace\x12)\n" + + "\x10visibility_query\x18\x02 \x01(\tR\x0fvisibilityQuery\x12\x15\n" + + "\x06job_id\x18\x03 \x01(\tR\x05jobId\x12\x16\n" + + "\x06reason\x18\x04 \x01(\tR\x06reason\x12I\n" + + "\n" + + "executions\x18\x05 \x03(\v2).temporal.api.common.v1.WorkflowExecutionR\n" + + "executions\x12\x92\x01\n" + + " refresh_workflow_tasks_operation\x18\n" + + " \x01(\v2G.temporal.server.api.adminservice.v1.BatchOperationRefreshWorkflowTasksH\x00R\x1drefreshWorkflowTasksOperationB\v\n" + + "\toperation\"\"\n" + + " StartAdminBatchOperationResponse\"^\n" + + "\"BatchOperationRefreshWorkflowTasks\x12\x1a\n" + + "\bidentity\x18\x01 \x01(\tR\bidentity\x12\x1c\n" + + "\tarchetype\x18\x02 \x01(\tR\tarchetypeB8Z6go.temporal.io/server/api/adminservice/v1;adminserviceb\x06proto3" var ( file_temporal_server_api_adminservice_v1_request_response_proto_rawDescOnce sync.Once @@ -5766,7 +5990,7 @@ func file_temporal_server_api_adminservice_v1_request_response_proto_rawDescGZIP return file_temporal_server_api_adminservice_v1_request_response_proto_rawDescData } -var file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes = make([]protoimpl.MessageInfo, 98) +var file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes = make([]protoimpl.MessageInfo, 101) var file_temporal_server_api_adminservice_v1_request_response_proto_goTypes = []any{ (*RebuildMutableStateRequest)(nil), // 0: temporal.server.api.adminservice.v1.RebuildMutableStateRequest (*RebuildMutableStateResponse)(nil), // 1: temporal.server.api.adminservice.v1.RebuildMutableStateResponse @@ -5856,152 +6080,157 @@ var file_temporal_server_api_adminservice_v1_request_response_proto_goTypes = [] (*DescribeTaskQueuePartitionResponse)(nil), // 85: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse (*ForceUnloadTaskQueuePartitionRequest)(nil), // 86: temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionRequest (*ForceUnloadTaskQueuePartitionResponse)(nil), // 87: temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionResponse - nil, // 88: temporal.server.api.adminservice.v1.GetReplicationMessagesResponse.ShardMessagesEntry - nil, // 89: temporal.server.api.adminservice.v1.AddSearchAttributesRequest.SearchAttributesEntry - nil, // 90: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.CustomAttributesEntry - nil, // 91: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.SystemAttributesEntry - nil, // 92: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.MappingEntry - nil, // 93: temporal.server.api.adminservice.v1.DescribeClusterResponse.SupportedClientsEntry - nil, // 94: temporal.server.api.adminservice.v1.DescribeClusterResponse.TagsEntry - (*AddTasksRequest_Task)(nil), // 95: temporal.server.api.adminservice.v1.AddTasksRequest.Task - (*ListQueuesResponse_QueueInfo)(nil), // 96: temporal.server.api.adminservice.v1.ListQueuesResponse.QueueInfo - nil, // 97: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry - (*v1.WorkflowExecution)(nil), // 98: temporal.api.common.v1.WorkflowExecution - (*v1.DataBlob)(nil), // 99: temporal.api.common.v1.DataBlob - (*v11.VersionHistory)(nil), // 100: temporal.server.api.history.v1.VersionHistory - (*v12.WorkflowMutableState)(nil), // 101: temporal.server.api.persistence.v1.WorkflowMutableState - (*v13.NamespaceCacheInfo)(nil), // 102: temporal.server.api.namespace.v1.NamespaceCacheInfo - (*v12.ShardInfo)(nil), // 103: temporal.server.api.persistence.v1.ShardInfo - (*v11.TaskRange)(nil), // 104: temporal.server.api.history.v1.TaskRange - (v14.TaskType)(0), // 105: temporal.server.api.enums.v1.TaskType - (*timestamppb.Timestamp)(nil), // 106: google.protobuf.Timestamp - (*v15.ReplicationToken)(nil), // 107: temporal.server.api.replication.v1.ReplicationToken - (*v15.ReplicationMessages)(nil), // 108: temporal.server.api.replication.v1.ReplicationMessages - (*v15.ReplicationTaskInfo)(nil), // 109: temporal.server.api.replication.v1.ReplicationTaskInfo - (*v15.ReplicationTask)(nil), // 110: temporal.server.api.replication.v1.ReplicationTask - (*v17.WorkflowExecutionInfo)(nil), // 111: temporal.api.workflow.v1.WorkflowExecutionInfo - (*v18.MembershipInfo)(nil), // 112: temporal.server.api.cluster.v1.MembershipInfo - (*v19.VersionInfo)(nil), // 113: temporal.api.version.v1.VersionInfo - (*v12.ClusterMetadata)(nil), // 114: temporal.server.api.persistence.v1.ClusterMetadata - (*durationpb.Duration)(nil), // 115: google.protobuf.Duration - (v14.ClusterMemberRole)(0), // 116: temporal.server.api.enums.v1.ClusterMemberRole - (*v18.ClusterMember)(nil), // 117: temporal.server.api.cluster.v1.ClusterMember - (v14.DeadLetterQueueType)(0), // 118: temporal.server.api.enums.v1.DeadLetterQueueType - (v16.TaskQueueType)(0), // 119: temporal.api.enums.v1.TaskQueueType - (*v12.AllocatedTaskInfo)(nil), // 120: temporal.server.api.persistence.v1.AllocatedTaskInfo - (*v15.SyncReplicationState)(nil), // 121: temporal.server.api.replication.v1.SyncReplicationState - (*v15.WorkflowReplicationMessages)(nil), // 122: temporal.server.api.replication.v1.WorkflowReplicationMessages - (*v110.NamespaceInfo)(nil), // 123: temporal.api.namespace.v1.NamespaceInfo - (*v110.NamespaceConfig)(nil), // 124: temporal.api.namespace.v1.NamespaceConfig - (*v111.NamespaceReplicationConfig)(nil), // 125: temporal.api.replication.v1.NamespaceReplicationConfig - (*v111.FailoverStatus)(nil), // 126: temporal.api.replication.v1.FailoverStatus - (*v112.HistoryDLQKey)(nil), // 127: temporal.server.api.common.v1.HistoryDLQKey - (*v112.HistoryDLQTask)(nil), // 128: temporal.server.api.common.v1.HistoryDLQTask - (*v112.HistoryDLQTaskMetadata)(nil), // 129: temporal.server.api.common.v1.HistoryDLQTaskMetadata - (v14.DLQOperationType)(0), // 130: temporal.server.api.enums.v1.DLQOperationType - (v14.DLQOperationState)(0), // 131: temporal.server.api.enums.v1.DLQOperationState - (v14.HealthState)(0), // 132: temporal.server.api.enums.v1.HealthState - (*v12.VersionedTransition)(nil), // 133: temporal.server.api.persistence.v1.VersionedTransition - (*v11.VersionHistories)(nil), // 134: temporal.server.api.history.v1.VersionHistories - (*v15.VersionedTransitionArtifact)(nil), // 135: temporal.server.api.replication.v1.VersionedTransitionArtifact - (*v113.TaskQueuePartition)(nil), // 136: temporal.server.api.taskqueue.v1.TaskQueuePartition - (*v114.TaskQueueVersionSelection)(nil), // 137: temporal.api.taskqueue.v1.TaskQueueVersionSelection - (v16.IndexedValueType)(0), // 138: temporal.api.enums.v1.IndexedValueType - (*v113.TaskQueueVersionInfoInternal)(nil), // 139: temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal + (*StartAdminBatchOperationRequest)(nil), // 88: temporal.server.api.adminservice.v1.StartAdminBatchOperationRequest + (*StartAdminBatchOperationResponse)(nil), // 89: temporal.server.api.adminservice.v1.StartAdminBatchOperationResponse + (*BatchOperationRefreshWorkflowTasks)(nil), // 90: temporal.server.api.adminservice.v1.BatchOperationRefreshWorkflowTasks + nil, // 91: temporal.server.api.adminservice.v1.GetReplicationMessagesResponse.ShardMessagesEntry + nil, // 92: temporal.server.api.adminservice.v1.AddSearchAttributesRequest.SearchAttributesEntry + nil, // 93: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.CustomAttributesEntry + nil, // 94: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.SystemAttributesEntry + nil, // 95: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.MappingEntry + nil, // 96: temporal.server.api.adminservice.v1.DescribeClusterResponse.SupportedClientsEntry + nil, // 97: temporal.server.api.adminservice.v1.DescribeClusterResponse.TagsEntry + (*AddTasksRequest_Task)(nil), // 98: temporal.server.api.adminservice.v1.AddTasksRequest.Task + (*ListQueuesResponse_QueueInfo)(nil), // 99: temporal.server.api.adminservice.v1.ListQueuesResponse.QueueInfo + nil, // 100: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry + (*v1.WorkflowExecution)(nil), // 101: temporal.api.common.v1.WorkflowExecution + (*v1.DataBlob)(nil), // 102: temporal.api.common.v1.DataBlob + (*v11.VersionHistory)(nil), // 103: temporal.server.api.history.v1.VersionHistory + (*v12.WorkflowMutableState)(nil), // 104: temporal.server.api.persistence.v1.WorkflowMutableState + (*v13.NamespaceCacheInfo)(nil), // 105: temporal.server.api.namespace.v1.NamespaceCacheInfo + (*v12.ShardInfo)(nil), // 106: temporal.server.api.persistence.v1.ShardInfo + (*v11.TaskRange)(nil), // 107: temporal.server.api.history.v1.TaskRange + (v14.TaskType)(0), // 108: temporal.server.api.enums.v1.TaskType + (*timestamppb.Timestamp)(nil), // 109: google.protobuf.Timestamp + (*v15.ReplicationToken)(nil), // 110: temporal.server.api.replication.v1.ReplicationToken + (*v15.ReplicationMessages)(nil), // 111: temporal.server.api.replication.v1.ReplicationMessages + (*v15.ReplicationTaskInfo)(nil), // 112: temporal.server.api.replication.v1.ReplicationTaskInfo + (*v15.ReplicationTask)(nil), // 113: temporal.server.api.replication.v1.ReplicationTask + (*v17.WorkflowExecutionInfo)(nil), // 114: temporal.api.workflow.v1.WorkflowExecutionInfo + (*v18.MembershipInfo)(nil), // 115: temporal.server.api.cluster.v1.MembershipInfo + (*v19.VersionInfo)(nil), // 116: temporal.api.version.v1.VersionInfo + (*v12.ClusterMetadata)(nil), // 117: temporal.server.api.persistence.v1.ClusterMetadata + (*durationpb.Duration)(nil), // 118: google.protobuf.Duration + (v14.ClusterMemberRole)(0), // 119: temporal.server.api.enums.v1.ClusterMemberRole + (*v18.ClusterMember)(nil), // 120: temporal.server.api.cluster.v1.ClusterMember + (v14.DeadLetterQueueType)(0), // 121: temporal.server.api.enums.v1.DeadLetterQueueType + (v16.TaskQueueType)(0), // 122: temporal.api.enums.v1.TaskQueueType + (*v12.AllocatedTaskInfo)(nil), // 123: temporal.server.api.persistence.v1.AllocatedTaskInfo + (*v15.SyncReplicationState)(nil), // 124: temporal.server.api.replication.v1.SyncReplicationState + (*v15.WorkflowReplicationMessages)(nil), // 125: temporal.server.api.replication.v1.WorkflowReplicationMessages + (*v110.NamespaceInfo)(nil), // 126: temporal.api.namespace.v1.NamespaceInfo + (*v110.NamespaceConfig)(nil), // 127: temporal.api.namespace.v1.NamespaceConfig + (*v111.NamespaceReplicationConfig)(nil), // 128: temporal.api.replication.v1.NamespaceReplicationConfig + (*v111.FailoverStatus)(nil), // 129: temporal.api.replication.v1.FailoverStatus + (*v112.HistoryDLQKey)(nil), // 130: temporal.server.api.common.v1.HistoryDLQKey + (*v112.HistoryDLQTask)(nil), // 131: temporal.server.api.common.v1.HistoryDLQTask + (*v112.HistoryDLQTaskMetadata)(nil), // 132: temporal.server.api.common.v1.HistoryDLQTaskMetadata + (v14.DLQOperationType)(0), // 133: temporal.server.api.enums.v1.DLQOperationType + (v14.DLQOperationState)(0), // 134: temporal.server.api.enums.v1.DLQOperationState + (v14.HealthState)(0), // 135: temporal.server.api.enums.v1.HealthState + (*v12.VersionedTransition)(nil), // 136: temporal.server.api.persistence.v1.VersionedTransition + (*v11.VersionHistories)(nil), // 137: temporal.server.api.history.v1.VersionHistories + (*v15.VersionedTransitionArtifact)(nil), // 138: temporal.server.api.replication.v1.VersionedTransitionArtifact + (*v113.TaskQueuePartition)(nil), // 139: temporal.server.api.taskqueue.v1.TaskQueuePartition + (*v114.TaskQueueVersionSelection)(nil), // 140: temporal.api.taskqueue.v1.TaskQueueVersionSelection + (v16.IndexedValueType)(0), // 141: temporal.api.enums.v1.IndexedValueType + (*v113.TaskQueueVersionInfoInternal)(nil), // 142: temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal } var file_temporal_server_api_adminservice_v1_request_response_proto_depIdxs = []int32{ - 98, // 0: temporal.server.api.adminservice.v1.RebuildMutableStateRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 98, // 1: temporal.server.api.adminservice.v1.ImportWorkflowExecutionRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 99, // 2: temporal.server.api.adminservice.v1.ImportWorkflowExecutionRequest.history_batches:type_name -> temporal.api.common.v1.DataBlob - 100, // 3: temporal.server.api.adminservice.v1.ImportWorkflowExecutionRequest.version_history:type_name -> temporal.server.api.history.v1.VersionHistory - 98, // 4: temporal.server.api.adminservice.v1.DescribeMutableStateRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 101, // 5: temporal.server.api.adminservice.v1.DescribeMutableStateResponse.cache_mutable_state:type_name -> temporal.server.api.persistence.v1.WorkflowMutableState - 101, // 6: temporal.server.api.adminservice.v1.DescribeMutableStateResponse.database_mutable_state:type_name -> temporal.server.api.persistence.v1.WorkflowMutableState - 98, // 7: temporal.server.api.adminservice.v1.DescribeHistoryHostRequest.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution - 102, // 8: temporal.server.api.adminservice.v1.DescribeHistoryHostResponse.namespace_cache:type_name -> temporal.server.api.namespace.v1.NamespaceCacheInfo - 103, // 9: temporal.server.api.adminservice.v1.GetShardResponse.shard_info:type_name -> temporal.server.api.persistence.v1.ShardInfo - 104, // 10: temporal.server.api.adminservice.v1.ListHistoryTasksRequest.task_range:type_name -> temporal.server.api.history.v1.TaskRange + 101, // 0: temporal.server.api.adminservice.v1.RebuildMutableStateRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 101, // 1: temporal.server.api.adminservice.v1.ImportWorkflowExecutionRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 102, // 2: temporal.server.api.adminservice.v1.ImportWorkflowExecutionRequest.history_batches:type_name -> temporal.api.common.v1.DataBlob + 103, // 3: temporal.server.api.adminservice.v1.ImportWorkflowExecutionRequest.version_history:type_name -> temporal.server.api.history.v1.VersionHistory + 101, // 4: temporal.server.api.adminservice.v1.DescribeMutableStateRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 104, // 5: temporal.server.api.adminservice.v1.DescribeMutableStateResponse.cache_mutable_state:type_name -> temporal.server.api.persistence.v1.WorkflowMutableState + 104, // 6: temporal.server.api.adminservice.v1.DescribeMutableStateResponse.database_mutable_state:type_name -> temporal.server.api.persistence.v1.WorkflowMutableState + 101, // 7: temporal.server.api.adminservice.v1.DescribeHistoryHostRequest.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution + 105, // 8: temporal.server.api.adminservice.v1.DescribeHistoryHostResponse.namespace_cache:type_name -> temporal.server.api.namespace.v1.NamespaceCacheInfo + 106, // 9: temporal.server.api.adminservice.v1.GetShardResponse.shard_info:type_name -> temporal.server.api.persistence.v1.ShardInfo + 107, // 10: temporal.server.api.adminservice.v1.ListHistoryTasksRequest.task_range:type_name -> temporal.server.api.history.v1.TaskRange 14, // 11: temporal.server.api.adminservice.v1.ListHistoryTasksResponse.tasks:type_name -> temporal.server.api.adminservice.v1.Task - 105, // 12: temporal.server.api.adminservice.v1.Task.task_type:type_name -> temporal.server.api.enums.v1.TaskType - 106, // 13: temporal.server.api.adminservice.v1.Task.fire_time:type_name -> google.protobuf.Timestamp - 106, // 14: temporal.server.api.adminservice.v1.RemoveTaskRequest.visibility_time:type_name -> google.protobuf.Timestamp - 98, // 15: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Request.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 99, // 16: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Response.history_batches:type_name -> temporal.api.common.v1.DataBlob - 100, // 17: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Response.version_history:type_name -> temporal.server.api.history.v1.VersionHistory - 98, // 18: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 99, // 19: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryResponse.history_batches:type_name -> temporal.api.common.v1.DataBlob - 100, // 20: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryResponse.version_history:type_name -> temporal.server.api.history.v1.VersionHistory - 107, // 21: temporal.server.api.adminservice.v1.GetReplicationMessagesRequest.tokens:type_name -> temporal.server.api.replication.v1.ReplicationToken - 88, // 22: temporal.server.api.adminservice.v1.GetReplicationMessagesResponse.shard_messages:type_name -> temporal.server.api.adminservice.v1.GetReplicationMessagesResponse.ShardMessagesEntry - 108, // 23: temporal.server.api.adminservice.v1.GetNamespaceReplicationMessagesResponse.messages:type_name -> temporal.server.api.replication.v1.ReplicationMessages - 109, // 24: temporal.server.api.adminservice.v1.GetDLQReplicationMessagesRequest.task_infos:type_name -> temporal.server.api.replication.v1.ReplicationTaskInfo - 110, // 25: temporal.server.api.adminservice.v1.GetDLQReplicationMessagesResponse.replication_tasks:type_name -> temporal.server.api.replication.v1.ReplicationTask - 98, // 26: temporal.server.api.adminservice.v1.ReapplyEventsRequest.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution - 99, // 27: temporal.server.api.adminservice.v1.ReapplyEventsRequest.events:type_name -> temporal.api.common.v1.DataBlob - 89, // 28: temporal.server.api.adminservice.v1.AddSearchAttributesRequest.search_attributes:type_name -> temporal.server.api.adminservice.v1.AddSearchAttributesRequest.SearchAttributesEntry - 90, // 29: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.custom_attributes:type_name -> temporal.server.api.adminservice.v1.GetSearchAttributesResponse.CustomAttributesEntry - 91, // 30: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.system_attributes:type_name -> temporal.server.api.adminservice.v1.GetSearchAttributesResponse.SystemAttributesEntry - 92, // 31: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.mapping:type_name -> temporal.server.api.adminservice.v1.GetSearchAttributesResponse.MappingEntry - 111, // 32: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.add_workflow_execution_info:type_name -> temporal.api.workflow.v1.WorkflowExecutionInfo - 93, // 33: temporal.server.api.adminservice.v1.DescribeClusterResponse.supported_clients:type_name -> temporal.server.api.adminservice.v1.DescribeClusterResponse.SupportedClientsEntry - 112, // 34: temporal.server.api.adminservice.v1.DescribeClusterResponse.membership_info:type_name -> temporal.server.api.cluster.v1.MembershipInfo - 113, // 35: temporal.server.api.adminservice.v1.DescribeClusterResponse.version_info:type_name -> temporal.api.version.v1.VersionInfo - 94, // 36: temporal.server.api.adminservice.v1.DescribeClusterResponse.tags:type_name -> temporal.server.api.adminservice.v1.DescribeClusterResponse.TagsEntry - 114, // 37: temporal.server.api.adminservice.v1.ListClustersResponse.clusters:type_name -> temporal.server.api.persistence.v1.ClusterMetadata - 115, // 38: temporal.server.api.adminservice.v1.ListClusterMembersRequest.last_heartbeat_within:type_name -> google.protobuf.Duration - 116, // 39: temporal.server.api.adminservice.v1.ListClusterMembersRequest.role:type_name -> temporal.server.api.enums.v1.ClusterMemberRole - 106, // 40: temporal.server.api.adminservice.v1.ListClusterMembersRequest.session_started_after_time:type_name -> google.protobuf.Timestamp - 117, // 41: temporal.server.api.adminservice.v1.ListClusterMembersResponse.active_members:type_name -> temporal.server.api.cluster.v1.ClusterMember - 118, // 42: temporal.server.api.adminservice.v1.GetDLQMessagesRequest.type:type_name -> temporal.server.api.enums.v1.DeadLetterQueueType - 118, // 43: temporal.server.api.adminservice.v1.GetDLQMessagesResponse.type:type_name -> temporal.server.api.enums.v1.DeadLetterQueueType - 110, // 44: temporal.server.api.adminservice.v1.GetDLQMessagesResponse.replication_tasks:type_name -> temporal.server.api.replication.v1.ReplicationTask - 109, // 45: temporal.server.api.adminservice.v1.GetDLQMessagesResponse.replication_tasks_info:type_name -> temporal.server.api.replication.v1.ReplicationTaskInfo - 118, // 46: temporal.server.api.adminservice.v1.PurgeDLQMessagesRequest.type:type_name -> temporal.server.api.enums.v1.DeadLetterQueueType - 118, // 47: temporal.server.api.adminservice.v1.MergeDLQMessagesRequest.type:type_name -> temporal.server.api.enums.v1.DeadLetterQueueType - 98, // 48: temporal.server.api.adminservice.v1.RefreshWorkflowTasksRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 119, // 49: temporal.server.api.adminservice.v1.GetTaskQueueTasksRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 120, // 50: temporal.server.api.adminservice.v1.GetTaskQueueTasksResponse.tasks:type_name -> temporal.server.api.persistence.v1.AllocatedTaskInfo - 98, // 51: temporal.server.api.adminservice.v1.DeleteWorkflowExecutionRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 121, // 52: temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesRequest.sync_replication_state:type_name -> temporal.server.api.replication.v1.SyncReplicationState - 122, // 53: temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesResponse.messages:type_name -> temporal.server.api.replication.v1.WorkflowReplicationMessages - 123, // 54: temporal.server.api.adminservice.v1.GetNamespaceResponse.info:type_name -> temporal.api.namespace.v1.NamespaceInfo - 124, // 55: temporal.server.api.adminservice.v1.GetNamespaceResponse.config:type_name -> temporal.api.namespace.v1.NamespaceConfig - 125, // 56: temporal.server.api.adminservice.v1.GetNamespaceResponse.replication_config:type_name -> temporal.api.replication.v1.NamespaceReplicationConfig - 126, // 57: temporal.server.api.adminservice.v1.GetNamespaceResponse.failover_history:type_name -> temporal.api.replication.v1.FailoverStatus - 127, // 58: temporal.server.api.adminservice.v1.GetDLQTasksRequest.dlq_key:type_name -> temporal.server.api.common.v1.HistoryDLQKey - 128, // 59: temporal.server.api.adminservice.v1.GetDLQTasksResponse.dlq_tasks:type_name -> temporal.server.api.common.v1.HistoryDLQTask - 127, // 60: temporal.server.api.adminservice.v1.PurgeDLQTasksRequest.dlq_key:type_name -> temporal.server.api.common.v1.HistoryDLQKey - 129, // 61: temporal.server.api.adminservice.v1.PurgeDLQTasksRequest.inclusive_max_task_metadata:type_name -> temporal.server.api.common.v1.HistoryDLQTaskMetadata - 127, // 62: temporal.server.api.adminservice.v1.MergeDLQTasksRequest.dlq_key:type_name -> temporal.server.api.common.v1.HistoryDLQKey - 129, // 63: temporal.server.api.adminservice.v1.MergeDLQTasksRequest.inclusive_max_task_metadata:type_name -> temporal.server.api.common.v1.HistoryDLQTaskMetadata - 127, // 64: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.dlq_key:type_name -> temporal.server.api.common.v1.HistoryDLQKey - 130, // 65: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.operation_type:type_name -> temporal.server.api.enums.v1.DLQOperationType - 131, // 66: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.operation_state:type_name -> temporal.server.api.enums.v1.DLQOperationState - 106, // 67: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.start_time:type_name -> google.protobuf.Timestamp - 106, // 68: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.end_time:type_name -> google.protobuf.Timestamp - 95, // 69: temporal.server.api.adminservice.v1.AddTasksRequest.tasks:type_name -> temporal.server.api.adminservice.v1.AddTasksRequest.Task - 96, // 70: temporal.server.api.adminservice.v1.ListQueuesResponse.queues:type_name -> temporal.server.api.adminservice.v1.ListQueuesResponse.QueueInfo - 132, // 71: temporal.server.api.adminservice.v1.DeepHealthCheckResponse.state:type_name -> temporal.server.api.enums.v1.HealthState - 98, // 72: temporal.server.api.adminservice.v1.SyncWorkflowStateRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 133, // 73: temporal.server.api.adminservice.v1.SyncWorkflowStateRequest.versioned_transition:type_name -> temporal.server.api.persistence.v1.VersionedTransition - 134, // 74: temporal.server.api.adminservice.v1.SyncWorkflowStateRequest.version_histories:type_name -> temporal.server.api.history.v1.VersionHistories - 135, // 75: temporal.server.api.adminservice.v1.SyncWorkflowStateResponse.versioned_transition_artifact:type_name -> temporal.server.api.replication.v1.VersionedTransitionArtifact - 98, // 76: temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution - 136, // 77: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition - 137, // 78: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionRequest.build_ids:type_name -> temporal.api.taskqueue.v1.TaskQueueVersionSelection - 97, // 79: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse.versions_info_internal:type_name -> temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry - 136, // 80: temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition - 108, // 81: temporal.server.api.adminservice.v1.GetReplicationMessagesResponse.ShardMessagesEntry.value:type_name -> temporal.server.api.replication.v1.ReplicationMessages - 138, // 82: temporal.server.api.adminservice.v1.AddSearchAttributesRequest.SearchAttributesEntry.value:type_name -> temporal.api.enums.v1.IndexedValueType - 138, // 83: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.CustomAttributesEntry.value:type_name -> temporal.api.enums.v1.IndexedValueType - 138, // 84: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.SystemAttributesEntry.value:type_name -> temporal.api.enums.v1.IndexedValueType - 99, // 85: temporal.server.api.adminservice.v1.AddTasksRequest.Task.blob:type_name -> temporal.api.common.v1.DataBlob - 139, // 86: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry.value:type_name -> temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal - 87, // [87:87] is the sub-list for method output_type - 87, // [87:87] is the sub-list for method input_type - 87, // [87:87] is the sub-list for extension type_name - 87, // [87:87] is the sub-list for extension extendee - 0, // [0:87] is the sub-list for field type_name + 108, // 12: temporal.server.api.adminservice.v1.Task.task_type:type_name -> temporal.server.api.enums.v1.TaskType + 109, // 13: temporal.server.api.adminservice.v1.Task.fire_time:type_name -> google.protobuf.Timestamp + 109, // 14: temporal.server.api.adminservice.v1.RemoveTaskRequest.visibility_time:type_name -> google.protobuf.Timestamp + 101, // 15: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Request.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 102, // 16: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Response.history_batches:type_name -> temporal.api.common.v1.DataBlob + 103, // 17: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Response.version_history:type_name -> temporal.server.api.history.v1.VersionHistory + 101, // 18: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 102, // 19: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryResponse.history_batches:type_name -> temporal.api.common.v1.DataBlob + 103, // 20: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryResponse.version_history:type_name -> temporal.server.api.history.v1.VersionHistory + 110, // 21: temporal.server.api.adminservice.v1.GetReplicationMessagesRequest.tokens:type_name -> temporal.server.api.replication.v1.ReplicationToken + 91, // 22: temporal.server.api.adminservice.v1.GetReplicationMessagesResponse.shard_messages:type_name -> temporal.server.api.adminservice.v1.GetReplicationMessagesResponse.ShardMessagesEntry + 111, // 23: temporal.server.api.adminservice.v1.GetNamespaceReplicationMessagesResponse.messages:type_name -> temporal.server.api.replication.v1.ReplicationMessages + 112, // 24: temporal.server.api.adminservice.v1.GetDLQReplicationMessagesRequest.task_infos:type_name -> temporal.server.api.replication.v1.ReplicationTaskInfo + 113, // 25: temporal.server.api.adminservice.v1.GetDLQReplicationMessagesResponse.replication_tasks:type_name -> temporal.server.api.replication.v1.ReplicationTask + 101, // 26: temporal.server.api.adminservice.v1.ReapplyEventsRequest.workflow_execution:type_name -> temporal.api.common.v1.WorkflowExecution + 102, // 27: temporal.server.api.adminservice.v1.ReapplyEventsRequest.events:type_name -> temporal.api.common.v1.DataBlob + 92, // 28: temporal.server.api.adminservice.v1.AddSearchAttributesRequest.search_attributes:type_name -> temporal.server.api.adminservice.v1.AddSearchAttributesRequest.SearchAttributesEntry + 93, // 29: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.custom_attributes:type_name -> temporal.server.api.adminservice.v1.GetSearchAttributesResponse.CustomAttributesEntry + 94, // 30: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.system_attributes:type_name -> temporal.server.api.adminservice.v1.GetSearchAttributesResponse.SystemAttributesEntry + 95, // 31: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.mapping:type_name -> temporal.server.api.adminservice.v1.GetSearchAttributesResponse.MappingEntry + 114, // 32: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.add_workflow_execution_info:type_name -> temporal.api.workflow.v1.WorkflowExecutionInfo + 96, // 33: temporal.server.api.adminservice.v1.DescribeClusterResponse.supported_clients:type_name -> temporal.server.api.adminservice.v1.DescribeClusterResponse.SupportedClientsEntry + 115, // 34: temporal.server.api.adminservice.v1.DescribeClusterResponse.membership_info:type_name -> temporal.server.api.cluster.v1.MembershipInfo + 116, // 35: temporal.server.api.adminservice.v1.DescribeClusterResponse.version_info:type_name -> temporal.api.version.v1.VersionInfo + 97, // 36: temporal.server.api.adminservice.v1.DescribeClusterResponse.tags:type_name -> temporal.server.api.adminservice.v1.DescribeClusterResponse.TagsEntry + 117, // 37: temporal.server.api.adminservice.v1.ListClustersResponse.clusters:type_name -> temporal.server.api.persistence.v1.ClusterMetadata + 118, // 38: temporal.server.api.adminservice.v1.ListClusterMembersRequest.last_heartbeat_within:type_name -> google.protobuf.Duration + 119, // 39: temporal.server.api.adminservice.v1.ListClusterMembersRequest.role:type_name -> temporal.server.api.enums.v1.ClusterMemberRole + 109, // 40: temporal.server.api.adminservice.v1.ListClusterMembersRequest.session_started_after_time:type_name -> google.protobuf.Timestamp + 120, // 41: temporal.server.api.adminservice.v1.ListClusterMembersResponse.active_members:type_name -> temporal.server.api.cluster.v1.ClusterMember + 121, // 42: temporal.server.api.adminservice.v1.GetDLQMessagesRequest.type:type_name -> temporal.server.api.enums.v1.DeadLetterQueueType + 121, // 43: temporal.server.api.adminservice.v1.GetDLQMessagesResponse.type:type_name -> temporal.server.api.enums.v1.DeadLetterQueueType + 113, // 44: temporal.server.api.adminservice.v1.GetDLQMessagesResponse.replication_tasks:type_name -> temporal.server.api.replication.v1.ReplicationTask + 112, // 45: temporal.server.api.adminservice.v1.GetDLQMessagesResponse.replication_tasks_info:type_name -> temporal.server.api.replication.v1.ReplicationTaskInfo + 121, // 46: temporal.server.api.adminservice.v1.PurgeDLQMessagesRequest.type:type_name -> temporal.server.api.enums.v1.DeadLetterQueueType + 121, // 47: temporal.server.api.adminservice.v1.MergeDLQMessagesRequest.type:type_name -> temporal.server.api.enums.v1.DeadLetterQueueType + 101, // 48: temporal.server.api.adminservice.v1.RefreshWorkflowTasksRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 122, // 49: temporal.server.api.adminservice.v1.GetTaskQueueTasksRequest.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 123, // 50: temporal.server.api.adminservice.v1.GetTaskQueueTasksResponse.tasks:type_name -> temporal.server.api.persistence.v1.AllocatedTaskInfo + 101, // 51: temporal.server.api.adminservice.v1.DeleteWorkflowExecutionRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 124, // 52: temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesRequest.sync_replication_state:type_name -> temporal.server.api.replication.v1.SyncReplicationState + 125, // 53: temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesResponse.messages:type_name -> temporal.server.api.replication.v1.WorkflowReplicationMessages + 126, // 54: temporal.server.api.adminservice.v1.GetNamespaceResponse.info:type_name -> temporal.api.namespace.v1.NamespaceInfo + 127, // 55: temporal.server.api.adminservice.v1.GetNamespaceResponse.config:type_name -> temporal.api.namespace.v1.NamespaceConfig + 128, // 56: temporal.server.api.adminservice.v1.GetNamespaceResponse.replication_config:type_name -> temporal.api.replication.v1.NamespaceReplicationConfig + 129, // 57: temporal.server.api.adminservice.v1.GetNamespaceResponse.failover_history:type_name -> temporal.api.replication.v1.FailoverStatus + 130, // 58: temporal.server.api.adminservice.v1.GetDLQTasksRequest.dlq_key:type_name -> temporal.server.api.common.v1.HistoryDLQKey + 131, // 59: temporal.server.api.adminservice.v1.GetDLQTasksResponse.dlq_tasks:type_name -> temporal.server.api.common.v1.HistoryDLQTask + 130, // 60: temporal.server.api.adminservice.v1.PurgeDLQTasksRequest.dlq_key:type_name -> temporal.server.api.common.v1.HistoryDLQKey + 132, // 61: temporal.server.api.adminservice.v1.PurgeDLQTasksRequest.inclusive_max_task_metadata:type_name -> temporal.server.api.common.v1.HistoryDLQTaskMetadata + 130, // 62: temporal.server.api.adminservice.v1.MergeDLQTasksRequest.dlq_key:type_name -> temporal.server.api.common.v1.HistoryDLQKey + 132, // 63: temporal.server.api.adminservice.v1.MergeDLQTasksRequest.inclusive_max_task_metadata:type_name -> temporal.server.api.common.v1.HistoryDLQTaskMetadata + 130, // 64: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.dlq_key:type_name -> temporal.server.api.common.v1.HistoryDLQKey + 133, // 65: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.operation_type:type_name -> temporal.server.api.enums.v1.DLQOperationType + 134, // 66: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.operation_state:type_name -> temporal.server.api.enums.v1.DLQOperationState + 109, // 67: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.start_time:type_name -> google.protobuf.Timestamp + 109, // 68: temporal.server.api.adminservice.v1.DescribeDLQJobResponse.end_time:type_name -> google.protobuf.Timestamp + 98, // 69: temporal.server.api.adminservice.v1.AddTasksRequest.tasks:type_name -> temporal.server.api.adminservice.v1.AddTasksRequest.Task + 99, // 70: temporal.server.api.adminservice.v1.ListQueuesResponse.queues:type_name -> temporal.server.api.adminservice.v1.ListQueuesResponse.QueueInfo + 135, // 71: temporal.server.api.adminservice.v1.DeepHealthCheckResponse.state:type_name -> temporal.server.api.enums.v1.HealthState + 101, // 72: temporal.server.api.adminservice.v1.SyncWorkflowStateRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 136, // 73: temporal.server.api.adminservice.v1.SyncWorkflowStateRequest.versioned_transition:type_name -> temporal.server.api.persistence.v1.VersionedTransition + 137, // 74: temporal.server.api.adminservice.v1.SyncWorkflowStateRequest.version_histories:type_name -> temporal.server.api.history.v1.VersionHistories + 138, // 75: temporal.server.api.adminservice.v1.SyncWorkflowStateResponse.versioned_transition_artifact:type_name -> temporal.server.api.replication.v1.VersionedTransitionArtifact + 101, // 76: temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksRequest.execution:type_name -> temporal.api.common.v1.WorkflowExecution + 139, // 77: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition + 140, // 78: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionRequest.build_ids:type_name -> temporal.api.taskqueue.v1.TaskQueueVersionSelection + 100, // 79: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse.versions_info_internal:type_name -> temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry + 139, // 80: temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionRequest.task_queue_partition:type_name -> temporal.server.api.taskqueue.v1.TaskQueuePartition + 101, // 81: temporal.server.api.adminservice.v1.StartAdminBatchOperationRequest.executions:type_name -> temporal.api.common.v1.WorkflowExecution + 90, // 82: temporal.server.api.adminservice.v1.StartAdminBatchOperationRequest.refresh_workflow_tasks_operation:type_name -> temporal.server.api.adminservice.v1.BatchOperationRefreshWorkflowTasks + 111, // 83: temporal.server.api.adminservice.v1.GetReplicationMessagesResponse.ShardMessagesEntry.value:type_name -> temporal.server.api.replication.v1.ReplicationMessages + 141, // 84: temporal.server.api.adminservice.v1.AddSearchAttributesRequest.SearchAttributesEntry.value:type_name -> temporal.api.enums.v1.IndexedValueType + 141, // 85: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.CustomAttributesEntry.value:type_name -> temporal.api.enums.v1.IndexedValueType + 141, // 86: temporal.server.api.adminservice.v1.GetSearchAttributesResponse.SystemAttributesEntry.value:type_name -> temporal.api.enums.v1.IndexedValueType + 102, // 87: temporal.server.api.adminservice.v1.AddTasksRequest.Task.blob:type_name -> temporal.api.common.v1.DataBlob + 142, // 88: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse.VersionsInfoInternalEntry.value:type_name -> temporal.server.api.taskqueue.v1.TaskQueueVersionInfoInternal + 89, // [89:89] is the sub-list for method output_type + 89, // [89:89] is the sub-list for method input_type + 89, // [89:89] is the sub-list for extension type_name + 89, // [89:89] is the sub-list for extension extendee + 0, // [0:89] is the sub-list for field type_name } func init() { file_temporal_server_api_adminservice_v1_request_response_proto_init() } @@ -6019,13 +6248,16 @@ func file_temporal_server_api_adminservice_v1_request_response_proto_init() { (*GetNamespaceRequest_Namespace)(nil), (*GetNamespaceRequest_Id)(nil), } + file_temporal_server_api_adminservice_v1_request_response_proto_msgTypes[88].OneofWrappers = []any{ + (*StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_temporal_server_api_adminservice_v1_request_response_proto_rawDesc), len(file_temporal_server_api_adminservice_v1_request_response_proto_rawDesc)), NumEnums: 0, - NumMessages: 98, + NumMessages: 101, NumExtensions: 0, NumServices: 0, }, diff --git a/api/adminservice/v1/service.pb.go b/api/adminservice/v1/service.pb.go index 7c2aaf2b35..210160f96b 100644 --- a/api/adminservice/v1/service.pb.go +++ b/api/adminservice/v1/service.pb.go @@ -25,7 +25,7 @@ var File_temporal_server_api_adminservice_v1_service_proto protoreflect.FileDesc const file_temporal_server_api_adminservice_v1_service_proto_rawDesc = "" + "\n" + - "1temporal/server/api/adminservice/v1/service.proto\x12#temporal.server.api.adminservice.v1\x1a:temporal/server/api/adminservice/v1/request_response.proto2\xbf4\n" + + "1temporal/server/api/adminservice/v1/service.proto\x12#temporal.server.api.adminservice.v1\x1a:temporal/server/api/adminservice/v1/request_response.proto2\xeb5\n" + "\fAdminService\x12\x9a\x01\n" + "\x13RebuildMutableState\x12?.temporal.server.api.adminservice.v1.RebuildMutableStateRequest\x1a@.temporal.server.api.adminservice.v1.RebuildMutableStateResponse\"\x00\x12\xa6\x01\n" + "\x17ImportWorkflowExecution\x12C.temporal.server.api.adminservice.v1.ImportWorkflowExecutionRequest\x1aD.temporal.server.api.adminservice.v1.ImportWorkflowExecutionResponse\"\x00\x12\x9d\x01\n" + @@ -54,7 +54,8 @@ const file_temporal_server_api_adminservice_v1_service_proto_rawDesc = "" + "\x0eGetDLQMessages\x12:.temporal.server.api.adminservice.v1.GetDLQMessagesRequest\x1a;.temporal.server.api.adminservice.v1.GetDLQMessagesResponse\"\x00\x12\x91\x01\n" + "\x10PurgeDLQMessages\x12<.temporal.server.api.adminservice.v1.PurgeDLQMessagesRequest\x1a=.temporal.server.api.adminservice.v1.PurgeDLQMessagesResponse\"\x00\x12\x91\x01\n" + "\x10MergeDLQMessages\x12<.temporal.server.api.adminservice.v1.MergeDLQMessagesRequest\x1a=.temporal.server.api.adminservice.v1.MergeDLQMessagesResponse\"\x00\x12\x9d\x01\n" + - "\x14RefreshWorkflowTasks\x12@.temporal.server.api.adminservice.v1.RefreshWorkflowTasksRequest\x1aA.temporal.server.api.adminservice.v1.RefreshWorkflowTasksResponse\"\x00\x12\xa3\x01\n" + + "\x14RefreshWorkflowTasks\x12@.temporal.server.api.adminservice.v1.RefreshWorkflowTasksRequest\x1aA.temporal.server.api.adminservice.v1.RefreshWorkflowTasksResponse\"\x00\x12\xa9\x01\n" + + "\x18StartAdminBatchOperation\x12D.temporal.server.api.adminservice.v1.StartAdminBatchOperationRequest\x1aE.temporal.server.api.adminservice.v1.StartAdminBatchOperationResponse\"\x00\x12\xa3\x01\n" + "\x16ResendReplicationTasks\x12B.temporal.server.api.adminservice.v1.ResendReplicationTasksRequest\x1aC.temporal.server.api.adminservice.v1.ResendReplicationTasksResponse\"\x00\x12\x94\x01\n" + "\x11GetTaskQueueTasks\x12=.temporal.server.api.adminservice.v1.GetTaskQueueTasksRequest\x1a>.temporal.server.api.adminservice.v1.GetTaskQueueTasksResponse\"\x00\x12\xa6\x01\n" + "\x17DeleteWorkflowExecution\x12C.temporal.server.api.adminservice.v1.DeleteWorkflowExecutionRequest\x1aD.temporal.server.api.adminservice.v1.DeleteWorkflowExecutionResponse\"\x00\x12\xc8\x01\n" + @@ -101,66 +102,68 @@ var file_temporal_server_api_adminservice_v1_service_proto_goTypes = []any{ (*PurgeDLQMessagesRequest)(nil), // 23: temporal.server.api.adminservice.v1.PurgeDLQMessagesRequest (*MergeDLQMessagesRequest)(nil), // 24: temporal.server.api.adminservice.v1.MergeDLQMessagesRequest (*RefreshWorkflowTasksRequest)(nil), // 25: temporal.server.api.adminservice.v1.RefreshWorkflowTasksRequest - (*ResendReplicationTasksRequest)(nil), // 26: temporal.server.api.adminservice.v1.ResendReplicationTasksRequest - (*GetTaskQueueTasksRequest)(nil), // 27: temporal.server.api.adminservice.v1.GetTaskQueueTasksRequest - (*DeleteWorkflowExecutionRequest)(nil), // 28: temporal.server.api.adminservice.v1.DeleteWorkflowExecutionRequest - (*StreamWorkflowReplicationMessagesRequest)(nil), // 29: temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesRequest - (*GetNamespaceRequest)(nil), // 30: temporal.server.api.adminservice.v1.GetNamespaceRequest - (*GetDLQTasksRequest)(nil), // 31: temporal.server.api.adminservice.v1.GetDLQTasksRequest - (*PurgeDLQTasksRequest)(nil), // 32: temporal.server.api.adminservice.v1.PurgeDLQTasksRequest - (*MergeDLQTasksRequest)(nil), // 33: temporal.server.api.adminservice.v1.MergeDLQTasksRequest - (*DescribeDLQJobRequest)(nil), // 34: temporal.server.api.adminservice.v1.DescribeDLQJobRequest - (*CancelDLQJobRequest)(nil), // 35: temporal.server.api.adminservice.v1.CancelDLQJobRequest - (*AddTasksRequest)(nil), // 36: temporal.server.api.adminservice.v1.AddTasksRequest - (*ListQueuesRequest)(nil), // 37: temporal.server.api.adminservice.v1.ListQueuesRequest - (*DeepHealthCheckRequest)(nil), // 38: temporal.server.api.adminservice.v1.DeepHealthCheckRequest - (*SyncWorkflowStateRequest)(nil), // 39: temporal.server.api.adminservice.v1.SyncWorkflowStateRequest - (*GenerateLastHistoryReplicationTasksRequest)(nil), // 40: temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksRequest - (*DescribeTaskQueuePartitionRequest)(nil), // 41: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionRequest - (*ForceUnloadTaskQueuePartitionRequest)(nil), // 42: temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionRequest - (*RebuildMutableStateResponse)(nil), // 43: temporal.server.api.adminservice.v1.RebuildMutableStateResponse - (*ImportWorkflowExecutionResponse)(nil), // 44: temporal.server.api.adminservice.v1.ImportWorkflowExecutionResponse - (*DescribeMutableStateResponse)(nil), // 45: temporal.server.api.adminservice.v1.DescribeMutableStateResponse - (*DescribeHistoryHostResponse)(nil), // 46: temporal.server.api.adminservice.v1.DescribeHistoryHostResponse - (*GetShardResponse)(nil), // 47: temporal.server.api.adminservice.v1.GetShardResponse - (*CloseShardResponse)(nil), // 48: temporal.server.api.adminservice.v1.CloseShardResponse - (*ListHistoryTasksResponse)(nil), // 49: temporal.server.api.adminservice.v1.ListHistoryTasksResponse - (*RemoveTaskResponse)(nil), // 50: temporal.server.api.adminservice.v1.RemoveTaskResponse - (*GetWorkflowExecutionRawHistoryV2Response)(nil), // 51: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Response - (*GetWorkflowExecutionRawHistoryResponse)(nil), // 52: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryResponse - (*GetReplicationMessagesResponse)(nil), // 53: temporal.server.api.adminservice.v1.GetReplicationMessagesResponse - (*GetNamespaceReplicationMessagesResponse)(nil), // 54: temporal.server.api.adminservice.v1.GetNamespaceReplicationMessagesResponse - (*GetDLQReplicationMessagesResponse)(nil), // 55: temporal.server.api.adminservice.v1.GetDLQReplicationMessagesResponse - (*ReapplyEventsResponse)(nil), // 56: temporal.server.api.adminservice.v1.ReapplyEventsResponse - (*AddSearchAttributesResponse)(nil), // 57: temporal.server.api.adminservice.v1.AddSearchAttributesResponse - (*RemoveSearchAttributesResponse)(nil), // 58: temporal.server.api.adminservice.v1.RemoveSearchAttributesResponse - (*GetSearchAttributesResponse)(nil), // 59: temporal.server.api.adminservice.v1.GetSearchAttributesResponse - (*DescribeClusterResponse)(nil), // 60: temporal.server.api.adminservice.v1.DescribeClusterResponse - (*ListClustersResponse)(nil), // 61: temporal.server.api.adminservice.v1.ListClustersResponse - (*ListClusterMembersResponse)(nil), // 62: temporal.server.api.adminservice.v1.ListClusterMembersResponse - (*AddOrUpdateRemoteClusterResponse)(nil), // 63: temporal.server.api.adminservice.v1.AddOrUpdateRemoteClusterResponse - (*RemoveRemoteClusterResponse)(nil), // 64: temporal.server.api.adminservice.v1.RemoveRemoteClusterResponse - (*GetDLQMessagesResponse)(nil), // 65: temporal.server.api.adminservice.v1.GetDLQMessagesResponse - (*PurgeDLQMessagesResponse)(nil), // 66: temporal.server.api.adminservice.v1.PurgeDLQMessagesResponse - (*MergeDLQMessagesResponse)(nil), // 67: temporal.server.api.adminservice.v1.MergeDLQMessagesResponse - (*RefreshWorkflowTasksResponse)(nil), // 68: temporal.server.api.adminservice.v1.RefreshWorkflowTasksResponse - (*ResendReplicationTasksResponse)(nil), // 69: temporal.server.api.adminservice.v1.ResendReplicationTasksResponse - (*GetTaskQueueTasksResponse)(nil), // 70: temporal.server.api.adminservice.v1.GetTaskQueueTasksResponse - (*DeleteWorkflowExecutionResponse)(nil), // 71: temporal.server.api.adminservice.v1.DeleteWorkflowExecutionResponse - (*StreamWorkflowReplicationMessagesResponse)(nil), // 72: temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesResponse - (*GetNamespaceResponse)(nil), // 73: temporal.server.api.adminservice.v1.GetNamespaceResponse - (*GetDLQTasksResponse)(nil), // 74: temporal.server.api.adminservice.v1.GetDLQTasksResponse - (*PurgeDLQTasksResponse)(nil), // 75: temporal.server.api.adminservice.v1.PurgeDLQTasksResponse - (*MergeDLQTasksResponse)(nil), // 76: temporal.server.api.adminservice.v1.MergeDLQTasksResponse - (*DescribeDLQJobResponse)(nil), // 77: temporal.server.api.adminservice.v1.DescribeDLQJobResponse - (*CancelDLQJobResponse)(nil), // 78: temporal.server.api.adminservice.v1.CancelDLQJobResponse - (*AddTasksResponse)(nil), // 79: temporal.server.api.adminservice.v1.AddTasksResponse - (*ListQueuesResponse)(nil), // 80: temporal.server.api.adminservice.v1.ListQueuesResponse - (*DeepHealthCheckResponse)(nil), // 81: temporal.server.api.adminservice.v1.DeepHealthCheckResponse - (*SyncWorkflowStateResponse)(nil), // 82: temporal.server.api.adminservice.v1.SyncWorkflowStateResponse - (*GenerateLastHistoryReplicationTasksResponse)(nil), // 83: temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksResponse - (*DescribeTaskQueuePartitionResponse)(nil), // 84: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse - (*ForceUnloadTaskQueuePartitionResponse)(nil), // 85: temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionResponse + (*StartAdminBatchOperationRequest)(nil), // 26: temporal.server.api.adminservice.v1.StartAdminBatchOperationRequest + (*ResendReplicationTasksRequest)(nil), // 27: temporal.server.api.adminservice.v1.ResendReplicationTasksRequest + (*GetTaskQueueTasksRequest)(nil), // 28: temporal.server.api.adminservice.v1.GetTaskQueueTasksRequest + (*DeleteWorkflowExecutionRequest)(nil), // 29: temporal.server.api.adminservice.v1.DeleteWorkflowExecutionRequest + (*StreamWorkflowReplicationMessagesRequest)(nil), // 30: temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesRequest + (*GetNamespaceRequest)(nil), // 31: temporal.server.api.adminservice.v1.GetNamespaceRequest + (*GetDLQTasksRequest)(nil), // 32: temporal.server.api.adminservice.v1.GetDLQTasksRequest + (*PurgeDLQTasksRequest)(nil), // 33: temporal.server.api.adminservice.v1.PurgeDLQTasksRequest + (*MergeDLQTasksRequest)(nil), // 34: temporal.server.api.adminservice.v1.MergeDLQTasksRequest + (*DescribeDLQJobRequest)(nil), // 35: temporal.server.api.adminservice.v1.DescribeDLQJobRequest + (*CancelDLQJobRequest)(nil), // 36: temporal.server.api.adminservice.v1.CancelDLQJobRequest + (*AddTasksRequest)(nil), // 37: temporal.server.api.adminservice.v1.AddTasksRequest + (*ListQueuesRequest)(nil), // 38: temporal.server.api.adminservice.v1.ListQueuesRequest + (*DeepHealthCheckRequest)(nil), // 39: temporal.server.api.adminservice.v1.DeepHealthCheckRequest + (*SyncWorkflowStateRequest)(nil), // 40: temporal.server.api.adminservice.v1.SyncWorkflowStateRequest + (*GenerateLastHistoryReplicationTasksRequest)(nil), // 41: temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksRequest + (*DescribeTaskQueuePartitionRequest)(nil), // 42: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionRequest + (*ForceUnloadTaskQueuePartitionRequest)(nil), // 43: temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionRequest + (*RebuildMutableStateResponse)(nil), // 44: temporal.server.api.adminservice.v1.RebuildMutableStateResponse + (*ImportWorkflowExecutionResponse)(nil), // 45: temporal.server.api.adminservice.v1.ImportWorkflowExecutionResponse + (*DescribeMutableStateResponse)(nil), // 46: temporal.server.api.adminservice.v1.DescribeMutableStateResponse + (*DescribeHistoryHostResponse)(nil), // 47: temporal.server.api.adminservice.v1.DescribeHistoryHostResponse + (*GetShardResponse)(nil), // 48: temporal.server.api.adminservice.v1.GetShardResponse + (*CloseShardResponse)(nil), // 49: temporal.server.api.adminservice.v1.CloseShardResponse + (*ListHistoryTasksResponse)(nil), // 50: temporal.server.api.adminservice.v1.ListHistoryTasksResponse + (*RemoveTaskResponse)(nil), // 51: temporal.server.api.adminservice.v1.RemoveTaskResponse + (*GetWorkflowExecutionRawHistoryV2Response)(nil), // 52: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Response + (*GetWorkflowExecutionRawHistoryResponse)(nil), // 53: temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryResponse + (*GetReplicationMessagesResponse)(nil), // 54: temporal.server.api.adminservice.v1.GetReplicationMessagesResponse + (*GetNamespaceReplicationMessagesResponse)(nil), // 55: temporal.server.api.adminservice.v1.GetNamespaceReplicationMessagesResponse + (*GetDLQReplicationMessagesResponse)(nil), // 56: temporal.server.api.adminservice.v1.GetDLQReplicationMessagesResponse + (*ReapplyEventsResponse)(nil), // 57: temporal.server.api.adminservice.v1.ReapplyEventsResponse + (*AddSearchAttributesResponse)(nil), // 58: temporal.server.api.adminservice.v1.AddSearchAttributesResponse + (*RemoveSearchAttributesResponse)(nil), // 59: temporal.server.api.adminservice.v1.RemoveSearchAttributesResponse + (*GetSearchAttributesResponse)(nil), // 60: temporal.server.api.adminservice.v1.GetSearchAttributesResponse + (*DescribeClusterResponse)(nil), // 61: temporal.server.api.adminservice.v1.DescribeClusterResponse + (*ListClustersResponse)(nil), // 62: temporal.server.api.adminservice.v1.ListClustersResponse + (*ListClusterMembersResponse)(nil), // 63: temporal.server.api.adminservice.v1.ListClusterMembersResponse + (*AddOrUpdateRemoteClusterResponse)(nil), // 64: temporal.server.api.adminservice.v1.AddOrUpdateRemoteClusterResponse + (*RemoveRemoteClusterResponse)(nil), // 65: temporal.server.api.adminservice.v1.RemoveRemoteClusterResponse + (*GetDLQMessagesResponse)(nil), // 66: temporal.server.api.adminservice.v1.GetDLQMessagesResponse + (*PurgeDLQMessagesResponse)(nil), // 67: temporal.server.api.adminservice.v1.PurgeDLQMessagesResponse + (*MergeDLQMessagesResponse)(nil), // 68: temporal.server.api.adminservice.v1.MergeDLQMessagesResponse + (*RefreshWorkflowTasksResponse)(nil), // 69: temporal.server.api.adminservice.v1.RefreshWorkflowTasksResponse + (*StartAdminBatchOperationResponse)(nil), // 70: temporal.server.api.adminservice.v1.StartAdminBatchOperationResponse + (*ResendReplicationTasksResponse)(nil), // 71: temporal.server.api.adminservice.v1.ResendReplicationTasksResponse + (*GetTaskQueueTasksResponse)(nil), // 72: temporal.server.api.adminservice.v1.GetTaskQueueTasksResponse + (*DeleteWorkflowExecutionResponse)(nil), // 73: temporal.server.api.adminservice.v1.DeleteWorkflowExecutionResponse + (*StreamWorkflowReplicationMessagesResponse)(nil), // 74: temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesResponse + (*GetNamespaceResponse)(nil), // 75: temporal.server.api.adminservice.v1.GetNamespaceResponse + (*GetDLQTasksResponse)(nil), // 76: temporal.server.api.adminservice.v1.GetDLQTasksResponse + (*PurgeDLQTasksResponse)(nil), // 77: temporal.server.api.adminservice.v1.PurgeDLQTasksResponse + (*MergeDLQTasksResponse)(nil), // 78: temporal.server.api.adminservice.v1.MergeDLQTasksResponse + (*DescribeDLQJobResponse)(nil), // 79: temporal.server.api.adminservice.v1.DescribeDLQJobResponse + (*CancelDLQJobResponse)(nil), // 80: temporal.server.api.adminservice.v1.CancelDLQJobResponse + (*AddTasksResponse)(nil), // 81: temporal.server.api.adminservice.v1.AddTasksResponse + (*ListQueuesResponse)(nil), // 82: temporal.server.api.adminservice.v1.ListQueuesResponse + (*DeepHealthCheckResponse)(nil), // 83: temporal.server.api.adminservice.v1.DeepHealthCheckResponse + (*SyncWorkflowStateResponse)(nil), // 84: temporal.server.api.adminservice.v1.SyncWorkflowStateResponse + (*GenerateLastHistoryReplicationTasksResponse)(nil), // 85: temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksResponse + (*DescribeTaskQueuePartitionResponse)(nil), // 86: temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse + (*ForceUnloadTaskQueuePartitionResponse)(nil), // 87: temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionResponse } var file_temporal_server_api_adminservice_v1_service_proto_depIdxs = []int32{ 0, // 0: temporal.server.api.adminservice.v1.AdminService.RebuildMutableState:input_type -> temporal.server.api.adminservice.v1.RebuildMutableStateRequest @@ -189,68 +192,70 @@ var file_temporal_server_api_adminservice_v1_service_proto_depIdxs = []int32{ 23, // 23: temporal.server.api.adminservice.v1.AdminService.PurgeDLQMessages:input_type -> temporal.server.api.adminservice.v1.PurgeDLQMessagesRequest 24, // 24: temporal.server.api.adminservice.v1.AdminService.MergeDLQMessages:input_type -> temporal.server.api.adminservice.v1.MergeDLQMessagesRequest 25, // 25: temporal.server.api.adminservice.v1.AdminService.RefreshWorkflowTasks:input_type -> temporal.server.api.adminservice.v1.RefreshWorkflowTasksRequest - 26, // 26: temporal.server.api.adminservice.v1.AdminService.ResendReplicationTasks:input_type -> temporal.server.api.adminservice.v1.ResendReplicationTasksRequest - 27, // 27: temporal.server.api.adminservice.v1.AdminService.GetTaskQueueTasks:input_type -> temporal.server.api.adminservice.v1.GetTaskQueueTasksRequest - 28, // 28: temporal.server.api.adminservice.v1.AdminService.DeleteWorkflowExecution:input_type -> temporal.server.api.adminservice.v1.DeleteWorkflowExecutionRequest - 29, // 29: temporal.server.api.adminservice.v1.AdminService.StreamWorkflowReplicationMessages:input_type -> temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesRequest - 30, // 30: temporal.server.api.adminservice.v1.AdminService.GetNamespace:input_type -> temporal.server.api.adminservice.v1.GetNamespaceRequest - 31, // 31: temporal.server.api.adminservice.v1.AdminService.GetDLQTasks:input_type -> temporal.server.api.adminservice.v1.GetDLQTasksRequest - 32, // 32: temporal.server.api.adminservice.v1.AdminService.PurgeDLQTasks:input_type -> temporal.server.api.adminservice.v1.PurgeDLQTasksRequest - 33, // 33: temporal.server.api.adminservice.v1.AdminService.MergeDLQTasks:input_type -> temporal.server.api.adminservice.v1.MergeDLQTasksRequest - 34, // 34: temporal.server.api.adminservice.v1.AdminService.DescribeDLQJob:input_type -> temporal.server.api.adminservice.v1.DescribeDLQJobRequest - 35, // 35: temporal.server.api.adminservice.v1.AdminService.CancelDLQJob:input_type -> temporal.server.api.adminservice.v1.CancelDLQJobRequest - 36, // 36: temporal.server.api.adminservice.v1.AdminService.AddTasks:input_type -> temporal.server.api.adminservice.v1.AddTasksRequest - 37, // 37: temporal.server.api.adminservice.v1.AdminService.ListQueues:input_type -> temporal.server.api.adminservice.v1.ListQueuesRequest - 38, // 38: temporal.server.api.adminservice.v1.AdminService.DeepHealthCheck:input_type -> temporal.server.api.adminservice.v1.DeepHealthCheckRequest - 39, // 39: temporal.server.api.adminservice.v1.AdminService.SyncWorkflowState:input_type -> temporal.server.api.adminservice.v1.SyncWorkflowStateRequest - 40, // 40: temporal.server.api.adminservice.v1.AdminService.GenerateLastHistoryReplicationTasks:input_type -> temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksRequest - 41, // 41: temporal.server.api.adminservice.v1.AdminService.DescribeTaskQueuePartition:input_type -> temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionRequest - 42, // 42: temporal.server.api.adminservice.v1.AdminService.ForceUnloadTaskQueuePartition:input_type -> temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionRequest - 43, // 43: temporal.server.api.adminservice.v1.AdminService.RebuildMutableState:output_type -> temporal.server.api.adminservice.v1.RebuildMutableStateResponse - 44, // 44: temporal.server.api.adminservice.v1.AdminService.ImportWorkflowExecution:output_type -> temporal.server.api.adminservice.v1.ImportWorkflowExecutionResponse - 45, // 45: temporal.server.api.adminservice.v1.AdminService.DescribeMutableState:output_type -> temporal.server.api.adminservice.v1.DescribeMutableStateResponse - 46, // 46: temporal.server.api.adminservice.v1.AdminService.DescribeHistoryHost:output_type -> temporal.server.api.adminservice.v1.DescribeHistoryHostResponse - 47, // 47: temporal.server.api.adminservice.v1.AdminService.GetShard:output_type -> temporal.server.api.adminservice.v1.GetShardResponse - 48, // 48: temporal.server.api.adminservice.v1.AdminService.CloseShard:output_type -> temporal.server.api.adminservice.v1.CloseShardResponse - 49, // 49: temporal.server.api.adminservice.v1.AdminService.ListHistoryTasks:output_type -> temporal.server.api.adminservice.v1.ListHistoryTasksResponse - 50, // 50: temporal.server.api.adminservice.v1.AdminService.RemoveTask:output_type -> temporal.server.api.adminservice.v1.RemoveTaskResponse - 51, // 51: temporal.server.api.adminservice.v1.AdminService.GetWorkflowExecutionRawHistoryV2:output_type -> temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Response - 52, // 52: temporal.server.api.adminservice.v1.AdminService.GetWorkflowExecutionRawHistory:output_type -> temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryResponse - 53, // 53: temporal.server.api.adminservice.v1.AdminService.GetReplicationMessages:output_type -> temporal.server.api.adminservice.v1.GetReplicationMessagesResponse - 54, // 54: temporal.server.api.adminservice.v1.AdminService.GetNamespaceReplicationMessages:output_type -> temporal.server.api.adminservice.v1.GetNamespaceReplicationMessagesResponse - 55, // 55: temporal.server.api.adminservice.v1.AdminService.GetDLQReplicationMessages:output_type -> temporal.server.api.adminservice.v1.GetDLQReplicationMessagesResponse - 56, // 56: temporal.server.api.adminservice.v1.AdminService.ReapplyEvents:output_type -> temporal.server.api.adminservice.v1.ReapplyEventsResponse - 57, // 57: temporal.server.api.adminservice.v1.AdminService.AddSearchAttributes:output_type -> temporal.server.api.adminservice.v1.AddSearchAttributesResponse - 58, // 58: temporal.server.api.adminservice.v1.AdminService.RemoveSearchAttributes:output_type -> temporal.server.api.adminservice.v1.RemoveSearchAttributesResponse - 59, // 59: temporal.server.api.adminservice.v1.AdminService.GetSearchAttributes:output_type -> temporal.server.api.adminservice.v1.GetSearchAttributesResponse - 60, // 60: temporal.server.api.adminservice.v1.AdminService.DescribeCluster:output_type -> temporal.server.api.adminservice.v1.DescribeClusterResponse - 61, // 61: temporal.server.api.adminservice.v1.AdminService.ListClusters:output_type -> temporal.server.api.adminservice.v1.ListClustersResponse - 62, // 62: temporal.server.api.adminservice.v1.AdminService.ListClusterMembers:output_type -> temporal.server.api.adminservice.v1.ListClusterMembersResponse - 63, // 63: temporal.server.api.adminservice.v1.AdminService.AddOrUpdateRemoteCluster:output_type -> temporal.server.api.adminservice.v1.AddOrUpdateRemoteClusterResponse - 64, // 64: temporal.server.api.adminservice.v1.AdminService.RemoveRemoteCluster:output_type -> temporal.server.api.adminservice.v1.RemoveRemoteClusterResponse - 65, // 65: temporal.server.api.adminservice.v1.AdminService.GetDLQMessages:output_type -> temporal.server.api.adminservice.v1.GetDLQMessagesResponse - 66, // 66: temporal.server.api.adminservice.v1.AdminService.PurgeDLQMessages:output_type -> temporal.server.api.adminservice.v1.PurgeDLQMessagesResponse - 67, // 67: temporal.server.api.adminservice.v1.AdminService.MergeDLQMessages:output_type -> temporal.server.api.adminservice.v1.MergeDLQMessagesResponse - 68, // 68: temporal.server.api.adminservice.v1.AdminService.RefreshWorkflowTasks:output_type -> temporal.server.api.adminservice.v1.RefreshWorkflowTasksResponse - 69, // 69: temporal.server.api.adminservice.v1.AdminService.ResendReplicationTasks:output_type -> temporal.server.api.adminservice.v1.ResendReplicationTasksResponse - 70, // 70: temporal.server.api.adminservice.v1.AdminService.GetTaskQueueTasks:output_type -> temporal.server.api.adminservice.v1.GetTaskQueueTasksResponse - 71, // 71: temporal.server.api.adminservice.v1.AdminService.DeleteWorkflowExecution:output_type -> temporal.server.api.adminservice.v1.DeleteWorkflowExecutionResponse - 72, // 72: temporal.server.api.adminservice.v1.AdminService.StreamWorkflowReplicationMessages:output_type -> temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesResponse - 73, // 73: temporal.server.api.adminservice.v1.AdminService.GetNamespace:output_type -> temporal.server.api.adminservice.v1.GetNamespaceResponse - 74, // 74: temporal.server.api.adminservice.v1.AdminService.GetDLQTasks:output_type -> temporal.server.api.adminservice.v1.GetDLQTasksResponse - 75, // 75: temporal.server.api.adminservice.v1.AdminService.PurgeDLQTasks:output_type -> temporal.server.api.adminservice.v1.PurgeDLQTasksResponse - 76, // 76: temporal.server.api.adminservice.v1.AdminService.MergeDLQTasks:output_type -> temporal.server.api.adminservice.v1.MergeDLQTasksResponse - 77, // 77: temporal.server.api.adminservice.v1.AdminService.DescribeDLQJob:output_type -> temporal.server.api.adminservice.v1.DescribeDLQJobResponse - 78, // 78: temporal.server.api.adminservice.v1.AdminService.CancelDLQJob:output_type -> temporal.server.api.adminservice.v1.CancelDLQJobResponse - 79, // 79: temporal.server.api.adminservice.v1.AdminService.AddTasks:output_type -> temporal.server.api.adminservice.v1.AddTasksResponse - 80, // 80: temporal.server.api.adminservice.v1.AdminService.ListQueues:output_type -> temporal.server.api.adminservice.v1.ListQueuesResponse - 81, // 81: temporal.server.api.adminservice.v1.AdminService.DeepHealthCheck:output_type -> temporal.server.api.adminservice.v1.DeepHealthCheckResponse - 82, // 82: temporal.server.api.adminservice.v1.AdminService.SyncWorkflowState:output_type -> temporal.server.api.adminservice.v1.SyncWorkflowStateResponse - 83, // 83: temporal.server.api.adminservice.v1.AdminService.GenerateLastHistoryReplicationTasks:output_type -> temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksResponse - 84, // 84: temporal.server.api.adminservice.v1.AdminService.DescribeTaskQueuePartition:output_type -> temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse - 85, // 85: temporal.server.api.adminservice.v1.AdminService.ForceUnloadTaskQueuePartition:output_type -> temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionResponse - 43, // [43:86] is the sub-list for method output_type - 0, // [0:43] is the sub-list for method input_type + 26, // 26: temporal.server.api.adminservice.v1.AdminService.StartAdminBatchOperation:input_type -> temporal.server.api.adminservice.v1.StartAdminBatchOperationRequest + 27, // 27: temporal.server.api.adminservice.v1.AdminService.ResendReplicationTasks:input_type -> temporal.server.api.adminservice.v1.ResendReplicationTasksRequest + 28, // 28: temporal.server.api.adminservice.v1.AdminService.GetTaskQueueTasks:input_type -> temporal.server.api.adminservice.v1.GetTaskQueueTasksRequest + 29, // 29: temporal.server.api.adminservice.v1.AdminService.DeleteWorkflowExecution:input_type -> temporal.server.api.adminservice.v1.DeleteWorkflowExecutionRequest + 30, // 30: temporal.server.api.adminservice.v1.AdminService.StreamWorkflowReplicationMessages:input_type -> temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesRequest + 31, // 31: temporal.server.api.adminservice.v1.AdminService.GetNamespace:input_type -> temporal.server.api.adminservice.v1.GetNamespaceRequest + 32, // 32: temporal.server.api.adminservice.v1.AdminService.GetDLQTasks:input_type -> temporal.server.api.adminservice.v1.GetDLQTasksRequest + 33, // 33: temporal.server.api.adminservice.v1.AdminService.PurgeDLQTasks:input_type -> temporal.server.api.adminservice.v1.PurgeDLQTasksRequest + 34, // 34: temporal.server.api.adminservice.v1.AdminService.MergeDLQTasks:input_type -> temporal.server.api.adminservice.v1.MergeDLQTasksRequest + 35, // 35: temporal.server.api.adminservice.v1.AdminService.DescribeDLQJob:input_type -> temporal.server.api.adminservice.v1.DescribeDLQJobRequest + 36, // 36: temporal.server.api.adminservice.v1.AdminService.CancelDLQJob:input_type -> temporal.server.api.adminservice.v1.CancelDLQJobRequest + 37, // 37: temporal.server.api.adminservice.v1.AdminService.AddTasks:input_type -> temporal.server.api.adminservice.v1.AddTasksRequest + 38, // 38: temporal.server.api.adminservice.v1.AdminService.ListQueues:input_type -> temporal.server.api.adminservice.v1.ListQueuesRequest + 39, // 39: temporal.server.api.adminservice.v1.AdminService.DeepHealthCheck:input_type -> temporal.server.api.adminservice.v1.DeepHealthCheckRequest + 40, // 40: temporal.server.api.adminservice.v1.AdminService.SyncWorkflowState:input_type -> temporal.server.api.adminservice.v1.SyncWorkflowStateRequest + 41, // 41: temporal.server.api.adminservice.v1.AdminService.GenerateLastHistoryReplicationTasks:input_type -> temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksRequest + 42, // 42: temporal.server.api.adminservice.v1.AdminService.DescribeTaskQueuePartition:input_type -> temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionRequest + 43, // 43: temporal.server.api.adminservice.v1.AdminService.ForceUnloadTaskQueuePartition:input_type -> temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionRequest + 44, // 44: temporal.server.api.adminservice.v1.AdminService.RebuildMutableState:output_type -> temporal.server.api.adminservice.v1.RebuildMutableStateResponse + 45, // 45: temporal.server.api.adminservice.v1.AdminService.ImportWorkflowExecution:output_type -> temporal.server.api.adminservice.v1.ImportWorkflowExecutionResponse + 46, // 46: temporal.server.api.adminservice.v1.AdminService.DescribeMutableState:output_type -> temporal.server.api.adminservice.v1.DescribeMutableStateResponse + 47, // 47: temporal.server.api.adminservice.v1.AdminService.DescribeHistoryHost:output_type -> temporal.server.api.adminservice.v1.DescribeHistoryHostResponse + 48, // 48: temporal.server.api.adminservice.v1.AdminService.GetShard:output_type -> temporal.server.api.adminservice.v1.GetShardResponse + 49, // 49: temporal.server.api.adminservice.v1.AdminService.CloseShard:output_type -> temporal.server.api.adminservice.v1.CloseShardResponse + 50, // 50: temporal.server.api.adminservice.v1.AdminService.ListHistoryTasks:output_type -> temporal.server.api.adminservice.v1.ListHistoryTasksResponse + 51, // 51: temporal.server.api.adminservice.v1.AdminService.RemoveTask:output_type -> temporal.server.api.adminservice.v1.RemoveTaskResponse + 52, // 52: temporal.server.api.adminservice.v1.AdminService.GetWorkflowExecutionRawHistoryV2:output_type -> temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryV2Response + 53, // 53: temporal.server.api.adminservice.v1.AdminService.GetWorkflowExecutionRawHistory:output_type -> temporal.server.api.adminservice.v1.GetWorkflowExecutionRawHistoryResponse + 54, // 54: temporal.server.api.adminservice.v1.AdminService.GetReplicationMessages:output_type -> temporal.server.api.adminservice.v1.GetReplicationMessagesResponse + 55, // 55: temporal.server.api.adminservice.v1.AdminService.GetNamespaceReplicationMessages:output_type -> temporal.server.api.adminservice.v1.GetNamespaceReplicationMessagesResponse + 56, // 56: temporal.server.api.adminservice.v1.AdminService.GetDLQReplicationMessages:output_type -> temporal.server.api.adminservice.v1.GetDLQReplicationMessagesResponse + 57, // 57: temporal.server.api.adminservice.v1.AdminService.ReapplyEvents:output_type -> temporal.server.api.adminservice.v1.ReapplyEventsResponse + 58, // 58: temporal.server.api.adminservice.v1.AdminService.AddSearchAttributes:output_type -> temporal.server.api.adminservice.v1.AddSearchAttributesResponse + 59, // 59: temporal.server.api.adminservice.v1.AdminService.RemoveSearchAttributes:output_type -> temporal.server.api.adminservice.v1.RemoveSearchAttributesResponse + 60, // 60: temporal.server.api.adminservice.v1.AdminService.GetSearchAttributes:output_type -> temporal.server.api.adminservice.v1.GetSearchAttributesResponse + 61, // 61: temporal.server.api.adminservice.v1.AdminService.DescribeCluster:output_type -> temporal.server.api.adminservice.v1.DescribeClusterResponse + 62, // 62: temporal.server.api.adminservice.v1.AdminService.ListClusters:output_type -> temporal.server.api.adminservice.v1.ListClustersResponse + 63, // 63: temporal.server.api.adminservice.v1.AdminService.ListClusterMembers:output_type -> temporal.server.api.adminservice.v1.ListClusterMembersResponse + 64, // 64: temporal.server.api.adminservice.v1.AdminService.AddOrUpdateRemoteCluster:output_type -> temporal.server.api.adminservice.v1.AddOrUpdateRemoteClusterResponse + 65, // 65: temporal.server.api.adminservice.v1.AdminService.RemoveRemoteCluster:output_type -> temporal.server.api.adminservice.v1.RemoveRemoteClusterResponse + 66, // 66: temporal.server.api.adminservice.v1.AdminService.GetDLQMessages:output_type -> temporal.server.api.adminservice.v1.GetDLQMessagesResponse + 67, // 67: temporal.server.api.adminservice.v1.AdminService.PurgeDLQMessages:output_type -> temporal.server.api.adminservice.v1.PurgeDLQMessagesResponse + 68, // 68: temporal.server.api.adminservice.v1.AdminService.MergeDLQMessages:output_type -> temporal.server.api.adminservice.v1.MergeDLQMessagesResponse + 69, // 69: temporal.server.api.adminservice.v1.AdminService.RefreshWorkflowTasks:output_type -> temporal.server.api.adminservice.v1.RefreshWorkflowTasksResponse + 70, // 70: temporal.server.api.adminservice.v1.AdminService.StartAdminBatchOperation:output_type -> temporal.server.api.adminservice.v1.StartAdminBatchOperationResponse + 71, // 71: temporal.server.api.adminservice.v1.AdminService.ResendReplicationTasks:output_type -> temporal.server.api.adminservice.v1.ResendReplicationTasksResponse + 72, // 72: temporal.server.api.adminservice.v1.AdminService.GetTaskQueueTasks:output_type -> temporal.server.api.adminservice.v1.GetTaskQueueTasksResponse + 73, // 73: temporal.server.api.adminservice.v1.AdminService.DeleteWorkflowExecution:output_type -> temporal.server.api.adminservice.v1.DeleteWorkflowExecutionResponse + 74, // 74: temporal.server.api.adminservice.v1.AdminService.StreamWorkflowReplicationMessages:output_type -> temporal.server.api.adminservice.v1.StreamWorkflowReplicationMessagesResponse + 75, // 75: temporal.server.api.adminservice.v1.AdminService.GetNamespace:output_type -> temporal.server.api.adminservice.v1.GetNamespaceResponse + 76, // 76: temporal.server.api.adminservice.v1.AdminService.GetDLQTasks:output_type -> temporal.server.api.adminservice.v1.GetDLQTasksResponse + 77, // 77: temporal.server.api.adminservice.v1.AdminService.PurgeDLQTasks:output_type -> temporal.server.api.adminservice.v1.PurgeDLQTasksResponse + 78, // 78: temporal.server.api.adminservice.v1.AdminService.MergeDLQTasks:output_type -> temporal.server.api.adminservice.v1.MergeDLQTasksResponse + 79, // 79: temporal.server.api.adminservice.v1.AdminService.DescribeDLQJob:output_type -> temporal.server.api.adminservice.v1.DescribeDLQJobResponse + 80, // 80: temporal.server.api.adminservice.v1.AdminService.CancelDLQJob:output_type -> temporal.server.api.adminservice.v1.CancelDLQJobResponse + 81, // 81: temporal.server.api.adminservice.v1.AdminService.AddTasks:output_type -> temporal.server.api.adminservice.v1.AddTasksResponse + 82, // 82: temporal.server.api.adminservice.v1.AdminService.ListQueues:output_type -> temporal.server.api.adminservice.v1.ListQueuesResponse + 83, // 83: temporal.server.api.adminservice.v1.AdminService.DeepHealthCheck:output_type -> temporal.server.api.adminservice.v1.DeepHealthCheckResponse + 84, // 84: temporal.server.api.adminservice.v1.AdminService.SyncWorkflowState:output_type -> temporal.server.api.adminservice.v1.SyncWorkflowStateResponse + 85, // 85: temporal.server.api.adminservice.v1.AdminService.GenerateLastHistoryReplicationTasks:output_type -> temporal.server.api.adminservice.v1.GenerateLastHistoryReplicationTasksResponse + 86, // 86: temporal.server.api.adminservice.v1.AdminService.DescribeTaskQueuePartition:output_type -> temporal.server.api.adminservice.v1.DescribeTaskQueuePartitionResponse + 87, // 87: temporal.server.api.adminservice.v1.AdminService.ForceUnloadTaskQueuePartition:output_type -> temporal.server.api.adminservice.v1.ForceUnloadTaskQueuePartitionResponse + 44, // [44:88] is the sub-list for method output_type + 0, // [0:44] 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/adminservice/v1/service_grpc.pb.go b/api/adminservice/v1/service_grpc.pb.go index 52816c7fe4..9345b9c1bf 100644 --- a/api/adminservice/v1/service_grpc.pb.go +++ b/api/adminservice/v1/service_grpc.pb.go @@ -46,6 +46,7 @@ const ( AdminService_PurgeDLQMessages_FullMethodName = "/temporal.server.api.adminservice.v1.AdminService/PurgeDLQMessages" AdminService_MergeDLQMessages_FullMethodName = "/temporal.server.api.adminservice.v1.AdminService/MergeDLQMessages" AdminService_RefreshWorkflowTasks_FullMethodName = "/temporal.server.api.adminservice.v1.AdminService/RefreshWorkflowTasks" + AdminService_StartAdminBatchOperation_FullMethodName = "/temporal.server.api.adminservice.v1.AdminService/StartAdminBatchOperation" AdminService_ResendReplicationTasks_FullMethodName = "/temporal.server.api.adminservice.v1.AdminService/ResendReplicationTasks" AdminService_GetTaskQueueTasks_FullMethodName = "/temporal.server.api.adminservice.v1.AdminService/GetTaskQueueTasks" AdminService_DeleteWorkflowExecution_FullMethodName = "/temporal.server.api.adminservice.v1.AdminService/DeleteWorkflowExecution" @@ -130,6 +131,8 @@ type AdminServiceClient interface { MergeDLQMessages(ctx context.Context, in *MergeDLQMessagesRequest, opts ...grpc.CallOption) (*MergeDLQMessagesResponse, error) // RefreshWorkflowTasks refreshes all tasks of a workflow. RefreshWorkflowTasks(ctx context.Context, in *RefreshWorkflowTasksRequest, opts ...grpc.CallOption) (*RefreshWorkflowTasksResponse, error) + // StartAdminBatchOperation starts an admin batch operation. Supports internal operations like RefreshWorkflowTasks. + StartAdminBatchOperation(ctx context.Context, in *StartAdminBatchOperationRequest, opts ...grpc.CallOption) (*StartAdminBatchOperationResponse, error) // ResendReplicationTasks requests replication tasks from remote cluster and apply tasks to current cluster. ResendReplicationTasks(ctx context.Context, in *ResendReplicationTasksRequest, opts ...grpc.CallOption) (*ResendReplicationTasksResponse, error) // GetTaskQueueTasks returns tasks from task queue. @@ -397,6 +400,15 @@ func (c *adminServiceClient) RefreshWorkflowTasks(ctx context.Context, in *Refre return out, nil } +func (c *adminServiceClient) StartAdminBatchOperation(ctx context.Context, in *StartAdminBatchOperationRequest, opts ...grpc.CallOption) (*StartAdminBatchOperationResponse, error) { + out := new(StartAdminBatchOperationResponse) + err := c.cc.Invoke(ctx, AdminService_StartAdminBatchOperation_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *adminServiceClient) ResendReplicationTasks(ctx context.Context, in *ResendReplicationTasksRequest, opts ...grpc.CallOption) (*ResendReplicationTasksResponse, error) { out := new(ResendReplicationTasksResponse) err := c.cc.Invoke(ctx, AdminService_ResendReplicationTasks_FullMethodName, in, out, opts...) @@ -637,6 +649,8 @@ type AdminServiceServer interface { MergeDLQMessages(context.Context, *MergeDLQMessagesRequest) (*MergeDLQMessagesResponse, error) // RefreshWorkflowTasks refreshes all tasks of a workflow. RefreshWorkflowTasks(context.Context, *RefreshWorkflowTasksRequest) (*RefreshWorkflowTasksResponse, error) + // StartAdminBatchOperation starts an admin batch operation. Supports internal operations like RefreshWorkflowTasks. + StartAdminBatchOperation(context.Context, *StartAdminBatchOperationRequest) (*StartAdminBatchOperationResponse, error) // ResendReplicationTasks requests replication tasks from remote cluster and apply tasks to current cluster. ResendReplicationTasks(context.Context, *ResendReplicationTasksRequest) (*ResendReplicationTasksResponse, error) // GetTaskQueueTasks returns tasks from task queue. @@ -745,6 +759,9 @@ func (UnimplementedAdminServiceServer) MergeDLQMessages(context.Context, *MergeD func (UnimplementedAdminServiceServer) RefreshWorkflowTasks(context.Context, *RefreshWorkflowTasksRequest) (*RefreshWorkflowTasksResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RefreshWorkflowTasks not implemented") } +func (UnimplementedAdminServiceServer) StartAdminBatchOperation(context.Context, *StartAdminBatchOperationRequest) (*StartAdminBatchOperationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartAdminBatchOperation not implemented") +} func (UnimplementedAdminServiceServer) ResendReplicationTasks(context.Context, *ResendReplicationTasksRequest) (*ResendReplicationTasksResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ResendReplicationTasks not implemented") } @@ -1277,6 +1294,24 @@ func _AdminService_RefreshWorkflowTasks_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } +func _AdminService_StartAdminBatchOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartAdminBatchOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServiceServer).StartAdminBatchOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AdminService_StartAdminBatchOperation_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServiceServer).StartAdminBatchOperation(ctx, req.(*StartAdminBatchOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _AdminService_ResendReplicationTasks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ResendReplicationTasksRequest) if err := dec(in); err != nil { @@ -1702,6 +1737,10 @@ var AdminService_ServiceDesc = grpc.ServiceDesc{ MethodName: "RefreshWorkflowTasks", Handler: _AdminService_RefreshWorkflowTasks_Handler, }, + { + MethodName: "StartAdminBatchOperation", + Handler: _AdminService_StartAdminBatchOperation_Handler, + }, { MethodName: "ResendReplicationTasks", Handler: _AdminService_ResendReplicationTasks_Handler, diff --git a/api/adminservicemock/v1/service_grpc.pb.mock.go b/api/adminservicemock/v1/service_grpc.pb.mock.go index 53f4338dbd..1a8d921b97 100644 --- a/api/adminservicemock/v1/service_grpc.pb.mock.go +++ b/api/adminservicemock/v1/service_grpc.pb.mock.go @@ -863,6 +863,26 @@ func (mr *MockAdminServiceClientMockRecorder) ResendReplicationTasks(ctx, in any return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResendReplicationTasks", reflect.TypeOf((*MockAdminServiceClient)(nil).ResendReplicationTasks), varargs...) } +// StartAdminBatchOperation mocks base method. +func (m *MockAdminServiceClient) StartAdminBatchOperation(ctx context.Context, in *adminservice.StartAdminBatchOperationRequest, opts ...grpc.CallOption) (*adminservice.StartAdminBatchOperationResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StartAdminBatchOperation", varargs...) + ret0, _ := ret[0].(*adminservice.StartAdminBatchOperationResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StartAdminBatchOperation indicates an expected call of StartAdminBatchOperation. +func (mr *MockAdminServiceClientMockRecorder) StartAdminBatchOperation(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, "StartAdminBatchOperation", reflect.TypeOf((*MockAdminServiceClient)(nil).StartAdminBatchOperation), varargs...) +} + // StreamWorkflowReplicationMessages mocks base method. func (m *MockAdminServiceClient) StreamWorkflowReplicationMessages(ctx context.Context, opts ...grpc.CallOption) (adminservice.AdminService_StreamWorkflowReplicationMessagesClient, error) { m.ctrl.T.Helper() @@ -1680,6 +1700,21 @@ func (mr *MockAdminServiceServerMockRecorder) ResendReplicationTasks(arg0, arg1 return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResendReplicationTasks", reflect.TypeOf((*MockAdminServiceServer)(nil).ResendReplicationTasks), arg0, arg1) } +// StartAdminBatchOperation mocks base method. +func (m *MockAdminServiceServer) StartAdminBatchOperation(arg0 context.Context, arg1 *adminservice.StartAdminBatchOperationRequest) (*adminservice.StartAdminBatchOperationResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StartAdminBatchOperation", arg0, arg1) + ret0, _ := ret[0].(*adminservice.StartAdminBatchOperationResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StartAdminBatchOperation indicates an expected call of StartAdminBatchOperation. +func (mr *MockAdminServiceServerMockRecorder) StartAdminBatchOperation(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartAdminBatchOperation", reflect.TypeOf((*MockAdminServiceServer)(nil).StartAdminBatchOperation), arg0, arg1) +} + // StreamWorkflowReplicationMessages mocks base method. func (m *MockAdminServiceServer) StreamWorkflowReplicationMessages(arg0 adminservice.AdminService_StreamWorkflowReplicationMessagesServer) error { m.ctrl.T.Helper() diff --git a/api/batch/v1/request_response.pb.go b/api/batch/v1/request_response.pb.go index e722706625..1031b7b846 100644 --- a/api/batch/v1/request_response.pb.go +++ b/api/batch/v1/request_response.pb.go @@ -13,6 +13,7 @@ import ( v1 "go.temporal.io/api/enums/v1" v11 "go.temporal.io/api/workflowservice/v1" + v12 "go.temporal.io/server/api/adminservice/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" @@ -34,7 +35,9 @@ type BatchOperationInput struct { NonRetryableErrors []string `protobuf:"bytes,5,rep,name=non_retryable_errors,json=nonRetryableErrors,proto3" json:"non_retryable_errors,omitempty"` BatchType v1.BatchOperationType `protobuf:"varint,6,opt,name=batch_type,json=batchType,proto3,enum=temporal.api.enums.v1.BatchOperationType" json:"batch_type,omitempty"` // The request to start the batch operation. - Request *v11.StartBatchOperationRequest `protobuf:"bytes,7,opt,name=request,proto3" json:"request,omitempty"` + Request *v11.StartBatchOperationRequest `protobuf:"bytes,7,opt,name=request,proto3" json:"request,omitempty"` + // The request to start an admin batch operation. + AdminRequest *v12.StartAdminBatchOperationRequest `protobuf:"bytes,8,opt,name=admin_request,json=adminRequest,proto3" json:"admin_request,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -118,11 +121,18 @@ func (x *BatchOperationInput) GetRequest() *v11.StartBatchOperationRequest { return nil } +func (x *BatchOperationInput) GetAdminRequest() *v12.StartAdminBatchOperationRequest { + if x != nil { + return x.AdminRequest + } + return nil +} + var File_temporal_server_api_batch_v1_request_response_proto protoreflect.FileDescriptor const file_temporal_server_api_batch_v1_request_response_proto_rawDesc = "" + "\n" + - "3temporal/server/api/batch/v1/request_response.proto\x12\x1ctemporal.server.api.batch.v1\x1a6temporal/api/workflowservice/v1/request_response.proto\x1a+temporal/api/enums/v1/batch_operation.proto\x1a\x1egoogle/protobuf/duration.proto\"\xc5\x03\n" + + "3temporal/server/api/batch/v1/request_response.proto\x12\x1ctemporal.server.api.batch.v1\x1a6temporal/api/workflowservice/v1/request_response.proto\x1a+temporal/api/enums/v1/batch_operation.proto\x1a:temporal/server/api/adminservice/v1/request_response.proto\x1a\x1egoogle/protobuf/duration.proto\"\xb0\x04\n" + "\x13BatchOperationInput\x12!\n" + "\fnamespace_id\x18\x01 \x01(\tR\vnamespaceId\x12 \n" + "\vconcurrency\x18\x02 \x01(\x03R\vconcurrency\x12=\n" + @@ -131,7 +141,8 @@ const file_temporal_server_api_batch_v1_request_response_proto_rawDesc = "" + "\x14non_retryable_errors\x18\x05 \x03(\tR\x12nonRetryableErrors\x12H\n" + "\n" + "batch_type\x18\x06 \x01(\x0e2).temporal.api.enums.v1.BatchOperationTypeR\tbatchType\x12U\n" + - "\arequest\x18\a \x01(\v2;.temporal.api.workflowservice.v1.StartBatchOperationRequestR\arequestB*Z(go.temporal.io/server/api/batch/v1;batchb\x06proto3" + "\arequest\x18\a \x01(\v2;.temporal.api.workflowservice.v1.StartBatchOperationRequestR\arequest\x12i\n" + + "\radmin_request\x18\b \x01(\v2D.temporal.server.api.adminservice.v1.StartAdminBatchOperationRequestR\fadminRequestB*Z(go.temporal.io/server/api/batch/v1;batchb\x06proto3" var ( file_temporal_server_api_batch_v1_request_response_proto_rawDescOnce sync.Once @@ -147,20 +158,22 @@ func file_temporal_server_api_batch_v1_request_response_proto_rawDescGZIP() []by var file_temporal_server_api_batch_v1_request_response_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_temporal_server_api_batch_v1_request_response_proto_goTypes = []any{ - (*BatchOperationInput)(nil), // 0: temporal.server.api.batch.v1.BatchOperationInput - (*durationpb.Duration)(nil), // 1: google.protobuf.Duration - (v1.BatchOperationType)(0), // 2: temporal.api.enums.v1.BatchOperationType - (*v11.StartBatchOperationRequest)(nil), // 3: temporal.api.workflowservice.v1.StartBatchOperationRequest + (*BatchOperationInput)(nil), // 0: temporal.server.api.batch.v1.BatchOperationInput + (*durationpb.Duration)(nil), // 1: google.protobuf.Duration + (v1.BatchOperationType)(0), // 2: temporal.api.enums.v1.BatchOperationType + (*v11.StartBatchOperationRequest)(nil), // 3: temporal.api.workflowservice.v1.StartBatchOperationRequest + (*v12.StartAdminBatchOperationRequest)(nil), // 4: temporal.server.api.adminservice.v1.StartAdminBatchOperationRequest } var file_temporal_server_api_batch_v1_request_response_proto_depIdxs = []int32{ 1, // 0: temporal.server.api.batch.v1.BatchOperationInput.activity_heartbeat_timeout:type_name -> google.protobuf.Duration 2, // 1: temporal.server.api.batch.v1.BatchOperationInput.batch_type:type_name -> temporal.api.enums.v1.BatchOperationType 3, // 2: temporal.server.api.batch.v1.BatchOperationInput.request:type_name -> temporal.api.workflowservice.v1.StartBatchOperationRequest - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 4, // 3: temporal.server.api.batch.v1.BatchOperationInput.admin_request:type_name -> temporal.server.api.adminservice.v1.StartAdminBatchOperationRequest + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name } func init() { file_temporal_server_api_batch_v1_request_response_proto_init() } diff --git a/client/admin/client_gen.go b/client/admin/client_gen.go index 942e676900..6c2f9cfbb1 100644 --- a/client/admin/client_gen.go +++ b/client/admin/client_gen.go @@ -419,6 +419,16 @@ func (c *clientImpl) ResendReplicationTasks( return c.client.ResendReplicationTasks(ctx, request, opts...) } +func (c *clientImpl) StartAdminBatchOperation( + ctx context.Context, + request *adminservice.StartAdminBatchOperationRequest, + opts ...grpc.CallOption, +) (*adminservice.StartAdminBatchOperationResponse, error) { + ctx, cancel := c.createContext(ctx) + defer cancel() + return c.client.StartAdminBatchOperation(ctx, request, opts...) +} + func (c *clientImpl) SyncWorkflowState( ctx context.Context, request *adminservice.SyncWorkflowStateRequest, diff --git a/client/admin/metric_client_gen.go b/client/admin/metric_client_gen.go index 20a75221a9..f5025f9eaf 100644 --- a/client/admin/metric_client_gen.go +++ b/client/admin/metric_client_gen.go @@ -583,6 +583,20 @@ func (c *metricClient) ResendReplicationTasks( return c.client.ResendReplicationTasks(ctx, request, opts...) } +func (c *metricClient) StartAdminBatchOperation( + ctx context.Context, + request *adminservice.StartAdminBatchOperationRequest, + opts ...grpc.CallOption, +) (_ *adminservice.StartAdminBatchOperationResponse, retError error) { + + metricsHandler, startTime := c.startMetricsRecording(ctx, "AdminClientStartAdminBatchOperation") + defer func() { + c.finishMetricsRecording(metricsHandler, startTime, retError) + }() + + return c.client.StartAdminBatchOperation(ctx, request, opts...) +} + func (c *metricClient) SyncWorkflowState( ctx context.Context, request *adminservice.SyncWorkflowStateRequest, diff --git a/client/admin/retryable_client_gen.go b/client/admin/retryable_client_gen.go index 63d520f246..a63bc58e31 100644 --- a/client/admin/retryable_client_gen.go +++ b/client/admin/retryable_client_gen.go @@ -626,6 +626,21 @@ func (c *retryableClient) ResendReplicationTasks( return resp, err } +func (c *retryableClient) StartAdminBatchOperation( + ctx context.Context, + request *adminservice.StartAdminBatchOperationRequest, + opts ...grpc.CallOption, +) (*adminservice.StartAdminBatchOperationResponse, error) { + var resp *adminservice.StartAdminBatchOperationResponse + op := func(ctx context.Context) error { + var err error + resp, err = c.client.StartAdminBatchOperation(ctx, request, opts...) + return err + } + err := backoff.ThrottleRetryContext(ctx, op, c.policy, c.isRetryable) + return resp, err +} + func (c *retryableClient) SyncWorkflowState( ctx context.Context, request *adminservice.SyncWorkflowStateRequest, diff --git a/common/resource/fx.go b/common/resource/fx.go index ce8dc0e643..86bba85451 100644 --- a/common/resource/fx.go +++ b/common/resource/fx.go @@ -8,9 +8,11 @@ import ( "time" "go.temporal.io/api/workflowservice/v1" + "go.temporal.io/server/api/adminservice/v1" "go.temporal.io/server/api/historyservice/v1" "go.temporal.io/server/api/matchingservice/v1" "go.temporal.io/server/client" + "go.temporal.io/server/client/admin" "go.temporal.io/server/client/frontend" "go.temporal.io/server/client/history" "go.temporal.io/server/client/matching" @@ -59,6 +61,9 @@ type ( MatchingRawClient matchingservice.MatchingServiceClient MatchingClient matchingservice.MatchingServiceClient + AdminRawClient adminservice.AdminServiceClient + AdminClient adminservice.AdminServiceClient + RuntimeMetricsReporterParams struct { fx.In @@ -90,6 +95,8 @@ var Module = fx.Options( fx.Provide(ClientFactoryProvider), fx.Provide(ClientBeanProvider), fx.Provide(FrontendClientProvider), + fx.Provide(AdminRawClientProvider), + fx.Provide(AdminClientProvider), fx.Provide(GrpcListenerProvider), fx.Provide(RuntimeMetricsReporterProvider), metrics.RuntimeMetricsReporterLifetimeHooksModule, @@ -246,6 +253,18 @@ func FrontendClientProvider(clientBean client.Bean) workflowservice.WorkflowServ ) } +func AdminRawClientProvider(clientBean client.Bean, clusterMetadata cluster.Metadata) (AdminRawClient, error) { + return clientBean.GetRemoteAdminClient(clusterMetadata.GetCurrentClusterName()) +} + +func AdminClientProvider(adminRawClient AdminRawClient) AdminClient { + return admin.NewRetryableClient( + adminRawClient, + common.CreateFrontendClientRetryPolicy(), + common.IsServiceClientTransientError, + ) +} + func RuntimeMetricsReporterProvider( params RuntimeMetricsReporterParams, ) *metrics.RuntimeMetricsReporter { diff --git a/common/rpc/interceptor/logtags/admin_service_server_gen.go b/common/rpc/interceptor/logtags/admin_service_server_gen.go index 961323ee5f..aacc54f8a0 100644 --- a/common/rpc/interceptor/logtags/admin_service_server_gen.go +++ b/common/rpc/interceptor/logtags/admin_service_server_gen.go @@ -206,6 +206,10 @@ func (wt *WorkflowTags) extractFromAdminServiceServerMessage(message any) []tag. } case *adminservice.ResendReplicationTasksResponse: return nil + case *adminservice.StartAdminBatchOperationRequest: + return nil + case *adminservice.StartAdminBatchOperationResponse: + return nil case *adminservice.SyncWorkflowStateRequest: return []tag.Tag{ tag.WorkflowID(r.GetExecution().GetWorkflowId()), diff --git a/proto/internal/temporal/server/api/adminservice/v1/request_response.proto b/proto/internal/temporal/server/api/adminservice/v1/request_response.proto index f0cec47573..024323592b 100644 --- a/proto/internal/temporal/server/api/adminservice/v1/request_response.proto +++ b/proto/internal/temporal/server/api/adminservice/v1/request_response.proto @@ -604,3 +604,41 @@ message ForceUnloadTaskQueuePartitionRequest { message ForceUnloadTaskQueuePartitionResponse { bool was_loaded = 1; } + +// StartAdminBatchOperationRequest starts an admin batch operation. +message StartAdminBatchOperationRequest { + // Namespace that contains the batch operation. + string namespace = 1; + + // Visibility query defines the group of workflows to apply the batch operation. + // This field and `executions` are mutually exclusive. + string visibility_query = 2; + + // A unique job identifier for this batch operation. + string job_id = 3; + + // Reason for the operation. + string reason = 4; + + // List of workflow executions to apply the batch operation to. + // This field and `visibility_query` are mutually exclusive. + repeated temporal.api.common.v1.WorkflowExecution executions = 5; + + // The admin batch operation to perform. + oneof operation { + BatchOperationRefreshWorkflowTasks refresh_workflow_tasks_operation = 10; + } +} + +message StartAdminBatchOperationResponse { +} + +// BatchOperationRefreshWorkflowTasks refreshes workflow tasks for batch workflows. +// This regenerates all pending tasks for each workflow. +message BatchOperationRefreshWorkflowTasks { + // The identity of the worker/client. + string identity = 1; + + // Archetype to use for the refresh operation. If not specified, defaults to workflow archetype. + string archetype = 2; +} diff --git a/proto/internal/temporal/server/api/adminservice/v1/service.proto b/proto/internal/temporal/server/api/adminservice/v1/service.proto index e32ccd62c8..0033b982f6 100644 --- a/proto/internal/temporal/server/api/adminservice/v1/service.proto +++ b/proto/internal/temporal/server/api/adminservice/v1/service.proto @@ -118,6 +118,10 @@ service AdminService { rpc RefreshWorkflowTasks(RefreshWorkflowTasksRequest) returns (RefreshWorkflowTasksResponse) { } + // StartAdminBatchOperation starts an admin batch operation. Supports internal operations like RefreshWorkflowTasks. + rpc StartAdminBatchOperation(StartAdminBatchOperationRequest) returns (StartAdminBatchOperationResponse) { + } + // ResendReplicationTasks requests replication tasks from remote cluster and apply tasks to current cluster. rpc ResendReplicationTasks(ResendReplicationTasksRequest) returns (ResendReplicationTasksResponse) { } diff --git a/proto/internal/temporal/server/api/batch/v1/request_response.proto b/proto/internal/temporal/server/api/batch/v1/request_response.proto index 1505aa18e4..a112ec4365 100644 --- a/proto/internal/temporal/server/api/batch/v1/request_response.proto +++ b/proto/internal/temporal/server/api/batch/v1/request_response.proto @@ -5,6 +5,7 @@ option go_package = "go.temporal.io/server/api/batch/v1;batch"; import "temporal/api/workflowservice/v1/request_response.proto"; import "temporal/api/enums/v1/batch_operation.proto"; +import "temporal/server/api/adminservice/v1/request_response.proto"; import "google/protobuf/duration.proto"; message BatchOperationInput { @@ -22,4 +23,7 @@ message BatchOperationInput { // The request to start the batch operation. temporal.api.workflowservice.v1.StartBatchOperationRequest request = 7; + + // The request to start an admin batch operation. + temporal.server.api.adminservice.v1.StartAdminBatchOperationRequest admin_request = 8; } \ No newline at end of file diff --git a/service/frontend/admin_handler.go b/service/frontend/admin_handler.go index 305c874525..268a7b395b 100644 --- a/service/frontend/admin_handler.go +++ b/service/frontend/admin_handler.go @@ -18,10 +18,12 @@ import ( namespacepb "go.temporal.io/api/namespace/v1" replicationpb "go.temporal.io/api/replication/v1" "go.temporal.io/api/serviceerror" + taskqueuepb "go.temporal.io/api/taskqueue/v1" workflowpb "go.temporal.io/api/workflow/v1" "go.temporal.io/api/workflowservice/v1" sdkclient "go.temporal.io/sdk/client" "go.temporal.io/server/api/adminservice/v1" + batchspb "go.temporal.io/server/api/batch/v1" clusterspb "go.temporal.io/server/api/cluster/v1" commonspb "go.temporal.io/server/api/common/v1" enumsspb "go.temporal.io/server/api/enums/v1" @@ -47,6 +49,8 @@ import ( "go.temporal.io/server/common/metrics" "go.temporal.io/server/common/namespace" "go.temporal.io/server/common/namespace/nsreplication" + "go.temporal.io/server/common/payload" + "go.temporal.io/server/common/payloads" "go.temporal.io/server/common/persistence" "go.temporal.io/server/common/persistence/serialization" "go.temporal.io/server/common/persistence/visibility" @@ -60,6 +64,7 @@ import ( "go.temporal.io/server/common/util" "go.temporal.io/server/service/history/tasks" "go.temporal.io/server/service/worker/addsearchattributes" + "go.temporal.io/server/service/worker/batcher" "go.temporal.io/server/service/worker/dlq" "google.golang.org/grpc/health" healthpb "google.golang.org/grpc/health/grpc_health_v1" @@ -1568,6 +1573,132 @@ func (adh *AdminHandler) RefreshWorkflowTasks( return &adminservice.RefreshWorkflowTasksResponse{}, nil } +// StartAdminBatchOperation starts an admin batch operation. +func (adh *AdminHandler) StartAdminBatchOperation( + ctx context.Context, + request *adminservice.StartAdminBatchOperationRequest, +) (_ *adminservice.StartAdminBatchOperationResponse, retError error) { + defer log.CapturePanic(adh.logger, &retError) + + if request == nil { + return nil, errRequestNotSet + } + + if err := validateAdminBatchOperation(request); err != nil { + return nil, err + } + + namespaceID, err := adh.namespaceRegistry.GetNamespaceID(namespace.Name(request.GetNamespace())) + if err != nil { + return nil, err + } + + // Validate concurrent batch operation + maxConcurrentBatchOperation := adh.config.MaxConcurrentBatchOperation(request.GetNamespace()) + countResp, err := adh.visibilityMgr.CountWorkflowExecutions(ctx, &manager.CountWorkflowExecutionsRequest{ + NamespaceID: namespaceID, + Namespace: namespace.Name(request.GetNamespace()), + Query: batcher.OpenBatchOperationQuery, + }) + if err != nil { + return nil, err + } + + openBatchOperationCount := int(countResp.Count) + if openBatchOperationCount >= maxConcurrentBatchOperation { + return nil, &serviceerror.ResourceExhausted{ + Cause: enumspb.RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT, + Scope: enumspb.RESOURCE_EXHAUSTED_SCOPE_NAMESPACE, + Message: "Max concurrent batch operations is reached", + } + } + + input := &batchspb.BatchOperationInput{ + AdminRequest: request, + NamespaceId: namespaceID.String(), + } + + var identity string + var batchTypeMemo string + switch op := request.Operation.(type) { + case *adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation: + batchTypeMemo = "refresh_workflow_tasks" + identity = op.RefreshWorkflowTasksOperation.GetIdentity() + default: + return nil, serviceerror.NewInvalidArgumentf("The operation type %T is not supported", op) + } + + inputPayload, err := payloads.Encode(input) + if err != nil { + return nil, err + } + + memo := &commonpb.Memo{ + Fields: map[string]*commonpb.Payload{ + batcher.BatchOperationTypeMemo: payload.EncodeString(batchTypeMemo), + batcher.BatchReasonMemo: payload.EncodeString(request.GetReason()), + }, + } + + var searchAttributes *commonpb.SearchAttributes + searchattribute.AddSearchAttribute(&searchAttributes, sadefs.BatcherUser, payload.EncodeString(identity)) + searchattribute.AddSearchAttribute(&searchAttributes, sadefs.TemporalNamespaceDivision, payload.EncodeString(batcher.NamespaceDivision)) + + startReq := &workflowservice.StartWorkflowExecutionRequest{ + Namespace: request.Namespace, + WorkflowId: request.GetJobId(), + WorkflowType: &commonpb.WorkflowType{Name: batcher.BatchWFTypeProtobufName}, + TaskQueue: &taskqueuepb.TaskQueue{Name: primitives.PerNSWorkerTaskQueue}, + Input: inputPayload, + Identity: identity, + RequestId: uuid.NewString(), + WorkflowIdConflictPolicy: enumspb.WORKFLOW_ID_CONFLICT_POLICY_FAIL, + WorkflowIdReusePolicy: enumspb.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE, + Memo: memo, + SearchAttributes: searchAttributes, + Priority: &commonpb.Priority{}, // ie default priority + } + + _, err = adh.historyClient.StartWorkflowExecution( + ctx, + common.CreateHistoryStartWorkflowRequest( + namespaceID.String(), + startReq, + nil, + nil, + time.Now().UTC(), + ), + ) + if err != nil { + return nil, err + } + return &adminservice.StartAdminBatchOperationResponse{}, nil +} + +func validateAdminBatchOperation(params *adminservice.StartAdminBatchOperationRequest) error { + if params.GetOperation() == nil || + params.GetReason() == "" || + params.GetNamespace() == "" || + (params.GetVisibilityQuery() == "" && len(params.GetExecutions()) == 0) { + return serviceerror.NewInvalidArgument("must provide required parameters: Operation/Reason/Namespace/Query or Executions") + } + + if len(params.GetJobId()) == 0 { + return serviceerror.NewInvalidArgument("JobId is not set on request.") + } + if len(params.GetVisibilityQuery()) != 0 && len(params.GetExecutions()) != 0 { + return serviceerror.NewInvalidArgument("batch query and executions are mutually exclusive") + } + + switch op := params.GetOperation().(type) { + case *adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation: + // No additional validation needed + return nil + default: + return serviceerror.NewInvalidArgumentf("not supported admin batch type: %T", op) + } +} + // ResendReplicationTasks requests replication task from remote cluster func (adh *AdminHandler) ResendReplicationTasks( ctx context.Context, diff --git a/service/worker/batcher/activities.go b/service/worker/batcher/activities.go index 922d4962ac..be0b530ea0 100644 --- a/service/worker/batcher/activities.go +++ b/service/worker/batcher/activities.go @@ -16,6 +16,7 @@ import ( "go.temporal.io/api/workflowservice/v1" "go.temporal.io/sdk/activity" sdkclient "go.temporal.io/sdk/client" + "go.temporal.io/server/api/adminservice/v1" batchspb "go.temporal.io/server/api/batch/v1" "go.temporal.io/server/common" "go.temporal.io/server/common/dynamicconfig" @@ -284,13 +285,27 @@ func (a *activities) BatchActivityWithProtobuf(ctx context.Context, batchParams } } - adjustedQuery := a.adjustQueryBatchTypeEnum(batchParams.Request.VisibilityQuery, batchParams.BatchType) + // Get namespace and query based on request type (public vs admin) + var ns string + var visibilityQuery string + var executions []*commonpb.WorkflowExecution + + if batchParams.AdminRequest != nil { + adminReq := batchParams.AdminRequest + ns = adminReq.Namespace + visibilityQuery = a.adjustQueryAdminBatchType(adminReq) + executions = adminReq.GetExecutions() + } else { + ns = batchParams.Request.Namespace + visibilityQuery = a.adjustQueryBatchTypeEnum(batchParams.Request.VisibilityQuery, batchParams.BatchType) + executions = batchParams.Request.Executions + } if startOver { - estimateCount := int64(len(batchParams.Request.Executions)) - if len(adjustedQuery) > 0 { + estimateCount := int64(len(executions)) + if len(visibilityQuery) > 0 { resp, err := sdkClient.CountWorkflow(ctx, &workflowservice.CountWorkflowExecutionsRequest{ - Query: adjustedQuery, + Query: visibilityQuery, }) if err != nil { metrics.BatcherOperationFailures.With(metricsHandler).Record(1) @@ -304,15 +319,15 @@ func (a *activities) BatchActivityWithProtobuf(ctx context.Context, batchParams // Prepare configuration for shared processing function config := batchProcessorConfig{ - namespace: batchParams.Request.Namespace, - adjustedQuery: adjustedQuery, - rps: float64(a.rps(batchParams.Request.Namespace)), + namespace: ns, + adjustedQuery: visibilityQuery, + rps: float64(a.rps(ns)), concurrency: a.getOperationConcurrency(int(batchParams.Concurrency)), initialPageToken: hbd.PageToken, - initialExecutions: batchParams.Request.Executions, + initialExecutions: executions, } - // Create a wrapper for the protobuf specific worker processor + // Create a wrapper for the task processor workerProcessor := func( ctx context.Context, taskCh chan task, @@ -323,7 +338,7 @@ func (a *activities) BatchActivityWithProtobuf(ctx context.Context, batchParams metricsHandler metrics.Handler, logger log.Logger, ) { - startTaskProcessorProtobuf(ctx, batchParams, batchParams.Request.Namespace, taskCh, respCh, rateLimiter, sdkClient, frontendClient, metricsHandler, logger) + a.startTaskProcessor(ctx, batchParams, ns, taskCh, respCh, rateLimiter, sdkClient, frontendClient, metricsHandler, logger) } return a.processWorkflowsWithProactiveFetching(ctx, config, workerProcessor, sdkClient, metricsHandler, logger, hbd) @@ -353,6 +368,23 @@ func (a *activities) adjustQueryBatchTypeEnum(query string, batchType enumspb.Ba } } +func (a *activities) adjustQueryAdminBatchType(adminReq *adminservice.StartAdminBatchOperationRequest) string { + query := adminReq.GetVisibilityQuery() + if len(query) == 0 { + return query + } + + switch adminReq.Operation.(type) { + case *adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation: + // RefreshWorkflowTasks only for running workflows. + // Non-running workflows will be a no-op at the history level but still + // incur gRPC and DB costs, so filter them out. + return fmt.Sprintf("(%s) AND (%s)", query, statusRunningQueryFilter) + default: + return query + } +} + func (a *activities) getOperationConcurrency(concurrency int) int { if concurrency <= 0 { return a.concurrency(a.namespace.String()) @@ -361,7 +393,7 @@ func (a *activities) getOperationConcurrency(concurrency int) int { } // nolint:revive,cognitive-complexity -func startTaskProcessorProtobuf( +func (a *activities) startTaskProcessor( ctx context.Context, batchOperation *batchspb.BatchOperationInput, namespace string, @@ -387,6 +419,13 @@ func startTaskProcessorProtobuf( continue } + // Handle admin batch operations + if batchOperation.AdminRequest != nil { + err = a.processAdminTask(ctx, batchOperation, task, limiter) + a.handleTaskResult(batchOperation, task, err, taskCh, respCh, metricsHandler, logger) + continue + } + switch operation := batchOperation.Request.Operation.(type) { case *workflowservice.StartBatchOperationRequest_TerminationOperation: err = processTask(ctx, limiter, task, @@ -551,22 +590,57 @@ func startTaskProcessorProtobuf( default: err = errors.New(fmt.Sprintf("unknown batch type: %v", batchOperation.BatchType)) } - if err != nil { - metrics.BatcherProcessorFailures.With(metricsHandler).Record(1) - logger.Error("Failed to process batch operation task", tag.Error(err)) - nonRetryable := slices.Contains(batchOperation.NonRetryableErrors, err.Error()) - if nonRetryable || task.attempts > int(batchOperation.AttemptsOnRetryableError) { - respCh <- taskResponse{err: err, page: task.page} - } else { - // put back to the channel if less than attemptsOnError - task.attempts++ - taskCh <- task - } - } else { - metrics.BatcherProcessorSuccess.With(metricsHandler).Record(1) - respCh <- taskResponse{err: nil, page: task.page} - } + a.handleTaskResult(batchOperation, task, err, taskCh, respCh, metricsHandler, logger) + } + } +} + +func (a *activities) handleTaskResult( + batchOperation *batchspb.BatchOperationInput, + task task, + err error, + taskCh chan task, + respCh chan taskResponse, + metricsHandler metrics.Handler, + logger log.Logger, +) { + if err != nil { + metrics.BatcherProcessorFailures.With(metricsHandler).Record(1) + logger.Error("Failed to process batch operation task", tag.Error(err)) + nonRetryable := slices.Contains(batchOperation.NonRetryableErrors, err.Error()) + if nonRetryable || task.attempts > int(batchOperation.AttemptsOnRetryableError) { + respCh <- taskResponse{err: err, page: task.page} + } else { + // put back to the channel if less than attemptsOnError + task.attempts++ + taskCh <- task } + } else { + metrics.BatcherProcessorSuccess.With(metricsHandler).Record(1) + respCh <- taskResponse{err: nil, page: task.page} + } +} + +func (a *activities) processAdminTask( + ctx context.Context, + batchOperation *batchspb.BatchOperationInput, + task task, + limiter *rate.Limiter, +) error { + adminReq := batchOperation.AdminRequest + switch op := adminReq.Operation.(type) { + case *adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation: + return processTask(ctx, limiter, task, + func(execution *commonpb.WorkflowExecution) error { + _, err := a.AdminClient.RefreshWorkflowTasks(ctx, &adminservice.RefreshWorkflowTasksRequest{ + NamespaceId: batchOperation.NamespaceId, + Execution: execution, + Archetype: op.RefreshWorkflowTasksOperation.GetArchetype(), + }) + return err + }) + default: + return fmt.Errorf("unknown admin batch type: %T", adminReq.Operation) } } diff --git a/service/worker/batcher/activities_test.go b/service/worker/batcher/activities_test.go index 95f1469fa2..63c51801b8 100644 --- a/service/worker/batcher/activities_test.go +++ b/service/worker/batcher/activities_test.go @@ -2,6 +2,7 @@ package batcher import ( "context" + "errors" "fmt" "slices" "testing" @@ -15,10 +16,14 @@ import ( workflowpb "go.temporal.io/api/workflow/v1" "go.temporal.io/api/workflowservice/v1" "go.temporal.io/sdk/testsuite" + "go.temporal.io/server/api/adminservice/v1" + "go.temporal.io/server/api/adminservicemock/v1" + batchspb "go.temporal.io/server/api/batch/v1" "go.temporal.io/server/common/log" "go.temporal.io/server/common/primitives/timestamp" "go.temporal.io/server/common/testing/mockapi/workflowservicemock/v1" "go.uber.org/mock/gomock" + "golang.org/x/time/rate" ) type activitiesSuite struct { @@ -347,3 +352,167 @@ func (s *activitiesSuite) TestAdjustQueryBatchTypeEnum() { }) } } + +func (s *activitiesSuite) TestAdjustQueryAdminBatchType() { + a := activities{} + + s.Run("Empty query", func() { + adminReq := &adminservice.StartAdminBatchOperationRequest{ + VisibilityQuery: "", + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{}, + }, + } + adjustedQuery := a.adjustQueryAdminBatchType(adminReq) + s.Empty(adjustedQuery) + }) + + s.Run("RefreshWorkflowTasks adds running filter", func() { + adminReq := &adminservice.StartAdminBatchOperationRequest{ + VisibilityQuery: "WorkflowType='MyWorkflow'", + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{ + Identity: "test", + }, + }, + } + adjustedQuery := a.adjustQueryAdminBatchType(adminReq) + s.Equal(fmt.Sprintf("(WorkflowType='MyWorkflow') AND (%s)", statusRunningQueryFilter), adjustedQuery) + }) + + s.Run("RefreshWorkflowTasks with complex query", func() { + adminReq := &adminservice.StartAdminBatchOperationRequest{ + VisibilityQuery: "(WorkflowType='MyWorkflow') OR (WorkflowType='OtherWorkflow')", + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{}, + }, + } + adjustedQuery := a.adjustQueryAdminBatchType(adminReq) + s.Equal(fmt.Sprintf("((WorkflowType='MyWorkflow') OR (WorkflowType='OtherWorkflow')) AND (%s)", statusRunningQueryFilter), adjustedQuery) + }) + + s.Run("Nil operation returns query unchanged", func() { + adminReq := &adminservice.StartAdminBatchOperationRequest{ + VisibilityQuery: "WorkflowType='MyWorkflow'", + } + adjustedQuery := a.adjustQueryAdminBatchType(adminReq) + s.Equal("WorkflowType='MyWorkflow'", adjustedQuery) + }) +} + +func (s *activitiesSuite) TestProcessAdminTask_RefreshWorkflowTasks() { + ctx := context.Background() + mockAdminClient := adminservicemock.NewMockAdminServiceClient(s.controller) + + a := &activities{ + activityDeps: activityDeps{ + AdminClient: mockAdminClient, + }, + } + + namespaceID := "test-namespace-id" + workflowID := "test-workflow-id" + runID := "test-run-id" + archetype := "test-archetype" + + batchOperation := &batchspb.BatchOperationInput{ + NamespaceId: namespaceID, + AdminRequest: &adminservice.StartAdminBatchOperationRequest{ + Namespace: "test-namespace", + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{ + Identity: "test-identity", + Archetype: archetype, + }, + }, + }, + } + + testTask := task{ + execution: &commonpb.WorkflowExecution{ + WorkflowId: workflowID, + RunId: runID, + }, + } + + limiter := rate.NewLimiter(rate.Limit(100), 1) + + // Expect RefreshWorkflowTasks to be called with correct parameters + mockAdminClient.EXPECT().RefreshWorkflowTasks(ctx, &adminservice.RefreshWorkflowTasksRequest{ + NamespaceId: namespaceID, + Execution: &commonpb.WorkflowExecution{ + WorkflowId: workflowID, + RunId: runID, + }, + Archetype: archetype, + }).Return(&adminservice.RefreshWorkflowTasksResponse{}, nil) + + err := a.processAdminTask(ctx, batchOperation, testTask, limiter) + s.NoError(err) +} + +func (s *activitiesSuite) TestProcessAdminTask_RefreshWorkflowTasks_Error() { + ctx := context.Background() + mockAdminClient := adminservicemock.NewMockAdminServiceClient(s.controller) + + a := &activities{ + activityDeps: activityDeps{ + AdminClient: mockAdminClient, + }, + } + + batchOperation := &batchspb.BatchOperationInput{ + NamespaceId: "test-namespace-id", + AdminRequest: &adminservice.StartAdminBatchOperationRequest{ + Namespace: "test-namespace", + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{ + Identity: "test-identity", + }, + }, + }, + } + + testTask := task{ + execution: &commonpb.WorkflowExecution{ + WorkflowId: "test-workflow-id", + RunId: "test-run-id", + }, + } + + limiter := rate.NewLimiter(rate.Limit(100), 1) + + expectedErr := errors.New("refresh failed") + mockAdminClient.EXPECT().RefreshWorkflowTasks(ctx, gomock.Any()).Return(nil, expectedErr) + + err := a.processAdminTask(ctx, batchOperation, testTask, limiter) + s.Require().Error(err) + s.Equal(expectedErr, err) +} + +func (s *activitiesSuite) TestProcessAdminTask_UnknownOperation() { + ctx := context.Background() + + a := &activities{} + + // AdminRequest with nil operation + batchOperation := &batchspb.BatchOperationInput{ + NamespaceId: "test-namespace-id", + AdminRequest: &adminservice.StartAdminBatchOperationRequest{ + Namespace: "test-namespace", + }, + } + + testTask := task{ + execution: &commonpb.WorkflowExecution{ + WorkflowId: "test-workflow-id", + RunId: "test-run-id", + }, + } + + limiter := rate.NewLimiter(rate.Limit(100), 1) + + err := a.processAdminTask(ctx, batchOperation, testTask, limiter) + s.Require().Error(err) + s.Contains(err.Error(), "unknown admin batch type") +} diff --git a/service/worker/batcher/fx.go b/service/worker/batcher/fx.go index deea54f833..7784075c17 100644 --- a/service/worker/batcher/fx.go +++ b/service/worker/batcher/fx.go @@ -8,6 +8,7 @@ import ( "go.temporal.io/server/common/log" "go.temporal.io/server/common/metrics" "go.temporal.io/server/common/namespace" + "go.temporal.io/server/common/resource" "go.temporal.io/server/common/sdk" workercommon "go.temporal.io/server/service/worker/common" "go.uber.org/fx" @@ -33,6 +34,7 @@ type ( Logger log.Logger ClientFactory sdk.ClientFactory FrontendClient workflowservice.WorkflowServiceClient + AdminClient resource.AdminClient } fxResult struct { diff --git a/tests/admin_batch_refresh_workflow_tasks_test.go b/tests/admin_batch_refresh_workflow_tasks_test.go new file mode 100644 index 0000000000..badc2910d2 --- /dev/null +++ b/tests/admin_batch_refresh_workflow_tasks_test.go @@ -0,0 +1,203 @@ +package tests + +import ( + "context" + "testing" + "time" + + "github.com/google/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + commonpb "go.temporal.io/api/common/v1" + "go.temporal.io/api/serviceerror" + "go.temporal.io/api/workflowservice/v1" + sdkclient "go.temporal.io/sdk/client" + "go.temporal.io/sdk/workflow" + "go.temporal.io/server/api/adminservice/v1" + "go.temporal.io/server/tests/testcore" + "google.golang.org/grpc/codes" +) + +type AdminBatchRefreshWorkflowTasksTestSuite struct { + testcore.FunctionalTestBase +} + +func TestAdminBatchRefreshWorkflowTasksTestSuite(t *testing.T) { + s := new(AdminBatchRefreshWorkflowTasksTestSuite) + suite.Run(t, s) +} + +func (s *AdminBatchRefreshWorkflowTasksTestSuite) simpleWorkflow(ctx workflow.Context) (string, error) { + // Simple workflow that just returns + return "done", nil +} + +func (s *AdminBatchRefreshWorkflowTasksTestSuite) createWorkflow(ctx context.Context, workflowFn interface{}) sdkclient.WorkflowRun { + workflowOptions := sdkclient.StartWorkflowOptions{ + ID: testcore.RandomizeStr("wf_id-" + s.T().Name()), + TaskQueue: s.TaskQueue(), + } + workflowRun, err := s.SdkClient().ExecuteWorkflow(ctx, workflowOptions, workflowFn) + s.NoError(err) + s.NotNil(workflowRun) + return workflowRun +} + +func (s *AdminBatchRefreshWorkflowTasksTestSuite) TestStartAdminBatchOperation_RefreshWorkflowTasks_Success() { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + s.Worker().RegisterWorkflow(s.simpleWorkflow) + + // Create two workflows + workflowRun1 := s.createWorkflow(ctx, s.simpleWorkflow) + workflowRun2 := s.createWorkflow(ctx, s.simpleWorkflow) + + // Wait for workflows to complete + var out string + err := workflowRun1.Get(ctx, &out) + s.NoError(err) + err = workflowRun2.Get(ctx, &out) + s.NoError(err) + + // Start admin batch operation to refresh workflow tasks using executions list + resp, err := s.AdminClient().StartAdminBatchOperation(ctx, &adminservice.StartAdminBatchOperationRequest{ + Namespace: s.Namespace().String(), + JobId: uuid.NewString(), + Reason: "test refresh workflow tasks", + Executions: []*commonpb.WorkflowExecution{ + {WorkflowId: workflowRun1.GetID(), RunId: workflowRun1.GetRunID()}, + {WorkflowId: workflowRun2.GetID(), RunId: workflowRun2.GetRunID()}, + }, + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{ + Identity: "test-identity", + }, + }, + }) + s.NoError(err) + s.NotNil(resp) +} + +func (s *AdminBatchRefreshWorkflowTasksTestSuite) TestStartAdminBatchOperation_RefreshWorkflowTasks_WithVisibilityQuery() { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + s.Worker().RegisterWorkflow(s.simpleWorkflow) + + // Create workflows + workflowRun1 := s.createWorkflow(ctx, s.simpleWorkflow) + workflowRun2 := s.createWorkflow(ctx, s.simpleWorkflow) + + // Wait for workflows to complete + var out string + err := workflowRun1.Get(ctx, &out) + s.NoError(err) + err = workflowRun2.Get(ctx, &out) + s.NoError(err) + + // Wait for workflows to be visible + s.EventuallyWithT(func(t *assert.CollectT) { + resp, err := s.FrontendClient().CountWorkflowExecutions(ctx, &workflowservice.CountWorkflowExecutionsRequest{ + Namespace: s.Namespace().String(), + Query: "WorkflowType='simpleWorkflow'", + }) + require.NoError(t, err) + require.GreaterOrEqual(t, resp.GetCount(), int64(2)) + }, 10*time.Second, 500*time.Millisecond) + + // Start admin batch operation using visibility query + resp, err := s.AdminClient().StartAdminBatchOperation(ctx, &adminservice.StartAdminBatchOperationRequest{ + Namespace: s.Namespace().String(), + VisibilityQuery: "WorkflowType='simpleWorkflow'", + JobId: uuid.NewString(), + Reason: "test refresh workflow tasks with query", + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{ + Identity: "test-identity", + Archetype: "test-archetype", + }, + }, + }) + s.NoError(err) + s.NotNil(resp) +} + +func (s *AdminBatchRefreshWorkflowTasksTestSuite) TestStartAdminBatchOperation_InvalidArgument_NoOperation() { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + // Request without operation should fail + _, err := s.AdminClient().StartAdminBatchOperation(ctx, &adminservice.StartAdminBatchOperationRequest{ + Namespace: s.Namespace().String(), + JobId: uuid.NewString(), + Reason: "test", + Executions: []*commonpb.WorkflowExecution{ + {WorkflowId: "test-wf-id", RunId: "test-run-id"}, + }, + }) + s.Error(err) + s.Equal(codes.InvalidArgument, serviceerror.ToStatus(err).Code()) +} + +func (s *AdminBatchRefreshWorkflowTasksTestSuite) TestStartAdminBatchOperation_InvalidArgument_NoNamespace() { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + // Request without namespace should fail + _, err := s.AdminClient().StartAdminBatchOperation(ctx, &adminservice.StartAdminBatchOperationRequest{ + JobId: uuid.NewString(), + Reason: "test", + Executions: []*commonpb.WorkflowExecution{ + {WorkflowId: "test-wf-id", RunId: "test-run-id"}, + }, + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{ + Identity: "test-identity", + }, + }, + }) + s.Error(err) + s.Equal(codes.InvalidArgument, serviceerror.ToStatus(err).Code()) +} + +func (s *AdminBatchRefreshWorkflowTasksTestSuite) TestStartAdminBatchOperation_InvalidArgument_NoJobId() { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + // Request without job_id should fail + _, err := s.AdminClient().StartAdminBatchOperation(ctx, &adminservice.StartAdminBatchOperationRequest{ + Namespace: s.Namespace().String(), + Reason: "test", + Executions: []*commonpb.WorkflowExecution{ + {WorkflowId: "test-wf-id", RunId: "test-run-id"}, + }, + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{ + Identity: "test-identity", + }, + }, + }) + s.Error(err) + s.Equal(codes.InvalidArgument, serviceerror.ToStatus(err).Code()) +} + +func (s *AdminBatchRefreshWorkflowTasksTestSuite) TestStartAdminBatchOperation_InvalidArgument_NoExecutionsOrQuery() { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + // Request without executions or visibility_query should fail + _, err := s.AdminClient().StartAdminBatchOperation(ctx, &adminservice.StartAdminBatchOperationRequest{ + Namespace: s.Namespace().String(), + JobId: uuid.NewString(), + Reason: "test", + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{ + Identity: "test-identity", + }, + }, + }) + s.Error(err) + s.Equal(codes.InvalidArgument, serviceerror.ToStatus(err).Code()) +} diff --git a/tools/tdbg/commands.go b/tools/tdbg/commands.go index 6bb1757595..c73d3e215c 100644 --- a/tools/tdbg/commands.go +++ b/tools/tdbg/commands.go @@ -675,6 +675,54 @@ func AdminRefreshWorkflowTasks(c *cli.Context, clientFactory ClientFactory) erro return nil } +// AdminBatchRefreshWorkflowTasks starts a batch job to refresh workflow tasks for multiple workflows +func AdminBatchRefreshWorkflowTasks(c *cli.Context, clientFactory ClientFactory) error { + adminClient := clientFactory.AdminClient(c) + + nsName, err := getRequiredOption(c, FlagNamespace) + if err != nil { + return err + } + + query, err := getRequiredOption(c, FlagVisibilityQuery) + if err != nil { + return err + } + + reason, err := getRequiredOption(c, FlagReason) + if err != nil { + return err + } + + jobID := c.String(FlagJobID) + if jobID == "" { + jobID = fmt.Sprintf("batch-refresh-%d", time.Now().UnixNano()) + } + + ctx, cancel := newContext(c) + defer cancel() + + _, err = adminClient.StartAdminBatchOperation(ctx, &adminservice.StartAdminBatchOperationRequest{ + Namespace: nsName, + VisibilityQuery: query, + JobId: jobID, + Reason: reason, + Operation: &adminservice.StartAdminBatchOperationRequest_RefreshWorkflowTasksOperation{ + RefreshWorkflowTasksOperation: &adminservice.BatchOperationRefreshWorkflowTasks{ + Identity: getCurrentUserFromEnv(), + Archetype: getArchetypeWithDefault(c, chasm.WorkflowArchetype), + }, + }, + }) + if err != nil { + return fmt.Errorf("unable to start batch refresh workflow tasks: %w", err) + } + + // nolint:errcheck // assuming that write will succeed. + fmt.Fprintln(c.App.Writer, "Batch Refresh Workflow Tasks started successfully.") + return nil +} + // AdminRebuildMutableState rebuild a workflow mutable state using persisted history events func AdminRebuildMutableState(c *cli.Context, clientFactory ClientFactory) error { adminClient := clientFactory.AdminClient(c) diff --git a/tools/tdbg/flags.go b/tools/tdbg/flags.go index a7a33de836..2e87502dda 100644 --- a/tools/tdbg/flags.go +++ b/tools/tdbg/flags.go @@ -71,4 +71,6 @@ var ( FlagAllActive = "select-all-active" FlagFair = "fair" FlagMinPass = "min-pass" + FlagVisibilityQuery = "query" + FlagJobID = "job-id" ) diff --git a/tools/tdbg/tdbg_commands.go b/tools/tdbg/tdbg_commands.go index cbc376353e..f64ac09764 100644 --- a/tools/tdbg/tdbg_commands.go +++ b/tools/tdbg/tdbg_commands.go @@ -185,6 +185,41 @@ func newAdminWorkflowCommands(clientFactory ClientFactory, prompterFactory Promp return AdminRefreshWorkflowTasks(c, clientFactory) }, }, + { + Name: "batch-refresh-tasks", + Aliases: []string{"brt"}, + Usage: "Start a batch job to refresh workflow tasks for multiple workflows", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: FlagNamespace, + Aliases: FlagNamespaceAlias, + Usage: "Namespace", + Required: true, + }, + &cli.StringFlag{ + Name: FlagVisibilityQuery, + Usage: "Visibility query to select workflows", + Required: true, + }, + &cli.StringFlag{ + Name: FlagReason, + Usage: "Reason for starting the batch job", + Required: true, + }, + &cli.StringFlag{ + Name: FlagJobID, + Usage: "Optional job ID (auto-generated if not provided)", + }, + &cli.StringFlag{ + Name: FlagArchetype, + Usage: "Fully qualified archetype name of the executions", + DefaultText: chasm.WorkflowArchetype, + }, + }, + Action: func(c *cli.Context) error { + return AdminBatchRefreshWorkflowTasks(c, clientFactory) + }, + }, { Name: "rebuild", Aliases: []string{}, diff --git a/tools/tdbg/util.go b/tools/tdbg/util.go index 77845b8ea2..548eaa125c 100644 --- a/tools/tdbg/util.go +++ b/tools/tdbg/util.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "io" + "os" "reflect" "regexp" "strconv" @@ -22,6 +23,21 @@ import ( "google.golang.org/protobuf/proto" ) +var envKeysForUserName = []string{ + "USER", + "LOGNAME", + "HOME", +} + +func getCurrentUserFromEnv() string { + for _, n := range envKeysForUserName { + if len(os.Getenv(n)) > 0 { + return os.Getenv(n) + } + } + return "unknown" +} + func prettyPrintJSONObject(c *cli.Context, o interface{}) { var b []byte var err error