Pass deployment state and version state in forceCAN signals (#9100)

## What changed?
- WISOTT

## Why?
- Operational readiness. There could be a world where we want to "reset"
a user's workflow state given that these workflows CAN so frequently.

## How did you test it?
- [ ] built
- [ ] run locally and tested manually
- [ ] covered by existing tests
- [ ] added new unit test(s)
- [x] added new functional test(s)

## Potential risks
- None

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Introduces optional state override when force-continuing-as-new.
> 
> - New proto messages `ForceCANDeploymentSignalArgs` and
`ForceCANVersionSignalArgs` with `override_state` fields; generated
helper/pb code updated
> - Deployment and Version workflows now receive `forceCAN` signals with
args and, if provided, apply `override_state` before continue-as-new
> - Added tests verifying override is honored (e.g., manager identity
and metadata) after continue-as-new
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1fd847da1c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
This commit is contained in:
Shivam
2026-01-28 17:23:54 -05:00
committed by GitHub
parent d3ee134eee
commit 6143b6a4af
7 changed files with 460 additions and 110 deletions

View File

@@ -1743,3 +1743,77 @@ func (this *WorkerDeploymentSummary) Equal(that interface{}) bool {
return proto.Equal(this, that1)
}
// Marshal an object of type ForceCANDeploymentSignalArgs to the protobuf v3 wire format
func (val *ForceCANDeploymentSignalArgs) Marshal() ([]byte, error) {
return proto.Marshal(val)
}
// Unmarshal an object of type ForceCANDeploymentSignalArgs from the protobuf v3 wire format
func (val *ForceCANDeploymentSignalArgs) Unmarshal(buf []byte) error {
return proto.Unmarshal(buf, val)
}
// Size returns the size of the object, in bytes, once serialized
func (val *ForceCANDeploymentSignalArgs) Size() int {
return proto.Size(val)
}
// Equal returns whether two ForceCANDeploymentSignalArgs values are equivalent by recursively
// comparing the message's fields.
// For more information see the documentation for
// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal
func (this *ForceCANDeploymentSignalArgs) Equal(that interface{}) bool {
if that == nil {
return this == nil
}
var that1 *ForceCANDeploymentSignalArgs
switch t := that.(type) {
case *ForceCANDeploymentSignalArgs:
that1 = t
case ForceCANDeploymentSignalArgs:
that1 = &t
default:
return false
}
return proto.Equal(this, that1)
}
// Marshal an object of type ForceCANVersionSignalArgs to the protobuf v3 wire format
func (val *ForceCANVersionSignalArgs) Marshal() ([]byte, error) {
return proto.Marshal(val)
}
// Unmarshal an object of type ForceCANVersionSignalArgs from the protobuf v3 wire format
func (val *ForceCANVersionSignalArgs) Unmarshal(buf []byte) error {
return proto.Unmarshal(buf, val)
}
// Size returns the size of the object, in bytes, once serialized
func (val *ForceCANVersionSignalArgs) Size() int {
return proto.Size(val)
}
// Equal returns whether two ForceCANVersionSignalArgs values are equivalent by recursively
// comparing the message's fields.
// For more information see the documentation for
// https://pkg.go.dev/google.golang.org/protobuf/proto#Equal
func (this *ForceCANVersionSignalArgs) Equal(that interface{}) bool {
if that == nil {
return this == nil
}
var that1 *ForceCANVersionSignalArgs
switch t := that.(type) {
case *ForceCANVersionSignalArgs:
that1 = t
case ForceCANVersionSignalArgs:
that1 = &t
default:
return false
}
return proto.Equal(this, that1)
}

View File

@@ -3169,6 +3169,100 @@ func (x *WorkerDeploymentSummary) GetRampingVersionSummary() *v11.WorkerDeployme
return nil
}
// Signal input for force-continue-as-new on Deployment workflow
type ForceCANDeploymentSignalArgs struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If provided, this state will be used instead of the current state
// when performing continue-as-new.
OverrideState *WorkerDeploymentLocalState `protobuf:"bytes,1,opt,name=override_state,json=overrideState,proto3" json:"override_state,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ForceCANDeploymentSignalArgs) Reset() {
*x = ForceCANDeploymentSignalArgs{}
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ForceCANDeploymentSignalArgs) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ForceCANDeploymentSignalArgs) ProtoMessage() {}
func (x *ForceCANDeploymentSignalArgs) ProtoReflect() protoreflect.Message {
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[47]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ForceCANDeploymentSignalArgs.ProtoReflect.Descriptor instead.
func (*ForceCANDeploymentSignalArgs) Descriptor() ([]byte, []int) {
return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{47}
}
func (x *ForceCANDeploymentSignalArgs) GetOverrideState() *WorkerDeploymentLocalState {
if x != nil {
return x.OverrideState
}
return nil
}
// Signal input for force-continue-as-new on Version workflow
type ForceCANVersionSignalArgs struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If provided, this state will be used instead of the current state
// when performing continue-as-new.
OverrideState *VersionLocalState `protobuf:"bytes,1,opt,name=override_state,json=overrideState,proto3" json:"override_state,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ForceCANVersionSignalArgs) Reset() {
*x = ForceCANVersionSignalArgs{}
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ForceCANVersionSignalArgs) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ForceCANVersionSignalArgs) ProtoMessage() {}
func (x *ForceCANVersionSignalArgs) ProtoReflect() protoreflect.Message {
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ForceCANVersionSignalArgs.ProtoReflect.Descriptor instead.
func (*ForceCANVersionSignalArgs) Descriptor() ([]byte, []int) {
return file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP(), []int{48}
}
func (x *ForceCANVersionSignalArgs) GetOverrideState() *VersionLocalState {
if x != nil {
return x.OverrideState
}
return nil
}
type VersionLocalState_TaskQueueFamilyData struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Key: Task Queue Type
@@ -3179,7 +3273,7 @@ type VersionLocalState_TaskQueueFamilyData struct {
func (x *VersionLocalState_TaskQueueFamilyData) Reset() {
*x = VersionLocalState_TaskQueueFamilyData{}
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48]
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3191,7 +3285,7 @@ func (x *VersionLocalState_TaskQueueFamilyData) String() string {
func (*VersionLocalState_TaskQueueFamilyData) ProtoMessage() {}
func (x *VersionLocalState_TaskQueueFamilyData) ProtoReflect() protoreflect.Message {
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[48]
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[50]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3225,7 +3319,7 @@ type SyncDeploymentVersionUserDataRequest_SyncUserData struct {
func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) Reset() {
*x = SyncDeploymentVersionUserDataRequest_SyncUserData{}
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52]
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[54]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3237,7 +3331,7 @@ func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) String() string {
func (*SyncDeploymentVersionUserDataRequest_SyncUserData) ProtoMessage() {}
func (x *SyncDeploymentVersionUserDataRequest_SyncUserData) ProtoReflect() protoreflect.Message {
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[52]
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[54]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3283,7 +3377,7 @@ type CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes struct {
func (x *CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) Reset() {
*x = CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes{}
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[58]
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[60]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3295,7 +3389,7 @@ func (x *CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) String() string
func (*CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) ProtoMessage() {}
func (x *CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes) ProtoReflect() protoreflect.Message {
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[58]
mi := &file_temporal_server_api_deployment_v1_message_proto_msgTypes[60]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3580,7 +3674,11 @@ const file_temporal_server_api_deployment_v1_message_proto_rawDesc = "" +
"\x0erouting_config\x18\x03 \x01(\v2).temporal.api.deployment.v1.RoutingConfigR\rroutingConfig\x12\x85\x01\n" +
"\x16latest_version_summary\x18\x04 \x01(\v2O.temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummaryR\x14latestVersionSummary\x12\x87\x01\n" +
"\x17current_version_summary\x18\x05 \x01(\v2O.temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummaryR\x15currentVersionSummary\x12\x87\x01\n" +
"\x17ramping_version_summary\x18\x06 \x01(\v2O.temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummaryR\x15rampingVersionSummaryB4Z2go.temporal.io/server/api/deployment/v1;deploymentb\x06proto3"
"\x17ramping_version_summary\x18\x06 \x01(\v2O.temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummaryR\x15rampingVersionSummary\"\x84\x01\n" +
"\x1cForceCANDeploymentSignalArgs\x12d\n" +
"\x0eoverride_state\x18\x01 \x01(\v2=.temporal.server.api.deployment.v1.WorkerDeploymentLocalStateR\roverrideState\"x\n" +
"\x19ForceCANVersionSignalArgs\x12[\n" +
"\x0eoverride_state\x18\x01 \x01(\v24.temporal.server.api.deployment.v1.VersionLocalStateR\roverrideStateB4Z2go.temporal.io/server/api/deployment/v1;deploymentb\x06proto3"
var (
file_temporal_server_api_deployment_v1_message_proto_rawDescOnce sync.Once
@@ -3594,7 +3692,7 @@ func file_temporal_server_api_deployment_v1_message_proto_rawDescGZIP() []byte {
return file_temporal_server_api_deployment_v1_message_proto_rawDescData
}
var file_temporal_server_api_deployment_v1_message_proto_msgTypes = make([]protoimpl.MessageInfo, 59)
var file_temporal_server_api_deployment_v1_message_proto_msgTypes = make([]protoimpl.MessageInfo, 61)
var file_temporal_server_api_deployment_v1_message_proto_goTypes = []any{
(*WorkerDeploymentVersion)(nil), // 0: temporal.server.api.deployment.v1.WorkerDeploymentVersion
(*DeploymentVersionData)(nil), // 1: temporal.server.api.deployment.v1.DeploymentVersionData
@@ -3643,121 +3741,125 @@ var file_temporal_server_api_deployment_v1_message_proto_goTypes = []any{
(*IsVersionMissingTaskQueuesResult)(nil), // 44: temporal.server.api.deployment.v1.IsVersionMissingTaskQueuesResult
(*WorkerDeploymentWorkflowMemo)(nil), // 45: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo
(*WorkerDeploymentSummary)(nil), // 46: temporal.server.api.deployment.v1.WorkerDeploymentSummary
nil, // 47: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry
(*VersionLocalState_TaskQueueFamilyData)(nil), // 48: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData
nil, // 49: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry
nil, // 50: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry
nil, // 51: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry
(*SyncDeploymentVersionUserDataRequest_SyncUserData)(nil), // 52: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData
nil, // 53: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry
nil, // 54: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry
nil, // 55: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry
nil, // 56: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry
nil, // 57: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry
(*CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes)(nil), // 58: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes
(*timestamppb.Timestamp)(nil), // 59: google.protobuf.Timestamp
(v1.WorkerDeploymentVersionStatus)(0), // 60: temporal.api.enums.v1.WorkerDeploymentVersionStatus
(*v11.VersionDrainageInfo)(nil), // 61: temporal.api.deployment.v1.VersionDrainageInfo
(*v11.VersionMetadata)(nil), // 62: temporal.api.deployment.v1.VersionMetadata
(*v11.RoutingConfig)(nil), // 63: temporal.api.deployment.v1.RoutingConfig
(v1.VersionDrainageStatus)(0), // 64: temporal.api.enums.v1.VersionDrainageStatus
(v1.TaskQueueType)(0), // 65: temporal.api.enums.v1.TaskQueueType
(*v11.WorkerDeploymentVersionInfo_VersionTaskQueueInfo)(nil), // 66: temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo
(*v11.WorkerDeploymentInfo_WorkerDeploymentVersionSummary)(nil), // 67: temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
(*v12.Payload)(nil), // 68: temporal.api.common.v1.Payload
(*ForceCANDeploymentSignalArgs)(nil), // 47: temporal.server.api.deployment.v1.ForceCANDeploymentSignalArgs
(*ForceCANVersionSignalArgs)(nil), // 48: temporal.server.api.deployment.v1.ForceCANVersionSignalArgs
nil, // 49: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry
(*VersionLocalState_TaskQueueFamilyData)(nil), // 50: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData
nil, // 51: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry
nil, // 52: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry
nil, // 53: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry
(*SyncDeploymentVersionUserDataRequest_SyncUserData)(nil), // 54: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData
nil, // 55: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry
nil, // 56: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry
nil, // 57: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry
nil, // 58: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry
nil, // 59: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry
(*CheckTaskQueuesHavePollersActivityArgs_TaskQueueTypes)(nil), // 60: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes
(*timestamppb.Timestamp)(nil), // 61: google.protobuf.Timestamp
(v1.WorkerDeploymentVersionStatus)(0), // 62: temporal.api.enums.v1.WorkerDeploymentVersionStatus
(*v11.VersionDrainageInfo)(nil), // 63: temporal.api.deployment.v1.VersionDrainageInfo
(*v11.VersionMetadata)(nil), // 64: temporal.api.deployment.v1.VersionMetadata
(*v11.RoutingConfig)(nil), // 65: temporal.api.deployment.v1.RoutingConfig
(v1.VersionDrainageStatus)(0), // 66: temporal.api.enums.v1.VersionDrainageStatus
(v1.TaskQueueType)(0), // 67: temporal.api.enums.v1.TaskQueueType
(*v11.WorkerDeploymentVersionInfo_VersionTaskQueueInfo)(nil), // 68: temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo
(*v11.WorkerDeploymentInfo_WorkerDeploymentVersionSummary)(nil), // 69: temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
(*v12.Payload)(nil), // 70: temporal.api.common.v1.Payload
}
var file_temporal_server_api_deployment_v1_message_proto_depIdxs = []int32{
0, // 0: temporal.server.api.deployment.v1.DeploymentVersionData.version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion
59, // 1: temporal.server.api.deployment.v1.DeploymentVersionData.routing_update_time:type_name -> google.protobuf.Timestamp
59, // 2: temporal.server.api.deployment.v1.DeploymentVersionData.current_since_time:type_name -> google.protobuf.Timestamp
59, // 3: temporal.server.api.deployment.v1.DeploymentVersionData.ramping_since_time:type_name -> google.protobuf.Timestamp
60, // 4: temporal.server.api.deployment.v1.DeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus
59, // 5: temporal.server.api.deployment.v1.WorkerDeploymentVersionData.update_time:type_name -> google.protobuf.Timestamp
60, // 6: temporal.server.api.deployment.v1.WorkerDeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus
61, // 1: temporal.server.api.deployment.v1.DeploymentVersionData.routing_update_time:type_name -> google.protobuf.Timestamp
61, // 2: temporal.server.api.deployment.v1.DeploymentVersionData.current_since_time:type_name -> google.protobuf.Timestamp
61, // 3: temporal.server.api.deployment.v1.DeploymentVersionData.ramping_since_time:type_name -> google.protobuf.Timestamp
62, // 4: temporal.server.api.deployment.v1.DeploymentVersionData.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus
61, // 5: temporal.server.api.deployment.v1.WorkerDeploymentVersionData.update_time:type_name -> google.protobuf.Timestamp
62, // 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
59, // 8: temporal.server.api.deployment.v1.VersionLocalState.create_time:type_name -> google.protobuf.Timestamp
59, // 9: temporal.server.api.deployment.v1.VersionLocalState.routing_update_time:type_name -> google.protobuf.Timestamp
59, // 10: temporal.server.api.deployment.v1.VersionLocalState.current_since_time:type_name -> google.protobuf.Timestamp
59, // 11: temporal.server.api.deployment.v1.VersionLocalState.ramping_since_time:type_name -> google.protobuf.Timestamp
59, // 12: temporal.server.api.deployment.v1.VersionLocalState.first_activation_time:type_name -> google.protobuf.Timestamp
59, // 13: temporal.server.api.deployment.v1.VersionLocalState.last_current_time:type_name -> google.protobuf.Timestamp
59, // 14: temporal.server.api.deployment.v1.VersionLocalState.last_deactivation_time:type_name -> google.protobuf.Timestamp
61, // 15: temporal.server.api.deployment.v1.VersionLocalState.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo
62, // 16: temporal.server.api.deployment.v1.VersionLocalState.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata
47, // 17: temporal.server.api.deployment.v1.VersionLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry
60, // 18: temporal.server.api.deployment.v1.VersionLocalState.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus
61, // 8: temporal.server.api.deployment.v1.VersionLocalState.create_time:type_name -> google.protobuf.Timestamp
61, // 9: temporal.server.api.deployment.v1.VersionLocalState.routing_update_time:type_name -> google.protobuf.Timestamp
61, // 10: temporal.server.api.deployment.v1.VersionLocalState.current_since_time:type_name -> google.protobuf.Timestamp
61, // 11: temporal.server.api.deployment.v1.VersionLocalState.ramping_since_time:type_name -> google.protobuf.Timestamp
61, // 12: temporal.server.api.deployment.v1.VersionLocalState.first_activation_time:type_name -> google.protobuf.Timestamp
61, // 13: temporal.server.api.deployment.v1.VersionLocalState.last_current_time:type_name -> google.protobuf.Timestamp
61, // 14: temporal.server.api.deployment.v1.VersionLocalState.last_deactivation_time:type_name -> google.protobuf.Timestamp
63, // 15: temporal.server.api.deployment.v1.VersionLocalState.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo
64, // 16: temporal.server.api.deployment.v1.VersionLocalState.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata
49, // 17: temporal.server.api.deployment.v1.VersionLocalState.task_queue_families:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry
62, // 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
59, // 21: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp
63, // 22: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
50, // 23: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.versions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry
51, // 24: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.propagating_revisions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry
59, // 25: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.create_time:type_name -> google.protobuf.Timestamp
64, // 26: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus
61, // 27: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo
59, // 28: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.routing_update_time:type_name -> google.protobuf.Timestamp
59, // 29: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.current_since_time:type_name -> google.protobuf.Timestamp
59, // 30: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.ramping_since_time:type_name -> google.protobuf.Timestamp
59, // 31: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.first_activation_time:type_name -> google.protobuf.Timestamp
59, // 32: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_current_time:type_name -> google.protobuf.Timestamp
59, // 33: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_deactivation_time:type_name -> google.protobuf.Timestamp
60, // 34: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus
65, // 35: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType
63, // 36: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
65, // 37: temporal.server.api.deployment.v1.RegisterWorkerInWorkerDeploymentArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType
61, // 21: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.create_time:type_name -> google.protobuf.Timestamp
65, // 22: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
52, // 23: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.versions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry
53, // 24: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.propagating_revisions:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry
61, // 25: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.create_time:type_name -> google.protobuf.Timestamp
66, // 26: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus
63, // 27: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo
61, // 28: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.routing_update_time:type_name -> google.protobuf.Timestamp
61, // 29: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.current_since_time:type_name -> google.protobuf.Timestamp
61, // 30: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.ramping_since_time:type_name -> google.protobuf.Timestamp
61, // 31: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.first_activation_time:type_name -> google.protobuf.Timestamp
61, // 32: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_current_time:type_name -> google.protobuf.Timestamp
61, // 33: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.last_deactivation_time:type_name -> google.protobuf.Timestamp
62, // 34: temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary.status:type_name -> temporal.api.enums.v1.WorkerDeploymentVersionStatus
67, // 35: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.task_queue_type:type_name -> temporal.api.enums.v1.TaskQueueType
65, // 36: temporal.server.api.deployment.v1.RegisterWorkerInVersionArgs.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
67, // 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
66, // 39: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityResult.task_queue_infos:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo
59, // 40: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_update_time:type_name -> google.protobuf.Timestamp
59, // 41: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.current_since_time:type_name -> google.protobuf.Timestamp
59, // 42: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.ramping_since_time:type_name -> google.protobuf.Timestamp
63, // 43: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
68, // 39: temporal.server.api.deployment.v1.DescribeVersionFromWorkerDeploymentActivityResult.task_queue_infos:type_name -> temporal.api.deployment.v1.WorkerDeploymentVersionInfo.VersionTaskQueueInfo
61, // 40: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.routing_update_time:type_name -> google.protobuf.Timestamp
61, // 41: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.current_since_time:type_name -> google.protobuf.Timestamp
61, // 42: temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs.ramping_since_time:type_name -> google.protobuf.Timestamp
65, // 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
59, // 46: temporal.server.api.deployment.v1.AddVersionUpdateArgs.create_time:type_name -> google.protobuf.Timestamp
61, // 47: temporal.server.api.deployment.v1.SyncDrainageInfoSignalArgs.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo
64, // 48: temporal.server.api.deployment.v1.SyncDrainageStatusSignalArgs.drainage_status:type_name -> temporal.api.enums.v1.VersionDrainageStatus
61, // 46: temporal.server.api.deployment.v1.AddVersionUpdateArgs.create_time:type_name -> google.protobuf.Timestamp
63, // 47: temporal.server.api.deployment.v1.SyncDrainageInfoSignalArgs.drainage_info:type_name -> temporal.api.deployment.v1.VersionDrainageInfo
66, // 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
52, // 52: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData
63, // 53: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.update_routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
54, // 52: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.sync:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData
65, // 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
53, // 55: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry
54, // 56: temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.CheckWorkerDeploymentUserDataPropagationRequest.TaskQueueMaxVersionsEntry
55, // 55: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataResponse.TaskQueueMaxVersionsEntry
56, // 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
55, // 58: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry
56, // 59: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.upsert_entries:type_name -> temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry
62, // 60: temporal.server.api.deployment.v1.UpdateVersionMetadataResponse.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata
57, // 61: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.task_queues_and_types:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry
57, // 58: temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.task_queue_max_versions:type_name -> temporal.server.api.deployment.v1.SyncUnversionedRampActivityResponse.TaskQueueMaxVersionsEntry
58, // 59: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.upsert_entries:type_name -> temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry
64, // 60: temporal.server.api.deployment.v1.UpdateVersionMetadataResponse.metadata:type_name -> temporal.api.deployment.v1.VersionMetadata
59, // 61: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.task_queues_and_types:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry
0, // 62: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.worker_deployment_version:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersion
14, // 63: temporal.server.api.deployment.v1.SyncVersionStateActivityArgs.update_args:type_name -> temporal.server.api.deployment.v1.SyncVersionStateUpdateArgs
3, // 64: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.version_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState
9, // 65: temporal.server.api.deployment.v1.SyncVersionStateActivityResult.summary:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary
59, // 66: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp
63, // 67: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
67, // 68: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
67, // 69: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
67, // 70: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
59, // 71: temporal.server.api.deployment.v1.WorkerDeploymentSummary.create_time:type_name -> google.protobuf.Timestamp
63, // 72: temporal.server.api.deployment.v1.WorkerDeploymentSummary.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
67, // 73: temporal.server.api.deployment.v1.WorkerDeploymentSummary.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
67, // 74: temporal.server.api.deployment.v1.WorkerDeploymentSummary.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
67, // 75: temporal.server.api.deployment.v1.WorkerDeploymentSummary.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
48, // 76: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData
49, // 77: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry
4, // 78: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueVersionData
9, // 79: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry.value:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary
8, // 80: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry.value:type_name -> temporal.server.api.deployment.v1.PropagatingRevisions
65, // 81: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.types:type_name -> temporal.api.enums.v1.TaskQueueType
1, // 82: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData
68, // 83: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry.value:type_name -> temporal.api.common.v1.Payload
58, // 84: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry.value:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes
65, // 85: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes.types:type_name -> temporal.api.enums.v1.TaskQueueType
86, // [86:86] is the sub-list for method output_type
86, // [86:86] is the sub-list for method input_type
86, // [86:86] is the sub-list for extension type_name
86, // [86:86] is the sub-list for extension extendee
0, // [0:86] is the sub-list for field type_name
61, // 66: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.create_time:type_name -> google.protobuf.Timestamp
65, // 67: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
69, // 68: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
69, // 69: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
69, // 70: temporal.server.api.deployment.v1.WorkerDeploymentWorkflowMemo.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
61, // 71: temporal.server.api.deployment.v1.WorkerDeploymentSummary.create_time:type_name -> google.protobuf.Timestamp
65, // 72: temporal.server.api.deployment.v1.WorkerDeploymentSummary.routing_config:type_name -> temporal.api.deployment.v1.RoutingConfig
69, // 73: temporal.server.api.deployment.v1.WorkerDeploymentSummary.latest_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
69, // 74: temporal.server.api.deployment.v1.WorkerDeploymentSummary.current_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
69, // 75: temporal.server.api.deployment.v1.WorkerDeploymentSummary.ramping_version_summary:type_name -> temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary
7, // 76: temporal.server.api.deployment.v1.ForceCANDeploymentSignalArgs.override_state:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentLocalState
3, // 77: temporal.server.api.deployment.v1.ForceCANVersionSignalArgs.override_state:type_name -> temporal.server.api.deployment.v1.VersionLocalState
50, // 78: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntry.value:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData
51, // 79: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.task_queues:type_name -> temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry
4, // 80: temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamilyData.TaskQueuesEntry.value:type_name -> temporal.server.api.deployment.v1.TaskQueueVersionData
9, // 81: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.VersionsEntry.value:type_name -> temporal.server.api.deployment.v1.WorkerDeploymentVersionSummary
8, // 82: temporal.server.api.deployment.v1.WorkerDeploymentLocalState.PropagatingRevisionsEntry.value:type_name -> temporal.server.api.deployment.v1.PropagatingRevisions
67, // 83: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.types:type_name -> temporal.api.enums.v1.TaskQueueType
1, // 84: temporal.server.api.deployment.v1.SyncDeploymentVersionUserDataRequest.SyncUserData.data:type_name -> temporal.server.api.deployment.v1.DeploymentVersionData
70, // 85: temporal.server.api.deployment.v1.UpdateVersionMetadataArgs.UpsertEntriesEntry.value:type_name -> temporal.api.common.v1.Payload
60, // 86: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueuesAndTypesEntry.value:type_name -> temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes
67, // 87: temporal.server.api.deployment.v1.CheckTaskQueuesHavePollersActivityArgs.TaskQueueTypes.types:type_name -> temporal.api.enums.v1.TaskQueueType
88, // [88:88] is the sub-list for method output_type
88, // [88:88] is the sub-list for method input_type
88, // [88:88] is the sub-list for extension type_name
88, // [88:88] is the sub-list for extension extendee
0, // [0:88] is the sub-list for field type_name
}
func init() { file_temporal_server_api_deployment_v1_message_proto_init() }
@@ -3771,7 +3873,7 @@ func file_temporal_server_api_deployment_v1_message_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_temporal_server_api_deployment_v1_message_proto_rawDesc), len(file_temporal_server_api_deployment_v1_message_proto_rawDesc)),
NumEnums: 0,
NumMessages: 59,
NumMessages: 61,
NumExtensions: 0,
NumServices: 0,
},

View File

@@ -504,3 +504,17 @@ message WorkerDeploymentSummary {
temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary current_version_summary = 5;
temporal.api.deployment.v1.WorkerDeploymentInfo.WorkerDeploymentVersionSummary ramping_version_summary = 6;
}
// Signal input for force-continue-as-new on Deployment workflow
message ForceCANDeploymentSignalArgs {
// If provided, this state will be used instead of the current state
// when performing continue-as-new.
WorkerDeploymentLocalState override_state = 1;
}
// Signal input for force-continue-as-new on Version workflow
message ForceCANVersionSignalArgs {
// If provided, this state will be used instead of the current state
// when performing continue-as-new.
VersionLocalState override_state = 1;
}

View File

@@ -47,6 +47,8 @@ type (
signalHandler *SignalHandler
drainageStatusSyncInProgress bool
forceCAN bool
// Optional override state for force-CaN
overrideState *deploymentspb.VersionLocalState
// Track if async propagations are in progress (prevents CaN)
asyncPropagationsInProgress int
// When true, all the ongoing propagations should cancel themselves
@@ -99,9 +101,15 @@ func (d *VersionWorkflowRunner) listenToSignals(ctx workflow.Context) {
d.signalHandler.signalSelector.AddReceive(forceCANSignalChannel, func(c workflow.ReceiveChannel, more bool) {
d.signalHandler.processingSignals++
defer func() { d.signalHandler.processingSignals-- }()
// Process Signal
c.Receive(ctx, nil)
var args *deploymentspb.ForceCANVersionSignalArgs
c.Receive(ctx, &args)
d.forceCAN = true
// Apply override state if provided
if args.GetOverrideState() != nil {
d.overrideState = args.GetOverrideState()
}
})
d.signalHandler.signalSelector.AddReceive(drainageStatusSignalChannel, func(c workflow.ReceiveChannel, more bool) {
d.signalHandler.processingSignals++
@@ -245,7 +253,10 @@ func (d *VersionWorkflowRunner) run(ctx workflow.Context) error {
d.logger.Debug("Version doing continue-as-new")
nextArgs := d.WorkerDeploymentVersionWorkflowArgs
nextArgs.VersionState = d.VersionState
// Apply override state if provided during force-CaN
if d.overrideState != nil {
nextArgs.VersionState = d.overrideState
}
return workflow.NewContinueAsNewError(ctx, WorkerDeploymentVersionWorkflowType, nextArgs)
}

View File

@@ -47,6 +47,8 @@ type (
stateChanged bool
signalHandler *SignalHandler
forceCAN bool
// Optional override state for force-CaN
overrideState *deploymentspb.WorkerDeploymentLocalState
// workflowVersion is set at workflow start based on the dynamic config of the worker
// that completes the first task. It remains constant for the lifetime of the run and
// only updates when the workflow performs continue-as-new.
@@ -102,8 +104,15 @@ func (d *WorkflowRunner) listenToSignals(ctx workflow.Context) {
d.signalHandler.signalSelector.AddReceive(forceCANSignalChannel, func(c workflow.ReceiveChannel, more bool) {
d.signalHandler.processingSignals++
defer func() { d.signalHandler.processingSignals-- }()
c.Receive(ctx, nil)
var args *deploymentspb.ForceCANDeploymentSignalArgs
c.Receive(ctx, &args)
d.forceCAN = true
// Apply override state if provided
if args.GetOverrideState() != nil {
d.overrideState = args.GetOverrideState()
}
})
d.signalHandler.signalSelector.AddReceive(syncVersionSummaryChannel, func(c workflow.ReceiveChannel, more bool) {
d.signalHandler.processingSignals++
@@ -379,6 +388,11 @@ func (d *WorkflowRunner) run(ctx workflow.Context) error {
// we pass the current state as input to the next workflow execution, resulting in a new
// workflow history with just two initial events. This minimizes the risk of NDE (Non-Deterministic Execution)
// errors during server rollbacks.
// Apply override state if provided during force-CaN
if d.overrideState != nil {
d.State = d.overrideState
}
return workflow.NewContinueAsNewError(ctx, WorkerDeploymentWorkflowType, d.WorkerDeploymentWorkflowArgs)
}

View File

@@ -19,6 +19,7 @@ import (
taskqueuepb "go.temporal.io/api/taskqueue/v1"
"go.temporal.io/api/workflowservice/v1"
sdkworker "go.temporal.io/sdk/worker"
deploymentspb "go.temporal.io/server/api/deployment/v1"
"go.temporal.io/server/api/matchingservice/v1"
"go.temporal.io/server/common"
"go.temporal.io/server/common/dynamicconfig"
@@ -213,6 +214,70 @@ func (s *WorkerDeploymentSuite) TestForceCAN_NoOpenWFS() {
}, time.Second*10, time.Millisecond*1000)
}
func (s *WorkerDeploymentSuite) TestForceCAN_WithOverrideState() {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
tv := testvars.New(s)
// Start a version workflow
s.startVersionWorkflow(ctx, tv)
s.ensureCreateVersionInDeployment(tv)
// Set the version as current
_, err := s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{
Namespace: s.Namespace().String(),
DeploymentName: tv.DeploymentSeries(),
Version: tv.DeploymentVersionString(),
})
s.NoError(err)
// Create a modified state with a different manager identity
overrideState := &deploymentspb.WorkerDeploymentLocalState{
CreateTime: timestamppb.New(time.Now()),
RoutingConfig: &deploymentpb.RoutingConfig{CurrentVersion: tv.DeploymentVersionString()},
Versions: map[string]*deploymentspb.WorkerDeploymentVersionSummary{tv.DeploymentVersionString(): {Version: tv.DeploymentVersionString(), CreateTime: timestamppb.New(time.Now())}},
LastModifierIdentity: "override-test-identity",
ManagerIdentity: "override-manager-identity",
}
// Create signal args with the override state
signalArgs := &deploymentspb.ForceCANDeploymentSignalArgs{
OverrideState: overrideState,
}
marshaledData, err := proto.Marshal(signalArgs)
s.NoError(err)
signalPayload := &commonpb.Payloads{
Payloads: []*commonpb.Payload{
{
Metadata: map[string][]byte{
"encoding": []byte("binary/protobuf"),
},
Data: marshaledData,
},
},
}
// Send ForceCAN signal with override state
workflowID := workerdeployment.GenerateDeploymentWorkflowID(tv.DeploymentSeries())
workflowExecution := &commonpb.WorkflowExecution{
WorkflowId: workflowID,
}
err = s.SendSignal(s.Namespace().String(), workflowExecution, workerdeployment.ForceCANSignalName, signalPayload, tv.ClientIdentity())
s.NoError(err)
// Verify that the override state is used after CAN
s.EventuallyWithT(func(t *assert.CollectT) {
a := require.New(t)
resp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{
Namespace: s.Namespace().String(),
DeploymentName: tv.DeploymentSeries(),
})
a.NoError(err)
a.Equal("override-manager-identity", resp.GetWorkerDeploymentInfo().GetManagerIdentity())
}, time.Second*10, time.Millisecond*1000)
}
func (s *WorkerDeploymentSuite) TestDeploymentVersionLimits() {
s.OverrideDynamicConfig(dynamicconfig.MatchingMaxVersionsInDeployment, 1)
s.OverrideDynamicConfig(dynamicconfig.MatchingMaxTaskQueuesInDeploymentVersion, 1)

View File

@@ -25,6 +25,7 @@ import (
sdkclient "go.temporal.io/sdk/client"
"go.temporal.io/sdk/worker"
"go.temporal.io/sdk/workflow"
deploymentspb "go.temporal.io/server/api/deployment/v1"
"go.temporal.io/server/common/dynamicconfig"
"go.temporal.io/server/common/testing/testhooks"
"go.temporal.io/server/common/testing/testvars"
@@ -225,6 +226,75 @@ func (s *DeploymentVersionSuite) TestForceCAN_NoOpenWFS() {
}, time.Second*10, time.Millisecond*1000)
}
func (s *DeploymentVersionSuite) TestForceCAN_WithOverrideState() {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
defer cancel()
tv := testvars.New(s)
// Start a version workflow
s.startVersionWorkflow(ctx, tv)
// Create a modified state with metadata to verify override works
overrideState := &deploymentspb.VersionLocalState{
Version: tv.DeploymentVersion(),
CreateTime: timestamppb.New(time.Now()),
Status: enumspb.WORKER_DEPLOYMENT_VERSION_STATUS_INACTIVE,
Metadata: &deploymentpb.VersionMetadata{
Entries: map[string]*commonpb.Payload{
"override-key": {Data: []byte("override-value")},
},
},
TaskQueueFamilies: map[string]*deploymentspb.VersionLocalState_TaskQueueFamilyData{
tv.TaskQueue().GetName(): {
TaskQueues: map[int32]*deploymentspb.TaskQueueVersionData{
int32(enumspb.TASK_QUEUE_TYPE_WORKFLOW): {},
},
},
},
}
// Create signal args with the override state
signalArgs := &deploymentspb.ForceCANVersionSignalArgs{
OverrideState: overrideState,
}
marshaledData, err := proto.Marshal(signalArgs)
s.NoError(err)
signalPayload := &commonpb.Payloads{
Payloads: []*commonpb.Payload{
{
Metadata: map[string][]byte{
"encoding": []byte("binary/protobuf"),
},
Data: marshaledData,
},
},
}
// Send ForceCAN signal with override state
versionWorkflowID := workerdeployment.GenerateVersionWorkflowID(tv.DeploymentSeries(), tv.BuildID())
workflowExecution := &commonpb.WorkflowExecution{
WorkflowId: versionWorkflowID,
}
err = s.SendSignal(s.Namespace().String(), workflowExecution, workerdeployment.ForceCANSignalName, signalPayload, tv.ClientIdentity())
s.NoError(err)
// Verify that the override state is used after CAN (metadata should be present)
s.EventuallyWithT(func(t *assert.CollectT) {
a := assert.New(t)
resp, err := s.describeVersion(tv)
if !a.NoError(err) {
return
}
// Verify the metadata from override state is present
entries := resp.GetWorkerDeploymentVersionInfo().GetMetadata().GetEntries()
a.Len(entries, 1)
a.Equal([]byte("override-value"), entries["override-key"].Data)
}, time.Second*10, time.Millisecond*1000)
}
func (s *DeploymentVersionSuite) TestDescribeVersion_RegisterTaskQueue() {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()