diff --git a/api/deployment/v1/message.pb.go b/api/deployment/v1/message.pb.go index 6b6cc5ea82..2a65b099db 100644 --- a/api/deployment/v1/message.pb.go +++ b/api/deployment/v1/message.pb.go @@ -11,8 +11,8 @@ import ( sync "sync" unsafe "unsafe" - v12 "go.temporal.io/api/common/v1" - v13 "go.temporal.io/api/compute/v1" + v13 "go.temporal.io/api/common/v1" + v12 "go.temporal.io/api/compute/v1" v11 "go.temporal.io/api/deployment/v1" v1 "go.temporal.io/api/enums/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -331,8 +331,10 @@ type VersionLocalState struct { // Covers changes through: CreateWorkerDeploymentVersion, UpdateWorkerDeploymentVersionComputeConfig, // UpdateWorkerDeploymentVersionMetadata. LastModifierIdentity string `protobuf:"bytes,17,opt,name=last_modifier_identity,json=lastModifierIdentity,proto3" json:"last_modifier_identity,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Cached compute config summary, kept in sync with the WCI on each compute config update. + ComputeConfig *v12.ComputeConfigSummary `protobuf:"bytes,18,opt,name=compute_config,json=computeConfig,proto3" json:"compute_config,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VersionLocalState) Reset() { @@ -485,6 +487,13 @@ func (x *VersionLocalState) GetLastModifierIdentity() string { return "" } +func (x *VersionLocalState) GetComputeConfig() *v12.ComputeConfigSummary { + if x != nil { + return x.ComputeConfig + } + return nil +} + // Data specific to a task queue, from the perspective of a worker deployment version. type TaskQueueVersionData struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -846,8 +855,11 @@ type WorkerDeploymentVersionSummary struct { // Request ID used to create this version. Used for idempotency. // Not synced from the version workflow; only set by the deployment workflow. CreateRequestId string `protobuf:"bytes,12,opt,name=create_request_id,json=createRequestId,proto3" json:"create_request_id,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Compute config summary for this version. Synced from the version workflow on each compute config update. + // Also set by the deployment workflow at version creation time if a compute config was provided. + ComputeConfig *v12.ComputeConfigSummary `protobuf:"bytes,13,opt,name=compute_config,json=computeConfig,proto3" json:"compute_config,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WorkerDeploymentVersionSummary) Reset() { @@ -965,6 +977,13 @@ func (x *WorkerDeploymentVersionSummary) GetCreateRequestId() string { return "" } +func (x *WorkerDeploymentVersionSummary) GetComputeConfig() *v12.ComputeConfigSummary { + if x != nil { + return x.ComputeConfig + } + return nil +} + // used as Worker Deployment Version workflow update input: type RegisterWorkerInVersionArgs struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1764,11 +1783,12 @@ func (x *StartWorkerDeploymentRequest) GetRequestId() string { // used as Worker Deployment workflow activity input: type StartWorkerDeploymentVersionRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - DeploymentName string `protobuf:"bytes,1,opt,name=deployment_name,json=deploymentName,proto3" json:"deployment_name,omitempty"` - BuildId string `protobuf:"bytes,2,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` - RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - Identity string `protobuf:"bytes,4,opt,name=identity,proto3" json:"identity,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DeploymentName string `protobuf:"bytes,1,opt,name=deployment_name,json=deploymentName,proto3" json:"deployment_name,omitempty"` + BuildId string `protobuf:"bytes,2,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + Identity string `protobuf:"bytes,4,opt,name=identity,proto3" json:"identity,omitempty"` + ComputeConfig *v12.ComputeConfigSummary `protobuf:"bytes,5,opt,name=compute_config,json=computeConfig,proto3" json:"compute_config,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1831,6 +1851,13 @@ func (x *StartWorkerDeploymentVersionRequest) GetIdentity() string { return "" } +func (x *StartWorkerDeploymentVersionRequest) GetComputeConfig() *v12.ComputeConfigSummary { + if x != nil { + return x.ComputeConfig + } + return nil +} + // used as Worker Deployment Version workflow activity input: type SyncDeploymentVersionUserDataRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -2110,7 +2137,7 @@ func (x *SyncUnversionedRampActivityResponse) GetTaskQueueMaxVersions() map[stri // used as Worker Deployment Version workflow update input: type UpdateVersionMetadataArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - UpsertEntries map[string]*v12.Payload `protobuf:"bytes,1,rep,name=upsert_entries,json=upsertEntries,proto3" json:"upsert_entries,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + UpsertEntries map[string]*v13.Payload `protobuf:"bytes,1,rep,name=upsert_entries,json=upsertEntries,proto3" json:"upsert_entries,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` RemoveEntries []string `protobuf:"bytes,2,rep,name=remove_entries,json=removeEntries,proto3" json:"remove_entries,omitempty"` Identity string `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` unknownFields protoimpl.UnknownFields @@ -2147,7 +2174,7 @@ func (*UpdateVersionMetadataArgs) Descriptor() ([]byte, []int) { return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{30} } -func (x *UpdateVersionMetadataArgs) GetUpsertEntries() map[string]*v12.Payload { +func (x *UpdateVersionMetadataArgs) GetUpsertEntries() map[string]*v13.Payload { if x != nil { return x.UpsertEntries } @@ -2453,7 +2480,7 @@ type CreateWorkerDeploymentVersionArgs struct { RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` // Version string (.) Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` - ComputeConfig *v13.ComputeConfig `protobuf:"bytes,4,opt,name=compute_config,json=computeConfig,proto3" json:"compute_config,omitempty"` + ComputeConfig *v12.ComputeConfig `protobuf:"bytes,4,opt,name=compute_config,json=computeConfig,proto3" json:"compute_config,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2509,7 +2536,7 @@ func (x *CreateWorkerDeploymentVersionArgs) GetVersion() string { return "" } -func (x *CreateWorkerDeploymentVersionArgs) GetComputeConfig() *v13.ComputeConfig { +func (x *CreateWorkerDeploymentVersionArgs) GetComputeConfig() *v12.ComputeConfig { if x != nil { return x.ComputeConfig } @@ -3477,7 +3504,7 @@ func (x *WorkerDeploymentSummary) GetRampingVersionSummary() *v11.WorkerDeployme // the Worker Controller Instance client. type ValidateWorkerControllerInstanceSpecInput struct { state protoimpl.MessageState `protogen:"open.v1"` - ScalingGroups map[string]*v13.ComputeConfigScalingGroup `protobuf:"bytes,1,rep,name=scaling_groups,json=scalingGroups,proto3" json:"scaling_groups,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ScalingGroups map[string]*v12.ComputeConfigScalingGroup `protobuf:"bytes,1,rep,name=scaling_groups,json=scalingGroups,proto3" json:"scaling_groups,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3512,7 +3539,7 @@ func (*ValidateWorkerControllerInstanceSpecInput) Descriptor() ([]byte, []int) { return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{52} } -func (x *ValidateWorkerControllerInstanceSpecInput) GetScalingGroups() map[string]*v13.ComputeConfigScalingGroup { +func (x *ValidateWorkerControllerInstanceSpecInput) GetScalingGroups() map[string]*v12.ComputeConfigScalingGroup { if x != nil { return x.ScalingGroups } @@ -3525,7 +3552,7 @@ type UpdateWorkerControllerInstanceInput struct { state protoimpl.MessageState `protogen:"open.v1"` Version *v11.WorkerDeploymentVersion `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` - UpsertScalingGroups map[string]*v13.ComputeConfigScalingGroupUpdate `protobuf:"bytes,3,rep,name=upsert_scaling_groups,json=upsertScalingGroups,proto3" json:"upsert_scaling_groups,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + UpsertScalingGroups map[string]*v12.ComputeConfigScalingGroupUpdate `protobuf:"bytes,3,rep,name=upsert_scaling_groups,json=upsertScalingGroups,proto3" json:"upsert_scaling_groups,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` RemoveScalingGroups []string `protobuf:"bytes,4,rep,name=remove_scaling_groups,json=removeScalingGroups,proto3" json:"remove_scaling_groups,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -3575,7 +3602,7 @@ func (x *UpdateWorkerControllerInstanceInput) GetIdentity() string { return "" } -func (x *UpdateWorkerControllerInstanceInput) GetUpsertScalingGroups() map[string]*v13.ComputeConfigScalingGroupUpdate { +func (x *UpdateWorkerControllerInstanceInput) GetUpsertScalingGroups() map[string]*v12.ComputeConfigScalingGroupUpdate { if x != nil { return x.UpsertScalingGroups } @@ -3649,7 +3676,7 @@ type UpdateComputeConfigArgs struct { Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` // Scaling groups to add or update. - UpsertScalingGroups map[string]*v13.ComputeConfigScalingGroupUpdate `protobuf:"bytes,3,rep,name=upsert_scaling_groups,json=upsertScalingGroups,proto3" json:"upsert_scaling_groups,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + UpsertScalingGroups map[string]*v12.ComputeConfigScalingGroupUpdate `protobuf:"bytes,3,rep,name=upsert_scaling_groups,json=upsertScalingGroups,proto3" json:"upsert_scaling_groups,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Names of scaling groups to remove. Names that don't match an existing group are ignored. RemoveScalingGroups []string `protobuf:"bytes,4,rep,name=remove_scaling_groups,json=removeScalingGroups,proto3" json:"remove_scaling_groups,omitempty"` unknownFields protoimpl.UnknownFields @@ -3700,7 +3727,7 @@ func (x *UpdateComputeConfigArgs) GetRequestId() string { return "" } -func (x *UpdateComputeConfigArgs) GetUpsertScalingGroups() map[string]*v13.ComputeConfigScalingGroupUpdate { +func (x *UpdateComputeConfigArgs) GetUpsertScalingGroups() map[string]*v12.ComputeConfigScalingGroupUpdate { if x != nil { return x.UpsertScalingGroups } @@ -4014,7 +4041,7 @@ const file_temporal_server_api_deployment_v1_message_proto_rawDesc = "" + "\vupdate_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\n" + "updateTime\x12\x18\n" + "\adeleted\x18\x03 \x01(\bR\adeleted\x12L\n" + - "\x06status\x18\x06 \x01(\x0e24.temporal.api.enums.v1.WorkerDeploymentVersionStatusR\x06status\"\xea\f\n" + + "\x06status\x18\x06 \x01(\x0e24.temporal.api.enums.v1.WorkerDeploymentVersionStatusR\x06status\"\xc0\r\n" + "\x11VersionLocalState\x12T\n" + "\aversion\x18\x01 \x01(\v2:.temporal.server.api.deployment.v1.WorkerDeploymentVersionR\aversion\x12;\n" + "\vcreate_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\n" + @@ -4034,7 +4061,8 @@ const file_temporal_server_api_deployment_v1_message_proto_rawDesc = "" + "\x0fsync_batch_size\x18\v \x01(\x05R\rsyncBatchSize\x12L\n" + "\x06status\x18\x0e \x01(\x0e24.temporal.api.enums.v1.WorkerDeploymentVersionStatusR\x06status\x12'\n" + "\x0frevision_number\x18\x0f \x01(\x03R\x0erevisionNumber\x124\n" + - "\x16last_modifier_identity\x18\x11 \x01(\tR\x14lastModifierIdentity\x1a\x8e\x01\n" + + "\x16last_modifier_identity\x18\x11 \x01(\tR\x14lastModifierIdentity\x12T\n" + + "\x0ecompute_config\x18\x12 \x01(\v2-.temporal.api.compute.v1.ComputeConfigSummaryR\rcomputeConfig\x1a\x8e\x01\n" + "\x16TaskQueueFamiliesEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12^\n" + "\x05value\x18\x02 \x01(\v2H.temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyDataR\x05value:\x028\x01\x1a\x88\x02\n" + @@ -4072,7 +4100,7 @@ const file_temporal_server_api_deployment_v1_message_proto_rawDesc = "" + "\x03key\x18\x01 \x01(\tR\x03key\x12M\n" + "\x05value\x18\x02 \x01(\v27.temporal.server.api.deployment.v1.PropagatingRevisionsR\x05value:\x028\x01\"A\n" + "\x14PropagatingRevisions\x12)\n" + - "\x10revision_numbers\x18\x01 \x03(\x03R\x0frevisionNumbers\"\xec\x06\n" + + "\x10revision_numbers\x18\x01 \x03(\x03R\x0frevisionNumbers\"\xc2\a\n" + "\x1eWorkerDeploymentVersionSummary\x12\x18\n" + "\aversion\x18\x01 \x01(\tR\aversion\x12;\n" + "\vcreate_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\n" + @@ -4087,7 +4115,8 @@ const file_temporal_server_api_deployment_v1_message_proto_rawDesc = "" + "\x16last_deactivation_time\x18\t \x01(\v2\x1a.google.protobuf.TimestampR\x14lastDeactivationTime\x12L\n" + "\x06status\x18\n" + " \x01(\x0e24.temporal.api.enums.v1.WorkerDeploymentVersionStatusR\x06status\x12*\n" + - "\x11create_request_id\x18\f \x01(\tR\x0fcreateRequestId\"\xa7\x02\n" + + "\x11create_request_id\x18\f \x01(\tR\x0fcreateRequestId\x12T\n" + + "\x0ecompute_config\x18\r \x01(\v2-.temporal.api.compute.v1.ComputeConfigSummaryR\rcomputeConfig\"\xa7\x02\n" + "\x1bRegisterWorkerInVersionArgs\x12&\n" + "\x0ftask_queue_name\x18\x01 \x01(\tR\rtaskQueueName\x12L\n" + "\x0ftask_queue_type\x18\x02 \x01(\x0e2$.temporal.api.enums.v1.TaskQueueTypeR\rtaskQueueType\x12&\n" + @@ -4135,13 +4164,14 @@ const file_temporal_server_api_deployment_v1_message_proto_rawDesc = "" + "\x1cStartWorkerDeploymentRequest\x12'\n" + "\x0fdeployment_name\x18\x01 \x01(\tR\x0edeploymentName\x12\x1d\n" + "\n" + - "request_id\x18\x02 \x01(\tR\trequestId\"\xa4\x01\n" + + "request_id\x18\x02 \x01(\tR\trequestId\"\xfa\x01\n" + "#StartWorkerDeploymentVersionRequest\x12'\n" + "\x0fdeployment_name\x18\x01 \x01(\tR\x0edeploymentName\x12\x19\n" + "\bbuild_id\x18\x02 \x01(\tR\abuildId\x12\x1d\n" + "\n" + "request_id\x18\x03 \x01(\tR\trequestId\x12\x1a\n" + - "\bidentity\x18\x04 \x01(\tR\bidentity\"\xb4\x05\n" + + "\bidentity\x18\x04 \x01(\tR\bidentity\x12T\n" + + "\x0ecompute_config\x18\x05 \x01(\v2-.temporal.api.compute.v1.ComputeConfigSummaryR\rcomputeConfig\"\xb4\x05\n" + "$SyncDeploymentVersionUserDataRequest\x12'\n" + "\x0fdeployment_name\x18\x04 \x01(\tR\x0edeploymentName\x12T\n" + "\aversion\x18\x01 \x01(\v2:.temporal.server.api.deployment.v1.WorkerDeploymentVersionR\aversion\x12h\n" + @@ -4401,120 +4431,124 @@ var file_temporal_server_api_deployment_v1_message_proto_goTypes = []any{ (v1.WorkerDeploymentVersionStatus)(0), // 75: temporal.api.enums.v1.WorkerDeploymentVersionStatus (*v11.VersionDrainageInfo)(nil), // 76: temporal.api.deployment.v1.VersionDrainageInfo (*v11.VersionMetadata)(nil), // 77: temporal.api.deployment.v1.VersionMetadata - (*v11.RoutingConfig)(nil), // 78: temporal.api.deployment.v1.RoutingConfig - (v1.VersionDrainageStatus)(0), // 79: temporal.api.enums.v1.VersionDrainageStatus - (v1.TaskQueueType)(0), // 80: temporal.api.enums.v1.TaskQueueType - (*v11.WorkerDeploymentVersionInfo_VersionTaskQueueInfo)(nil), // 81: temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo - (*v13.ComputeConfig)(nil), // 82: temporal.api.compute.v1.ComputeConfig - (*v11.WorkerDeploymentInfo_WorkerDeploymentVersionSummary)(nil), // 83: temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - (*v11.WorkerDeploymentVersion)(nil), // 84: temporal.api.deployment.v1.WorkerDeploymentVersion - (*v12.Payload)(nil), // 85: temporal.api.common.v1.Payload - (*v13.ComputeConfigScalingGroup)(nil), // 86: temporal.api.compute.v1.ComputeConfigScalingGroup - (*v13.ComputeConfigScalingGroupUpdate)(nil), // 87: temporal.api.compute.v1.ComputeConfigScalingGroupUpdate + (*v12.ComputeConfigSummary)(nil), // 78: temporal.api.compute.v1.ComputeConfigSummary + (*v11.RoutingConfig)(nil), // 79: temporal.api.deployment.v1.RoutingConfig + (v1.VersionDrainageStatus)(0), // 80: temporal.api.enums.v1.VersionDrainageStatus + (v1.TaskQueueType)(0), // 81: temporal.api.enums.v1.TaskQueueType + (*v11.WorkerDeploymentVersionInfo_VersionTaskQueueInfo)(nil), // 82: temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo + (*v12.ComputeConfig)(nil), // 83: temporal.api.compute.v1.ComputeConfig + (*v11.WorkerDeploymentInfo_WorkerDeploymentVersionSummary)(nil), // 84: temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + (*v11.WorkerDeploymentVersion)(nil), // 85: temporal.api.deployment.v1.WorkerDeploymentVersion + (*v13.Payload)(nil), // 86: temporal.api.common.v1.Payload + (*v12.ComputeConfigScalingGroup)(nil), // 87: temporal.api.compute.v1.ComputeConfigScalingGroup + (*v12.ComputeConfigScalingGroupUpdate)(nil), // 88: temporal.api.compute.v1.ComputeConfigScalingGroupUpdate } var file_temporal_server_api_deployment_v1_message_proto_depIdxs = []int32{ - 0, // 0: temporal.server.api.deployment.v1.DeploymentVersionData.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 74, // 1: temporal.server.api.deployment.v1.DeploymentVersionData.routing_update_time:type_name -> google.protobuf.Timestamp - 74, // 2: temporal.server.api.deployment.v1.DeploymentVersionData.current_since_time:type_name -> google.protobuf.Timestamp - 74, // 3: temporal.server.api.deployment.v1.DeploymentVersionData.ramping_since_time:type_name -> google.protobuf.Timestamp - 75, // 4: temporal.server.api.deployment.v1.DeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus - 74, // 5: temporal.server.api.deployment.v1.WorkerDeploymentVersionData.update_time:type_name -> google.protobuf.Timestamp - 75, // 6: temporal.server.api.deployment.v1.WorkerDeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus - 0, // 7: temporal.server.api.deployment.v1.VersionLocalState.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 74, // 8: temporal.server.api.deployment.v1.VersionLocalState.create_time:type_name -> google.protobuf.Timestamp - 74, // 9: temporal.server.api.deployment.v1.VersionLocalState.routing_update_time:type_name -> google.protobuf.Timestamp - 74, // 10: temporal.server.api.deployment.v1.VersionLocalState.current_since_time:type_name -> google.protobuf.Timestamp - 74, // 11: temporal.server.api.deployment.v1.VersionLocalState.ramping_since_time:type_name -> google.protobuf.Timestamp - 74, // 12: temporal.server.api.deployment.v1.VersionLocalState.first_activation_time:type_name -> google.protobuf.Timestamp - 74, // 13: temporal.server.api.deployment.v1.VersionLocalState.last_current_time:type_name -> google.protobuf.Timestamp - 74, // 14: temporal.server.api.deployment.v1.VersionLocalState.last_deactivation_time:type_name -> google.protobuf.Timestamp - 76, // 15: temporal.server.api.deployment.v1.VersionLocalState.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo - 77, // 16: temporal.server.api.deployment.v1.VersionLocalState.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata - 59, // 17: temporal.server.api.deployment.v1.VersionLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry - 75, // 18: temporal.server.api.deployment.v1.VersionLocalState.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus - 3, // 19: temporal.server.api.deployment.v1.WorkerDeploymentVersionWorkflowArgs.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 7, // 20: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState - 74, // 21: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp - 78, // 22: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 62, // 23: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.versions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry - 63, // 24: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.propagating_revisions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry - 74, // 25: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.create_time:type_name -> google.protobuf.Timestamp - 79, // 26: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus - 76, // 27: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo - 74, // 28: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.routing_update_time:type_name -> google.protobuf.Timestamp - 74, // 29: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.current_since_time:type_name -> google.protobuf.Timestamp - 74, // 30: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.ramping_since_time:type_name -> google.protobuf.Timestamp - 74, // 31: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.first_activation_time:type_name -> google.protobuf.Timestamp - 74, // 32: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_current_time:type_name -> google.protobuf.Timestamp - 74, // 33: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_deactivation_time:type_name -> google.protobuf.Timestamp - 75, // 34: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus - 80, // 35: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 78, // 36: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 80, // 37: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType - 0, // 38: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 81, // 39: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityResult.task_queue_infos:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo - 74, // 40: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_update_time:type_name -> google.protobuf.Timestamp - 74, // 41: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.current_since_time:type_name -> google.protobuf.Timestamp - 74, // 42: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.ramping_since_time:type_name -> google.protobuf.Timestamp - 78, // 43: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 3, // 44: temporal.server.api.deployment.v1.SyncVersionStateResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 9, // 45: temporal.server.api.deployment.v1.SyncVersionStateResponse.summary:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary - 74, // 46: temporal.server.api.deployment.v1.AddVersionUpdateArgs.create_time:type_name -> google.protobuf.Timestamp - 76, // 47: temporal.server.api.deployment.v1.SyncDrainageInfoSignalArgs.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo - 79, // 48: temporal.server.api.deployment.v1.SyncDrainageStatusSignalArgs.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus - 3, // 49: temporal.server.api.deployment.v1.QueryDescribeVersionResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 7, // 50: temporal.server.api.deployment.v1.QueryDescribeWorkerDeploymentResponse.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState - 0, // 51: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 64, // 52: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData - 78, // 53: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.update_routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 2, // 54: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.upsert_version_data:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionData - 65, // 55: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry - 66, // 56: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry - 14, // 57: temporal.server.api.deployment.v1.SyncUnversionedRampActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs - 67, // 58: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry - 68, // 59: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.upsert_entries:type_name -> temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry - 77, // 60: temporal.server.api.deployment.v1.UpdateVersionMetadataResponse.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata - 82, // 61: temporal.server.api.deployment.v1.CreateWorkerDeploymentVersionArgs.compute_config:type_name -> temporal.api.compute.v1.ComputeConfig - 69, // 62: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.task_queues_and_types:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry - 0, // 63: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.worker_deployment_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion - 14, // 64: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs - 3, // 65: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 9, // 66: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.summary:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary - 74, // 67: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp - 78, // 68: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 83, // 69: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 83, // 70: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 83, // 71: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 74, // 72: temporal.server.api.deployment.v1.WorkerDeploymentSummary.create_time:type_name -> google.protobuf.Timestamp - 78, // 73: temporal.server.api.deployment.v1.WorkerDeploymentSummary.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig - 83, // 74: temporal.server.api.deployment.v1.WorkerDeploymentSummary.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 83, // 75: temporal.server.api.deployment.v1.WorkerDeploymentSummary.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 83, // 76: temporal.server.api.deployment.v1.WorkerDeploymentSummary.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary - 71, // 77: temporal.server.api.deployment.v1.ValidateWorkerControllerInstanceSpecInput.scaling_groups:type_name -> temporal.server.api.deployment.v1.ValidateWorkerControllerInstanceSpecInput.ScalingGroupsEntry - 84, // 78: temporal.server.api.deployment.v1.UpdateWorkerControllerInstanceInput.version:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersion - 72, // 79: temporal.server.api.deployment.v1.UpdateWorkerControllerInstanceInput.upsert_scaling_groups:type_name -> temporal.server.api.deployment.v1.UpdateWorkerControllerInstanceInput.UpsertScalingGroupsEntry - 84, // 80: temporal.server.api.deployment.v1.DeleteWorkerControllerInstanceInput.version:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersion - 73, // 81: temporal.server.api.deployment.v1.UpdateComputeConfigArgs.upsert_scaling_groups:type_name -> temporal.server.api.deployment.v1.UpdateComputeConfigArgs.UpsertScalingGroupsEntry - 7, // 82: temporal.server.api.deployment.v1.ForceCANDeploymentSignalArgs.override_state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState - 3, // 83: temporal.server.api.deployment.v1.ForceCANVersionSignalArgs.override_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState - 60, // 84: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData - 61, // 85: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry - 4, // 86: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueVersionData - 9, // 87: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry.value:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary - 8, // 88: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry.value:type_name -> temporal.server.api.deployment.v1.PropagatingRevisions - 80, // 89: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.types:type_name -> temporal.api.enums.v1.TaskQueueType - 1, // 90: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData - 85, // 91: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry.value:type_name -> temporal.api.common.v1.Payload - 70, // 92: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry.value:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes - 80, // 93: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes.types:type_name -> temporal.api.enums.v1.TaskQueueType - 86, // 94: temporal.server.api.deployment.v1.ValidateWorkerControllerInstanceSpecInput.ScalingGroupsEntry.value:type_name -> temporal.api.compute.v1.ComputeConfigScalingGroup - 87, // 95: temporal.server.api.deployment.v1.UpdateWorkerControllerInstanceInput.UpsertScalingGroupsEntry.value:type_name -> temporal.api.compute.v1.ComputeConfigScalingGroupUpdate - 87, // 96: temporal.server.api.deployment.v1.UpdateComputeConfigArgs.UpsertScalingGroupsEntry.value:type_name -> temporal.api.compute.v1.ComputeConfigScalingGroupUpdate - 97, // [97:97] is the sub-list for method output_type - 97, // [97:97] is the sub-list for method input_type - 97, // [97:97] is the sub-list for extension type_name - 97, // [97:97] is the sub-list for extension extendee - 0, // [0:97] is the sub-list for field type_name + 0, // 0: temporal.server.api.deployment.v1.DeploymentVersionData.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 74, // 1: temporal.server.api.deployment.v1.DeploymentVersionData.routing_update_time:type_name -> google.protobuf.Timestamp + 74, // 2: temporal.server.api.deployment.v1.DeploymentVersionData.current_since_time:type_name -> google.protobuf.Timestamp + 74, // 3: temporal.server.api.deployment.v1.DeploymentVersionData.ramping_since_time:type_name -> google.protobuf.Timestamp + 75, // 4: temporal.server.api.deployment.v1.DeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus + 74, // 5: temporal.server.api.deployment.v1.WorkerDeploymentVersionData.update_time:type_name -> google.protobuf.Timestamp + 75, // 6: temporal.server.api.deployment.v1.WorkerDeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus + 0, // 7: temporal.server.api.deployment.v1.VersionLocalState.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 74, // 8: temporal.server.api.deployment.v1.VersionLocalState.create_time:type_name -> google.protobuf.Timestamp + 74, // 9: temporal.server.api.deployment.v1.VersionLocalState.routing_update_time:type_name -> google.protobuf.Timestamp + 74, // 10: temporal.server.api.deployment.v1.VersionLocalState.current_since_time:type_name -> google.protobuf.Timestamp + 74, // 11: temporal.server.api.deployment.v1.VersionLocalState.ramping_since_time:type_name -> google.protobuf.Timestamp + 74, // 12: temporal.server.api.deployment.v1.VersionLocalState.first_activation_time:type_name -> google.protobuf.Timestamp + 74, // 13: temporal.server.api.deployment.v1.VersionLocalState.last_current_time:type_name -> google.protobuf.Timestamp + 74, // 14: temporal.server.api.deployment.v1.VersionLocalState.last_deactivation_time:type_name -> google.protobuf.Timestamp + 76, // 15: temporal.server.api.deployment.v1.VersionLocalState.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo + 77, // 16: temporal.server.api.deployment.v1.VersionLocalState.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata + 59, // 17: temporal.server.api.deployment.v1.VersionLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry + 75, // 18: temporal.server.api.deployment.v1.VersionLocalState.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus + 78, // 19: temporal.server.api.deployment.v1.VersionLocalState.compute_config:type_name -> temporal.api.compute.v1.ComputeConfigSummary + 3, // 20: temporal.server.api.deployment.v1.WorkerDeploymentVersionWorkflowArgs.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 7, // 21: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowArgs.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState + 74, // 22: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp + 79, // 23: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 62, // 24: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.versions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry + 63, // 25: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.propagating_revisions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry + 74, // 26: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.create_time:type_name -> google.protobuf.Timestamp + 80, // 27: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus + 76, // 28: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo + 74, // 29: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.routing_update_time:type_name -> google.protobuf.Timestamp + 74, // 30: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.current_since_time:type_name -> google.protobuf.Timestamp + 74, // 31: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.ramping_since_time:type_name -> google.protobuf.Timestamp + 74, // 32: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.first_activation_time:type_name -> google.protobuf.Timestamp + 74, // 33: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_current_time:type_name -> google.protobuf.Timestamp + 74, // 34: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_deactivation_time:type_name -> google.protobuf.Timestamp + 75, // 35: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus + 78, // 36: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.compute_config:type_name -> temporal.api.compute.v1.ComputeConfigSummary + 81, // 37: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 79, // 38: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 81, // 39: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType + 0, // 40: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 82, // 41: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityResult.task_queue_infos:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo + 74, // 42: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_update_time:type_name -> google.protobuf.Timestamp + 74, // 43: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.current_since_time:type_name -> google.protobuf.Timestamp + 74, // 44: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.ramping_since_time:type_name -> google.protobuf.Timestamp + 79, // 45: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 3, // 46: temporal.server.api.deployment.v1.SyncVersionStateResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 9, // 47: temporal.server.api.deployment.v1.SyncVersionStateResponse.summary:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary + 74, // 48: temporal.server.api.deployment.v1.AddVersionUpdateArgs.create_time:type_name -> google.protobuf.Timestamp + 76, // 49: temporal.server.api.deployment.v1.SyncDrainageInfoSignalArgs.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo + 80, // 50: temporal.server.api.deployment.v1.SyncDrainageStatusSignalArgs.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus + 3, // 51: temporal.server.api.deployment.v1.QueryDescribeVersionResponse.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 7, // 52: temporal.server.api.deployment.v1.QueryDescribeWorkerDeploymentResponse.state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState + 78, // 53: temporal.server.api.deployment.v1.StartWorkerDeploymentVersionRequest.compute_config:type_name -> temporal.api.compute.v1.ComputeConfigSummary + 0, // 54: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 64, // 55: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData + 79, // 56: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.update_routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 2, // 57: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.upsert_version_data:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionData + 65, // 58: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry + 66, // 59: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry + 14, // 60: temporal.server.api.deployment.v1.SyncUnversionedRampActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs + 67, // 61: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry + 68, // 62: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.upsert_entries:type_name -> temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry + 77, // 63: temporal.server.api.deployment.v1.UpdateVersionMetadataResponse.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata + 83, // 64: temporal.server.api.deployment.v1.CreateWorkerDeploymentVersionArgs.compute_config:type_name -> temporal.api.compute.v1.ComputeConfig + 69, // 65: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.task_queues_and_types:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry + 0, // 66: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.worker_deployment_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion + 14, // 67: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs + 3, // 68: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 9, // 69: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.summary:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary + 74, // 70: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp + 79, // 71: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 84, // 72: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 84, // 73: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 84, // 74: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 74, // 75: temporal.server.api.deployment.v1.WorkerDeploymentSummary.create_time:type_name -> google.protobuf.Timestamp + 79, // 76: temporal.server.api.deployment.v1.WorkerDeploymentSummary.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig + 84, // 77: temporal.server.api.deployment.v1.WorkerDeploymentSummary.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 84, // 78: temporal.server.api.deployment.v1.WorkerDeploymentSummary.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 84, // 79: temporal.server.api.deployment.v1.WorkerDeploymentSummary.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary + 71, // 80: temporal.server.api.deployment.v1.ValidateWorkerControllerInstanceSpecInput.scaling_groups:type_name -> temporal.server.api.deployment.v1.ValidateWorkerControllerInstanceSpecInput.ScalingGroupsEntry + 85, // 81: temporal.server.api.deployment.v1.UpdateWorkerControllerInstanceInput.version:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersion + 72, // 82: temporal.server.api.deployment.v1.UpdateWorkerControllerInstanceInput.upsert_scaling_groups:type_name -> temporal.server.api.deployment.v1.UpdateWorkerControllerInstanceInput.UpsertScalingGroupsEntry + 85, // 83: temporal.server.api.deployment.v1.DeleteWorkerControllerInstanceInput.version:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersion + 73, // 84: temporal.server.api.deployment.v1.UpdateComputeConfigArgs.upsert_scaling_groups:type_name -> temporal.server.api.deployment.v1.UpdateComputeConfigArgs.UpsertScalingGroupsEntry + 7, // 85: temporal.server.api.deployment.v1.ForceCANDeploymentSignalArgs.override_state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState + 3, // 86: temporal.server.api.deployment.v1.ForceCANVersionSignalArgs.override_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState + 60, // 87: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData + 61, // 88: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry + 4, // 89: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueVersionData + 9, // 90: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry.value:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary + 8, // 91: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry.value:type_name -> temporal.server.api.deployment.v1.PropagatingRevisions + 81, // 92: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.types:type_name -> temporal.api.enums.v1.TaskQueueType + 1, // 93: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData + 86, // 94: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry.value:type_name -> temporal.api.common.v1.Payload + 70, // 95: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry.value:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes + 81, // 96: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes.types:type_name -> temporal.api.enums.v1.TaskQueueType + 87, // 97: temporal.server.api.deployment.v1.ValidateWorkerControllerInstanceSpecInput.ScalingGroupsEntry.value:type_name -> temporal.api.compute.v1.ComputeConfigScalingGroup + 88, // 98: temporal.server.api.deployment.v1.UpdateWorkerControllerInstanceInput.UpsertScalingGroupsEntry.value:type_name -> temporal.api.compute.v1.ComputeConfigScalingGroupUpdate + 88, // 99: temporal.server.api.deployment.v1.UpdateComputeConfigArgs.UpsertScalingGroupsEntry.value:type_name -> temporal.api.compute.v1.ComputeConfigScalingGroupUpdate + 100, // [100:100] is the sub-list for method output_type + 100, // [100:100] is the sub-list for method input_type + 100, // [100:100] is the sub-list for extension type_name + 100, // [100:100] is the sub-list for extension extendee + 0, // [0:100] is the sub-list for field type_name } func init() { file_temporal_server_api_deployment_v1_message_proto_init() } diff --git a/go.mod b/go.mod index 78b647ff72..20e025264c 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/emirpasic/gods v1.18.1 github.com/fatih/color v1.18.0 github.com/go-faker/faker/v4 v4.6.0 - github.com/go-jose/go-jose/v4 v4.1.3 + github.com/go-jose/go-jose/v4 v4.1.4 github.com/go-sql-driver/mysql v1.9.0 github.com/gocql/gocql v1.7.0 github.com/golang-jwt/jwt/v4 v4.5.2 @@ -60,7 +60,7 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.40.0 go.opentelemetry.io/otel/trace v1.40.0 go.temporal.io/api v1.62.8-0.20260406230818-5423d0dd678a - go.temporal.io/auto-scaled-workers v0.0.0-20260401235702-f2721a623799 + go.temporal.io/auto-scaled-workers v0.0.0-20260407181057-edd947d743d2 go.temporal.io/sdk v1.41.1 go.uber.org/fx v1.24.0 go.uber.org/mock v0.6.0 diff --git a/go.sum b/go.sum index 2aa6afb027..6e4a841950 100644 --- a/go.sum +++ b/go.sum @@ -153,8 +153,8 @@ github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj2 github.com/go-faker/faker/v4 v4.6.0 h1:6aOPzNptRiDwD14HuAnEtlTa+D1IfFuEHO8+vEFwjTs= github.com/go-faker/faker/v4 v4.6.0/go.mod h1:ZmrHuVtTTm2Em9e0Du6CJ9CADaLEzGXW62z1YqFH0m0= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= -github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -442,8 +442,8 @@ go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOV go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.temporal.io/api v1.62.8-0.20260406230818-5423d0dd678a h1:2nCxSSKutK1VP2eA7/lw5/DfHk+UxNtr1GN5KsZTSNo= go.temporal.io/api v1.62.8-0.20260406230818-5423d0dd678a/go.mod h1:iaxoP/9OXMJcQkETTECfwYq4cw/bj4nwov8b3ZLVnXM= -go.temporal.io/auto-scaled-workers v0.0.0-20260401235702-f2721a623799 h1:M+eqXvIdNCCf5wIX2no7lLuCjdhmqoIKlcPUZIo9aPg= -go.temporal.io/auto-scaled-workers v0.0.0-20260401235702-f2721a623799/go.mod h1:gni0wHhtx7BbY/Hr41ea0JENWQAlWqQbxXqXQ7p2ONo= +go.temporal.io/auto-scaled-workers v0.0.0-20260407181057-edd947d743d2 h1:1hKeH3GyR6YD6LKMHGCZ76t6h1Sgha0hXVQBxWi3dlQ= +go.temporal.io/auto-scaled-workers v0.0.0-20260407181057-edd947d743d2/go.mod h1:T8dnzVPeO+gaUTj9eDgm/lT2lZH4+JXNvrGaQGyVi50= go.temporal.io/sdk v1.41.1 h1:yOpvsHyDD1lNuwlGBv/SUodCPhjv9nDeC9lLHW/fJUA= go.temporal.io/sdk v1.41.1/go.mod h1:/InXQT5guZ6AizYzpmzr5avQ/GMgq1ZObcKlKE2AhTc= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= diff --git a/proto/internal/temporal/server/api/deployment/v1/message.proto b/proto/internal/temporal/server/api/deployment/v1/message.proto index 9a4458cd3f..cb253f47e0 100644 --- a/proto/internal/temporal/server/api/deployment/v1/message.proto +++ b/proto/internal/temporal/server/api/deployment/v1/message.proto @@ -147,6 +147,9 @@ message VersionLocalState { // Covers changes through: CreateWorkerDeploymentVersion, UpdateWorkerDeploymentVersionComputeConfig, // UpdateWorkerDeploymentVersionMetadata. string last_modifier_identity = 17; + + // Cached compute config summary, kept in sync with the WCI on each compute config update. + temporal.api.compute.v1.ComputeConfigSummary compute_config = 18; } // Data specific to a task queue, from the perspective of a worker deployment version. @@ -226,6 +229,10 @@ message WorkerDeploymentVersionSummary { // Request ID used to create this version. Used for idempotency. // Not synced from the version workflow; only set by the deployment workflow. string create_request_id = 12; + + // Compute config summary for this version. Synced from the version workflow on each compute config update. + // Also set by the deployment workflow at version creation time if a compute config was provided. + temporal.api.compute.v1.ComputeConfigSummary compute_config = 13; } // used as Worker Deployment Version workflow update input: @@ -337,6 +344,7 @@ message StartWorkerDeploymentVersionRequest { string build_id = 2; string request_id = 3; string identity = 4; + temporal.api.compute.v1.ComputeConfigSummary compute_config = 5; } // used as Worker Deployment Version workflow activity input: diff --git a/service/worker/workerdeployment/activities.go b/service/worker/workerdeployment/activities.go index c1073f2cb7..6ae8a6cf4d 100644 --- a/service/worker/workerdeployment/activities.go +++ b/service/worker/workerdeployment/activities.go @@ -6,6 +6,7 @@ import ( "errors" "sync" + computepb "go.temporal.io/api/compute/v1" enumspb "go.temporal.io/api/enums/v1" "go.temporal.io/api/serviceerror" updatepb "go.temporal.io/api/update/v1" @@ -275,19 +276,23 @@ func (a *Activities) StartWorkerDeploymentVersionWorkflow( logger := activity.GetLogger(ctx) logger.Info("starting worker deployment version workflow", "deploymentName", input.DeploymentName, "buildID", input.BuildId) startIdentity := "deployment workflow " + activity.GetInfo(ctx).WorkflowExecution.ID - return a.WorkerDeploymentClient.StartWorkerDeploymentVersion(ctx, a.namespace, input.DeploymentName, input.BuildId, startIdentity, input.RequestId, input.GetIdentity()) + return a.WorkerDeploymentClient.StartWorkerDeploymentVersion(ctx, a.namespace, input.DeploymentName, input.BuildId, startIdentity, input.RequestId, input.GetIdentity(), input.GetComputeConfig()) } -func (a *Activities) UpdateWorkerControllerInstanceFromDeployment(ctx context.Context, input *deploymentspb.UpdateWorkerControllerInstanceInput) error { +func (a *Activities) UpdateWorkerControllerInstanceFromDeployment(ctx context.Context, input *deploymentspb.UpdateWorkerControllerInstanceInput) (*computepb.ComputeConfigSummary, error) { upserts := scalingGroupUpdatesToWCI(input.GetUpsertScalingGroups()) - if err := a.WorkerControllerInstanceClient.UpdateWorkerControllerInstance(ctx, a.namespace, input.GetVersion(), nil, input.GetIdentity(), upserts, input.GetRemoveScalingGroups()); err != nil { + resp, err := a.WorkerControllerInstanceClient.UpdateWorkerControllerInstance(ctx, a.namespace, input.GetVersion(), nil, input.GetIdentity(), upserts, input.GetRemoveScalingGroups()) + if err != nil { var invalidArgs *serviceerror.InvalidArgument if errors.As(err, &invalidArgs) { - return temporal.NewApplicationError(err.Error(), errInvalidComputeConfig) + return nil, temporal.NewApplicationError(err.Error(), errInvalidComputeConfig) } - return err + return nil, err } - return nil + if resp == nil { + return nil, nil + } + return wciSpecToComputeConfigSummary(resp.Spec), nil } func (a *Activities) DeleteWorkerControllerInstanceFromDeployment(ctx context.Context, input *deploymentspb.DeleteWorkerControllerInstanceInput) error { diff --git a/service/worker/workerdeployment/client.go b/service/worker/workerdeployment/client.go index 5f45a386f3..747d293503 100644 --- a/service/worker/workerdeployment/client.go +++ b/service/worker/workerdeployment/client.go @@ -165,6 +165,7 @@ type Client interface { ctx context.Context, namespaceEntry *namespace.Namespace, deploymentName, buildID, identity, requestID, modifierIdentity string, + computeConfig *computepb.ComputeConfigSummary, ) error // Used internally by the Worker Deployment workflow in its SyncWorkerDeploymentVersion Activity @@ -1346,6 +1347,7 @@ func (d *ClientImpl) StartWorkerDeploymentVersion( ctx context.Context, namespaceEntry *namespace.Namespace, deploymentName, buildID, identity, requestID, modifierIdentity string, + computeConfig *computepb.ComputeConfigSummary, ) (retErr error) { //revive:disable-next-line:defer defer d.convertAndRecordError("StartWorkerDeploymentVersion", deploymentName, &retErr, namespaceEntry.Name(), identity)() @@ -1360,7 +1362,7 @@ func (d *ClientImpl) StartWorkerDeploymentVersion( } workflowID := GenerateVersionWorkflowID(deploymentName, buildID) - args := d.makeVersionWorkflowArgs(deploymentName, buildID, namespaceEntry, modifierIdentity, enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CREATED) + args := d.makeVersionWorkflowArgs(deploymentName, buildID, namespaceEntry, modifierIdentity, enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CREATED, computeConfig) input, err := sdk.PreferProtoDataConverter.ToPayloads(args) if err != nil { return err @@ -1534,7 +1536,12 @@ func (d *ClientImpl) updateWithStartWorkerDeploymentVersion( } workflowID := GenerateVersionWorkflowID(deploymentName, buildID) - input, err := sdk.PreferProtoDataConverter.ToPayloads(d.makeVersionWorkflowArgs(deploymentName, buildID, namespaceEntry, "", enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_INACTIVE)) + input, err := sdk.PreferProtoDataConverter.ToPayloads(d.makeVersionWorkflowArgs(deploymentName, + buildID, + namespaceEntry, + "", + enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_INACTIVE, + nil)) if err != nil { return nil, err } @@ -1769,6 +1776,7 @@ func (d *ClientImpl) deploymentStateToDeploymentInfo(deploymentName string, stat LastCurrentTime: v.GetLastCurrentTime(), LastDeactivationTime: v.GetLastDeactivationTime(), Status: v.GetStatus(), + ComputeConfig: v.GetComputeConfig(), }) } @@ -2017,11 +2025,12 @@ func (d *ClientImpl) makeVersionWorkflowArgs( namespaceEntry *namespace.Namespace, identity string, initialStatus enumspb.WorkerDeploymentVersionStatus, + computeConfig *computepb.ComputeConfigSummary, ) *deploymentspb.WorkerDeploymentVersionWorkflowArgs { return &deploymentspb.WorkerDeploymentVersionWorkflowArgs{ NamespaceName: namespaceEntry.Name().String(), NamespaceId: namespaceEntry.ID().String(), - VersionState: makeNewVersionState(deploymentName, buildID, time.Now(), identity, initialStatus, d.getSyncBatchSize()), + VersionState: makeNewVersionState(deploymentName, buildID, time.Now(), identity, initialStatus, computeConfig, d.getSyncBatchSize()), } } diff --git a/service/worker/workerdeployment/compute_util.go b/service/worker/workerdeployment/compute_util.go index 22c2b85a55..33637f93aa 100644 --- a/service/worker/workerdeployment/compute_util.go +++ b/service/worker/workerdeployment/compute_util.go @@ -76,6 +76,22 @@ func wciSpecToComputeConfig(spec *wciiface.WorkerControllerInstanceSpec) *comput return &computepb.ComputeConfig{ScalingGroups: groups} } +func wciSpecToComputeConfigSummary(spec *wciiface.WorkerControllerInstanceSpec) *computepb.ComputeConfigSummary { + if spec == nil || len(spec.ScalingGroupSpecs) == 0 { + return nil + } + groups := make(map[string]*computepb.ComputeConfigScalingGroupSummary, len(spec.ScalingGroupSpecs)) + names := workflow.DeterministicKeys(spec.ScalingGroupSpecs) + for _, name := range names { + sg := spec.ScalingGroupSpecs[name] + groups[name] = &computepb.ComputeConfigScalingGroupSummary{ + TaskQueueTypes: sg.TaskTypes, + ProviderType: string(sg.Compute.ProviderType), + } + } + return &computepb.ComputeConfigSummary{ScalingGroups: groups} +} + func scalingGroupsToUpsertUpdates(scalingGroups map[string]*computepb.ComputeConfigScalingGroup) map[string]*computepb.ComputeConfigScalingGroupUpdate { updates := make(map[string]*computepb.ComputeConfigScalingGroupUpdate, len(scalingGroups)) names := workflow.DeterministicKeys(scalingGroups) diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/expected_counts.txt b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/expected_counts.txt new file mode 100644 index 0000000000..5dc7cf1e5b --- /dev/null +++ b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/expected_counts.txt @@ -0,0 +1,6 @@ +# Expected workflow counts for replay testing +# Generated by generate_history.sh on Wed Apr 8 14:55:10 PDT 2026 +EXPECTED_DEPLOYMENT_WORKFLOWS=19 +EXPECTED_VERSION_WORKFLOWS=11 +ACTUAL_DEPLOYMENT_WORKFLOWS=19 +ACTUAL_VERSION_WORKFLOWS=11 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_019d6f17-068c-7a06-8ed1-fcacd6f8afea.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_019d6f17-068c-7a06-8ed1-fcacd6f8afea.json.gz new file mode 100644 index 0000000000..fc49ba03ef Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_019d6f17-068c-7a06-8ed1-fcacd6f8afea.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_224a7ffd-ae5c-4733-9685-2ffb63fdd662.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_224a7ffd-ae5c-4733-9685-2ffb63fdd662.json.gz new file mode 100644 index 0000000000..fd913f5f01 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_224a7ffd-ae5c-4733-9685-2ffb63fdd662.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_46754e89-0f02-45a7-b2d0-51f5d7f28d86.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_46754e89-0f02-45a7-b2d0-51f5d7f28d86.json.gz new file mode 100644 index 0000000000..239a4ae31d Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_46754e89-0f02-45a7-b2d0-51f5d7f28d86.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_4e99a2b9-2bf9-4a0a-8147-08839f4493ea.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_4e99a2b9-2bf9-4a0a-8147-08839f4493ea.json.gz new file mode 100644 index 0000000000..c38360f0ef Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_4e99a2b9-2bf9-4a0a-8147-08839f4493ea.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_51ef5374-249a-47bd-85b1-4a51a910a079.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_51ef5374-249a-47bd-85b1-4a51a910a079.json.gz new file mode 100644 index 0000000000..8d8ce7b15e Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_51ef5374-249a-47bd-85b1-4a51a910a079.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_5abc2150-36c6-41bb-8ed9-320d10890207.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_5abc2150-36c6-41bb-8ed9-320d10890207.json.gz new file mode 100644 index 0000000000..e29cbfe1b6 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_5abc2150-36c6-41bb-8ed9-320d10890207.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_73e2bfdc-cd4a-4f53-aa41-c7de8f79a81f.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_73e2bfdc-cd4a-4f53-aa41-c7de8f79a81f.json.gz new file mode 100644 index 0000000000..0167feeca9 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_73e2bfdc-cd4a-4f53-aa41-c7de8f79a81f.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_9a28076e-569d-4d27-baac-7ecabc6a5bdf.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_9a28076e-569d-4d27-baac-7ecabc6a5bdf.json.gz new file mode 100644 index 0000000000..941278892d Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_9a28076e-569d-4d27-baac-7ecabc6a5bdf.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_9a92fc1c-8a4c-4a39-a7f4-494f0fd876be.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_9a92fc1c-8a4c-4a39-a7f4-494f0fd876be.json.gz new file mode 100644 index 0000000000..b4d563f89f Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_9a92fc1c-8a4c-4a39-a7f4-494f0fd876be.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_ec432420-68c8-4089-ae02-18a8fbc73e1d.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_ec432420-68c8-4089-ae02-18a8fbc73e1d.json.gz new file mode 100644 index 0000000000..306373419e Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_ec432420-68c8-4089-ae02-18a8fbc73e1d.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_fb09a05b-ff03-486f-a132-4f8260d7156d.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_fb09a05b-ff03-486f-a132-4f8260d7156d.json.gz new file mode 100644 index 0000000000..05b957adad Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_version_wf_run_fb09a05b-ff03-486f-a132-4f8260d7156d.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_019d6f17-0239-7795-8331-4eaa45970f83.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_019d6f17-0239-7795-8331-4eaa45970f83.json.gz new file mode 100644 index 0000000000..acb7532ac3 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_019d6f17-0239-7795-8331-4eaa45970f83.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_20309e89-6521-4882-b4c8-1f33f04010ff.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_20309e89-6521-4882-b4c8-1f33f04010ff.json.gz new file mode 100644 index 0000000000..e3367b0de1 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_20309e89-6521-4882-b4c8-1f33f04010ff.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_272ca45d-68d4-466a-ac66-995790f0142c.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_272ca45d-68d4-466a-ac66-995790f0142c.json.gz new file mode 100644 index 0000000000..c9a2ad9983 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_272ca45d-68d4-466a-ac66-995790f0142c.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_2962db09-ce1a-4488-877c-12c5c2c1094a.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_2962db09-ce1a-4488-877c-12c5c2c1094a.json.gz new file mode 100644 index 0000000000..729cdb00f5 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_2962db09-ce1a-4488-877c-12c5c2c1094a.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_3f084e10-0859-489e-bd7f-64124a754a4f.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_3f084e10-0859-489e-bd7f-64124a754a4f.json.gz new file mode 100644 index 0000000000..3675606dd5 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_3f084e10-0859-489e-bd7f-64124a754a4f.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_4117bc4a-0f39-4b94-9f81-175ca8138012.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_4117bc4a-0f39-4b94-9f81-175ca8138012.json.gz new file mode 100644 index 0000000000..ddd2a2db79 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_4117bc4a-0f39-4b94-9f81-175ca8138012.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_411d483f-d549-4756-8bde-7bb3f7a5ba2d.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_411d483f-d549-4756-8bde-7bb3f7a5ba2d.json.gz new file mode 100644 index 0000000000..5a38ac8f87 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_411d483f-d549-4756-8bde-7bb3f7a5ba2d.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_6c8f65d4-dee2-4833-b854-77e99c3275b0.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_6c8f65d4-dee2-4833-b854-77e99c3275b0.json.gz new file mode 100644 index 0000000000..a5921a5f2f Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_6c8f65d4-dee2-4833-b854-77e99c3275b0.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_8c7446a9-2ede-49fb-a984-b032f73d7211.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_8c7446a9-2ede-49fb-a984-b032f73d7211.json.gz new file mode 100644 index 0000000000..b183f8e46a Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_8c7446a9-2ede-49fb-a984-b032f73d7211.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_a115ed0c-e054-469b-921c-3d46f0ef7d8c.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_a115ed0c-e054-469b-921c-3d46f0ef7d8c.json.gz new file mode 100644 index 0000000000..568999475b Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_a115ed0c-e054-469b-921c-3d46f0ef7d8c.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_a1927d1c-0c7f-4811-bc65-6cad0abef0cc.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_a1927d1c-0c7f-4811-bc65-6cad0abef0cc.json.gz new file mode 100644 index 0000000000..36f1d043b9 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_a1927d1c-0c7f-4811-bc65-6cad0abef0cc.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_ab1dce9d-e117-4615-9483-27a962f44fd9.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_ab1dce9d-e117-4615-9483-27a962f44fd9.json.gz new file mode 100644 index 0000000000..608c3c6dea Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_ab1dce9d-e117-4615-9483-27a962f44fd9.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_be54f7d5-2026-4803-b4ee-9fd823b9b028.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_be54f7d5-2026-4803-b4ee-9fd823b9b028.json.gz new file mode 100644 index 0000000000..213efe7bc4 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_be54f7d5-2026-4803-b4ee-9fd823b9b028.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_ce0bd42f-c6fd-4e13-bbf6-bb4cb33731a3.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_ce0bd42f-c6fd-4e13-bbf6-bb4cb33731a3.json.gz new file mode 100644 index 0000000000..7666b16c35 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_ce0bd42f-c6fd-4e13-bbf6-bb4cb33731a3.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_d5ec8a92-81b8-4f1d-a34a-5c4ab8def082.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_d5ec8a92-81b8-4f1d-a34a-5c4ab8def082.json.gz new file mode 100644 index 0000000000..0c11cf7847 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_d5ec8a92-81b8-4f1d-a34a-5c4ab8def082.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_dc01d2a8-3692-4dc6-a64b-df567415ffee.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_dc01d2a8-3692-4dc6-a64b-df567415ffee.json.gz new file mode 100644 index 0000000000..e6557f6fb4 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_dc01d2a8-3692-4dc6-a64b-df567415ffee.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_e151970a-4601-49d2-bdfe-e807da355279.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_e151970a-4601-49d2-bdfe-e807da355279.json.gz new file mode 100644 index 0000000000..df7adf4a37 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_e151970a-4601-49d2-bdfe-e807da355279.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_e63e9705-5c62-41df-8177-54404a236e6b.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_e63e9705-5c62-41df-8177-54404a236e6b.json.gz new file mode 100644 index 0000000000..2a5efe4198 Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_e63e9705-5c62-41df-8177-54404a236e6b.json.gz differ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_e81fc082-38b7-414b-a0c7-28f7a44c1e70.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_e81fc082-38b7-414b-a0c7-28f7a44c1e70.json.gz new file mode 100644 index 0000000000..ccdd50a33d Binary files /dev/null and b/service/worker/workerdeployment/replaytester/testdata/v2/run_1775685309/replay_worker_deployment_wf_run_e81fc082-38b7-414b-a0c7-28f7a44c1e70.json.gz differ diff --git a/service/worker/workerdeployment/util.go b/service/worker/workerdeployment/util.go index e8a8c51a7c..b1e14d9bd0 100644 --- a/service/worker/workerdeployment/util.go +++ b/service/worker/workerdeployment/util.go @@ -8,6 +8,7 @@ import ( "time" commonpb "go.temporal.io/api/common/v1" + computepb "go.temporal.io/api/compute/v1" deploymentpb "go.temporal.io/api/deployment/v1" enumspb "go.temporal.io/api/enums/v1" failurepb "go.temporal.io/api/failure/v1" @@ -440,11 +441,11 @@ func buildSearchAttributes() *commonpb.SearchAttributes { } func makeNewVersionState( - deploymentName, - buildID string, + deploymentName, buildID string, createTime time.Time, identity string, initialStatus enumspb.WorkerDeploymentVersionStatus, + computeConfig *computepb.ComputeConfigSummary, syncBatchSize int32, ) *deploymentspb.VersionLocalState { return &deploymentspb.VersionLocalState{ @@ -462,5 +463,6 @@ func makeNewVersionState( Metadata: nil, SyncBatchSize: syncBatchSize, LastModifierIdentity: identity, + ComputeConfig: computeConfig, } } diff --git a/service/worker/workerdeployment/version_activities.go b/service/worker/workerdeployment/version_activities.go index 56e879d458..47feef6f29 100644 --- a/service/worker/workerdeployment/version_activities.go +++ b/service/worker/workerdeployment/version_activities.go @@ -8,6 +8,7 @@ import ( "sync" "time" + computepb "go.temporal.io/api/compute/v1" deploymentpb "go.temporal.io/api/deployment/v1" enumspb "go.temporal.io/api/enums/v1" "go.temporal.io/api/serviceerror" @@ -198,16 +199,17 @@ func (a *VersionActivities) GetVersionDrainageStatus(ctx context.Context, versio }, nil } -func (a *VersionActivities) UpdateWorkerControllerInstance(ctx context.Context, input *deploymentspb.UpdateWorkerControllerInstanceInput) error { +func (a *VersionActivities) UpdateWorkerControllerInstance(ctx context.Context, input *deploymentspb.UpdateWorkerControllerInstanceInput) (*computepb.ComputeConfigSummary, error) { upserts := scalingGroupUpdatesToWCI(input.GetUpsertScalingGroups()) - if err := a.WorkerControllerInstanceClient.UpdateWorkerControllerInstance(ctx, a.namespace, input.GetVersion(), nil, input.GetIdentity(), upserts, input.GetRemoveScalingGroups()); err != nil { + resp, err := a.WorkerControllerInstanceClient.UpdateWorkerControllerInstance(ctx, a.namespace, input.GetVersion(), nil, input.GetIdentity(), upserts, input.GetRemoveScalingGroups()) + if err != nil { var invalidArgs *serviceerror.InvalidArgument if errors.As(err, &invalidArgs) { - return temporal.NewApplicationError(err.Error(), errInvalidComputeConfig) + return nil, temporal.NewApplicationError(err.Error(), errInvalidComputeConfig) } - return err + return nil, err } - return nil + return wciSpecToComputeConfigSummary(resp.Spec), nil } func (a *VersionActivities) DeleteWorkerControllerInstance(ctx context.Context, input *deploymentspb.DeleteWorkerControllerInstanceInput) error { diff --git a/service/worker/workerdeployment/version_workflow.go b/service/worker/workerdeployment/version_workflow.go index bc332c9bb8..10508ea901 100644 --- a/service/worker/workerdeployment/version_workflow.go +++ b/service/worker/workerdeployment/version_workflow.go @@ -7,6 +7,7 @@ import ( "github.com/google/uuid" commonpb "go.temporal.io/api/common/v1" + computepb "go.temporal.io/api/compute/v1" deploymentpb "go.temporal.io/api/deployment/v1" enumspb "go.temporal.io/api/enums/v1" "go.temporal.io/api/serviceerror" @@ -387,12 +388,13 @@ func (d *VersionWorkflowRunner) handleUpdateVersionComputeConfig(ctx workflow.Co BuildId: d.VersionState.Version.BuildId, } activityCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) + var computeConfigSummary *computepb.ComputeConfigSummary err := workflow.ExecuteActivity(activityCtx, d.a.UpdateWorkerControllerInstance, &deploymentspb.UpdateWorkerControllerInstanceInput{ Version: apiVersion, Identity: args.GetIdentity(), UpsertScalingGroups: args.GetUpsertScalingGroups(), RemoveScalingGroups: args.GetRemoveScalingGroups(), - }).Get(ctx, nil) + }).Get(ctx, &computeConfigSummary) if err != nil { var appErr *temporal.ApplicationError if errors.As(err, &appErr) && appErr.Type() == errInvalidComputeConfig { @@ -401,8 +403,10 @@ func (d *VersionWorkflowRunner) handleUpdateVersionComputeConfig(ctx workflow.Co return nil, serviceerror.NewInternalf("update worker controller instance: %v", err) } + d.VersionState.ComputeConfig = computeConfigSummary d.VersionState.LastModifierIdentity = args.GetIdentity() d.setStateChanged() + d.syncSummary(ctx) return &deploymentspb.UpdateComputeConfigResponse{}, nil } @@ -727,8 +731,13 @@ func (d *VersionWorkflowRunner) handleRegisterWorker(ctx workflow.Context, args func (d *VersionWorkflowRunner) reviveDeleted(ctx workflow.Context) { // Resetting state to get rid of the info from the past life. - state := makeNewVersionState(d.VersionState.Version.DeploymentName, d.VersionState.Version.BuildId, workflow.Now(ctx), "", - enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_INACTIVE, d.VersionState.SyncBatchSize) + state := makeNewVersionState(d.VersionState.Version.DeploymentName, + d.VersionState.Version.BuildId, + workflow.Now(ctx), + "", + enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_INACTIVE, + nil, + d.VersionState.SyncBatchSize) d.VersionState = state d.deleteVersion = false } @@ -1002,6 +1011,7 @@ func versionStateToSummary(s *deploymentspb.VersionLocalState) *deploymentspb.Wo LastCurrentTime: s.LastCurrentTime, LastDeactivationTime: s.LastDeactivationTime, Status: s.Status, + ComputeConfig: s.ComputeConfig, } } diff --git a/service/worker/workerdeployment/version_workflow_test.go b/service/worker/workerdeployment/version_workflow_test.go index a018b5ebf8..225ead0a77 100644 --- a/service/worker/workerdeployment/version_workflow_test.go +++ b/service/worker/workerdeployment/version_workflow_test.go @@ -2271,7 +2271,10 @@ func (s *VersionWorkflowSuite) Test_UpdateComputeConfig_Success() { s.env.OnActivity(a.StartWorkerDeploymentWorkflow, mock.Anything, mock.Anything).Return(nil).Maybe() s.env.RegisterActivity(a.UpdateWorkerControllerInstance) - s.env.OnActivity(a.UpdateWorkerControllerInstance, mock.Anything, mock.Anything).Return(nil).Once() + s.env.OnActivity(a.UpdateWorkerControllerInstance, mock.Anything, mock.Anything).Return((*computepb.ComputeConfigSummary)(nil), nil).Once() + + // Mock external signal to deployment workflow + s.env.OnSignalExternalWorkflow(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil).Maybe() s.env.RegisterDelayedCallback(func() { args := &deploymentspb.UpdateComputeConfigArgs{ @@ -2377,6 +2380,7 @@ func (s *VersionWorkflowSuite) Test_UpdateComputeConfig_UpdateInstanceFailure_Do s.env.RegisterActivity(a.UpdateWorkerControllerInstance) s.env.OnActivity(a.UpdateWorkerControllerInstance, mock.Anything, mock.Anything).Return( + (*computepb.ComputeConfigSummary)(nil), temporal.NewNonRetryableApplicationError("invalid config", errInvalidComputeConfig, nil), ).Maybe() diff --git a/service/worker/workerdeployment/workflow.go b/service/worker/workerdeployment/workflow.go index 08311bb458..3dd17da879 100644 --- a/service/worker/workerdeployment/workflow.go +++ b/service/worker/workerdeployment/workflow.go @@ -7,6 +7,7 @@ import ( "slices" "github.com/google/uuid" + computepb "go.temporal.io/api/compute/v1" deploymentpb "go.temporal.io/api/deployment/v1" enumspb "go.temporal.io/api/enums/v1" "go.temporal.io/api/serviceerror" @@ -118,7 +119,7 @@ func (d *WorkflowRunner) listenToSignals(ctx workflow.Context) { defer func() { d.signalHandler.processingSignals-- }() var summary *deploymentspb.WorkerDeploymentVersionSummary c.Receive(ctx, &summary) - d.syncVersionSummaryFromVersionWorkflow(summary) + d.syncVersionSummaryFromVersionWorkflow(ctx, summary) d.setStateChanged() }) d.signalHandler.signalSelector.AddReceive(propagationCompleteChannel, func(c workflow.ReceiveChannel, more bool) { @@ -138,7 +139,7 @@ func (d *WorkflowRunner) listenToSignals(ctx workflow.Context) { // syncVersionSummary ensures the version summary in the deployment workflow stays consistent // with the version workflow. This helps prevent discrepancies if they ever fall out of sync. -func (d *WorkflowRunner) syncVersionSummaryFromVersionWorkflow(summary *deploymentspb.WorkerDeploymentVersionSummary) { +func (d *WorkflowRunner) syncVersionSummaryFromVersionWorkflow(ctx workflow.Context, summary *deploymentspb.WorkerDeploymentVersionSummary) { existing, ok := d.State.Versions[summary.GetVersion()] if !ok { d.logger.Error("received summary for a non-existing version, ignoring it", "version", summary.GetVersion()) @@ -148,6 +149,11 @@ func (d *WorkflowRunner) syncVersionSummaryFromVersionWorkflow(summary *deployme // Preserve create_request_id since the version workflow doesn't know about it. summary.CreateRequestId = existing.GetCreateRequestId() d.State.Versions[summary.GetVersion()] = summary + if workflow.GetVersion(ctx, "update-memo-with-summary", workflow.DefaultVersion, 0) != workflow.DefaultVersion { + if err := d.updateMemo(ctx); err != nil { + d.logger.Error("failed to update memo", "error", err) + } + } } // handlePropagationComplete handles the propagation complete signal from version workflows @@ -555,13 +561,14 @@ func (d *WorkflowRunner) handleCreateWorkerDeploymentVersion(ctx workflow.Contex // Create or update the Worker Controller Instance for this version. computeConfig := args.GetComputeConfig() + var computeConfigSummary *computepb.ComputeConfigSummary if computeConfig != nil { updateCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) err = workflow.ExecuteActivity(updateCtx, d.a.UpdateWorkerControllerInstanceFromDeployment, &deploymentspb.UpdateWorkerControllerInstanceInput{ Version: worker_versioning.ExternalWorkerDeploymentVersionFromVersion(versionObj), Identity: args.GetIdentity(), UpsertScalingGroups: scalingGroupsToUpsertUpdates(computeConfig.GetScalingGroups()), - }).Get(ctx, nil) + }).Get(ctx, &computeConfigSummary) if err != nil { var appErr *temporal.ApplicationError if errors.As(err, &appErr) && appErr.Type() == errInvalidComputeConfig { @@ -578,6 +585,7 @@ func (d *WorkflowRunner) handleCreateWorkerDeploymentVersion(ctx workflow.Contex BuildId: versionObj.BuildId, RequestId: args.GetRequestId(), Identity: args.GetIdentity(), + ComputeConfig: computeConfigSummary, }).Get(ctx, nil) if err != nil { if computeConfig != nil { @@ -599,6 +607,7 @@ func (d *WorkflowRunner) handleCreateWorkerDeploymentVersion(ctx workflow.Contex CreateTime: timestamppb.New(workflow.Now(ctx)), Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CREATED, CreateRequestId: args.GetRequestId(), + ComputeConfig: computeConfigSummary, } d.metrics.Counter(metrics.WorkerDeploymentVersionCreated.Name()).Inc(1) @@ -1743,5 +1752,6 @@ func (d *WorkflowRunner) getWorkerDeploymentInfoVersionSummary(versionSummary *d FirstActivationTime: versionSummary.GetFirstActivationTime(), LastCurrentTime: versionSummary.GetLastCurrentTime(), LastDeactivationTime: versionSummary.GetLastDeactivationTime(), + ComputeConfig: versionSummary.GetComputeConfig(), } } diff --git a/service/worker/workerdeployment/workflow_test.go b/service/worker/workerdeployment/workflow_test.go index 1e81bdb198..2d7ee6a0dd 100644 --- a/service/worker/workerdeployment/workflow_test.go +++ b/service/worker/workerdeployment/workflow_test.go @@ -1434,7 +1434,7 @@ func (s *WorkerDeploymentSuite) Test_CreateWorkerDeploymentVersion_WithComputeCo s.env.RegisterActivity(a.UpdateWorkerControllerInstanceFromDeployment) updateCalled := false - s.env.OnActivity(a.UpdateWorkerControllerInstanceFromDeployment, mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) { + s.env.OnActivity(a.UpdateWorkerControllerInstanceFromDeployment, mock.Anything, mock.Anything).Return((*computepb.ComputeConfigSummary)(nil), nil).Run(func(args mock.Arguments) { updateCalled = true }).Once() @@ -1539,6 +1539,7 @@ func (s *WorkerDeploymentSuite) Test_CreateWorkerDeploymentVersion_UpdateWorkerC var a *Activities s.env.RegisterActivity(a.UpdateWorkerControllerInstanceFromDeployment) s.env.OnActivity(a.UpdateWorkerControllerInstanceFromDeployment, mock.Anything, mock.Anything).Return( + (*computepb.ComputeConfigSummary)(nil), temporal.NewNonRetryableApplicationError("controller update failed", errInvalidComputeConfig, nil), ).Once() diff --git a/tests/worker_deployment_version_test.go b/tests/worker_deployment_version_test.go index 723d7e7e19..25b0bcca71 100644 --- a/tests/worker_deployment_version_test.go +++ b/tests/worker_deployment_version_test.go @@ -1326,6 +1326,63 @@ func (s *DeploymentVersionSuite) TestUpdateComputeConfig_Success() { }, }, info.GetComputeConfig())) }, 10*time.Second, 500*time.Millisecond) + + // Verify the compute config summary is reflected in DescribeWorkerDeployment version summaries. + s.EventuallyWithT(func(t *assert.CollectT) { + a := require.New(t) + descDeployResp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv.DeploymentSeries(), + }) + a.NoError(err) + var versionSummary *deploymentpb.WorkerDeploymentInfo_WorkerDeploymentVersionSummary + for _, vs := range descDeployResp.GetWorkerDeploymentInfo().GetVersionSummaries() { + if vs.GetVersion() == tv.DeploymentVersionString() { //nolint:staticcheck // SA1019: worker versioning v0.31 + versionSummary = vs + break + } + } + a.NotNil(versionSummary, "version %s not found in DescribeWorkerDeployment", tv.DeploymentVersionString()) + a.True(proto.Equal(&computepb.ComputeConfigSummary{ + ScalingGroups: map[string]*computepb.ComputeConfigScalingGroupSummary{ + "sg1": { + ProviderType: validProvider.GetType(), + }, + "sg2": { + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_ACTIVITY}, + ProviderType: validProvider.GetType(), + }, + }, + }, versionSummary.GetComputeConfig())) + }, 10*time.Second, 500*time.Millisecond) + + // Verify the compute config summary is reflected in ListWorkerDeployments latest version summary. + s.EventuallyWithT(func(t *assert.CollectT) { + a := require.New(t) + listResp, err := s.FrontendClient().ListWorkerDeployments(ctx, &workflowservice.ListWorkerDeploymentsRequest{ + Namespace: s.Namespace().String(), + }) + a.NoError(err) + var found *workflowservice.ListWorkerDeploymentsResponse_WorkerDeploymentSummary + for _, d := range listResp.GetWorkerDeployments() { + if d.GetName() == tv.DeploymentSeries() { + found = d + break + } + } + a.NotNil(found, "deployment %s not found in ListWorkerDeployments", tv.DeploymentSeries()) + a.True(proto.Equal(&computepb.ComputeConfigSummary{ + ScalingGroups: map[string]*computepb.ComputeConfigScalingGroupSummary{ + "sg1": { + ProviderType: validProvider.GetType(), + }, + "sg2": { + TaskQueueTypes: []enumspb.TaskQueueType{enumspb.TASK_QUEUE_TYPE_ACTIVITY}, + ProviderType: validProvider.GetType(), + }, + }, + }, found.GetLatestVersionSummary().GetComputeConfig())) + }, 60*time.Second, 500*time.Millisecond) } func (s *DeploymentVersionSuite) TestUpdateComputeConfig_UpdateExistingGroup() { @@ -1481,6 +1538,31 @@ func (s *DeploymentVersionSuite) TestUpdateComputeConfig_InvalidProvider() { var invalidArg *serviceerror.InvalidArgument s.ErrorAs(err, &invalidArg) s.Contains(invalidArg.Message, "invalid compute provider type") + + // Verify compute config summary is unchanged — the failed update should not have added sg2. + s.EventuallyWithT(func(t *assert.CollectT) { + a := require.New(t) + descDeployResp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ + Namespace: s.Namespace().String(), + DeploymentName: tv.DeploymentSeries(), + }) + a.NoError(err) + var versionSummary *deploymentpb.WorkerDeploymentInfo_WorkerDeploymentVersionSummary + for _, vs := range descDeployResp.GetWorkerDeploymentInfo().GetVersionSummaries() { + if vs.GetVersion() == tv.DeploymentVersionString() { //nolint:staticcheck // SA1019: worker versioning v0.31 + versionSummary = vs + break + } + } + a.NotNil(versionSummary, "version %s not found in deployment summaries", tv.DeploymentVersionString()) + a.True(proto.Equal(&computepb.ComputeConfigSummary{ + ScalingGroups: map[string]*computepb.ComputeConfigScalingGroupSummary{ + "sg1": { + ProviderType: computeprovider.TestInvokeComputeProviderValidComputeProvider().GetType(), + }, + }, + }, versionSummary.GetComputeConfig())) + }, 10*time.Second, 500*time.Millisecond) } func (s *DeploymentVersionSuite) TestUpdateComputeConfig_DeletedVersion() { @@ -3867,7 +3949,7 @@ func (s *DeploymentVersionSuite) TestCreateWorkerDeploymentVersion_Success() { a.Equal(identity, descResp.GetWorkerDeploymentVersionInfo().GetLastModifierIdentity()) }, 10*time.Second, 500*time.Millisecond) - // Verify the version shows up in deployment's version summaries with CREATED status + // Verify the version shows up in deployment's version summaries with CREATED status and correct compute config summary. s.EventuallyWithT(func(t *assert.CollectT) { a := require.New(t) descDeployResp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ @@ -3876,8 +3958,40 @@ func (s *DeploymentVersionSuite) TestCreateWorkerDeploymentVersion_Success() { }) a.NoError(err) a.Len(descDeployResp.GetWorkerDeploymentInfo().GetVersionSummaries(), 1) - a.Equal(tv.DeploymentVersionStringV32(), worker_versioning.ExternalWorkerDeploymentVersionToString(descDeployResp.GetWorkerDeploymentInfo().GetVersionSummaries()[0].GetDeploymentVersion())) - a.Equal(enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CREATED, descDeployResp.GetWorkerDeploymentInfo().GetVersionSummaries()[0].GetStatus()) + versionSummary := descDeployResp.GetWorkerDeploymentInfo().GetVersionSummaries()[0] + a.Equal(tv.DeploymentVersionStringV32(), worker_versioning.ExternalWorkerDeploymentVersionToString(versionSummary.GetDeploymentVersion())) + a.Equal(enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_CREATED, versionSummary.GetStatus()) + a.True(proto.Equal(&computepb.ComputeConfigSummary{ + ScalingGroups: map[string]*computepb.ComputeConfigScalingGroupSummary{ + "sg1": { + ProviderType: computeConfig.GetScalingGroups()["sg1"].GetProvider().GetType(), + }, + }, + }, versionSummary.GetComputeConfig())) + }, 10*time.Second, 500*time.Millisecond) + + // Verify the compute config summary is reflected in ListWorkerDeployments latest version summary. + s.EventuallyWithT(func(t *assert.CollectT) { + a := require.New(t) + listResp, err := s.FrontendClient().ListWorkerDeployments(ctx, &workflowservice.ListWorkerDeploymentsRequest{ + Namespace: s.Namespace().String(), + }) + a.NoError(err) + var found *workflowservice.ListWorkerDeploymentsResponse_WorkerDeploymentSummary + for _, d := range listResp.GetWorkerDeployments() { + if d.GetName() == deploymentName { + found = d + break + } + } + a.NotNil(found, "deployment %s not found in ListWorkerDeployments", deploymentName) + a.True(proto.Equal(&computepb.ComputeConfigSummary{ + ScalingGroups: map[string]*computepb.ComputeConfigScalingGroupSummary{ + "sg1": { + ProviderType: computeConfig.GetScalingGroups()["sg1"].GetProvider().GetType(), + }, + }, + }, found.GetLatestVersionSummary().GetComputeConfig())) }, 10*time.Second, 500*time.Millisecond) }