From 327149591f219488f9da5632d298d420641923a7 Mon Sep 17 00:00:00 2001 From: ShahabT Date: Sun, 30 Nov 2025 23:45:53 -0800 Subject: [PATCH 1/2] Add concurrency test for async Versioning operations --- api/deployment/v1/message.pb.go | 16 +- common/testing/testlogger/testlogger.go | 2 +- .../server/api/deployment/v1/message.proto | 5 +- service/frontend/workflow_handler.go | 21 -- .../matching/physical_task_queue_manager.go | 16 +- service/worker/workerdeployment/client.go | 192 +++++++++++++----- service/worker/workerdeployment/fx.go | 2 + service/worker/workerdeployment/util.go | 30 +-- .../workerdeployment/version_activities.go | 2 + .../workerdeployment/version_workflow.go | 107 +++++++--- service/worker/workerdeployment/workflow.go | 132 +++++++----- tests/worker_deployment_test.go | 188 ++++++++++++++++- 12 files changed, 528 insertions(+), 185 deletions(-) diff --git a/api/deployment/v1/message.pb.go b/api/deployment/v1/message.pb.go index a34c50f417..49a9ca24b7 100644 --- a/api/deployment/v1/message.pb.go +++ b/api/deployment/v1/message.pb.go @@ -305,8 +305,13 @@ type VersionLocalState struct { // executions and remains "drained". DrainageInfo *v11.VersionDrainageInfo `protobuf:"bytes,7,opt,name=drainage_info,json=drainageInfo,proto3" json:"drainage_info,omitempty"` // Arbitrary user-provided metadata attached to this version. - Metadata *v11.VersionMetadata `protobuf:"bytes,8,opt,name=metadata,proto3" json:"metadata,omitempty"` - StartedDeploymentWorkflow bool `protobuf:"varint,9,opt,name=started_deployment_workflow,json=startedDeploymentWorkflow,proto3" json:"started_deployment_workflow,omitempty"` + Metadata *v11.VersionMetadata `protobuf:"bytes,8,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Deployment workflow should always be running before starting the version workflow. + // We should not start the deployment workflow. If we cannot find the deployment workflow when signaling, it means a bug and we should fix it. + // Deprecated. + // + // Deprecated: Marked as deprecated in temporal/server/api/deployment/v1/message.proto. + StartedDeploymentWorkflow bool `protobuf:"varint,9,opt,name=started_deployment_workflow,json=startedDeploymentWorkflow,proto3" json:"started_deployment_workflow,omitempty"` // Key: Task Queue Name TaskQueueFamilies map[string]*VersionLocalState_TaskQueueFamilyData `protobuf:"bytes,10,rep,name=task_queue_families,json=taskQueueFamilies,proto3" json:"task_queue_families,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Number of task queues which will be synced in a single batch. @@ -420,6 +425,7 @@ func (x *VersionLocalState) GetMetadata() *v11.VersionMetadata { return nil } +// Deprecated: Marked as deprecated in temporal/server/api/deployment/v1/message.proto. func (x *VersionLocalState) GetStartedDeploymentWorkflow() bool { if x != nil { return x.StartedDeploymentWorkflow @@ -3312,7 +3318,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\"\xe8\v\n" + + "\x06status\x18\x06 \x01(\x0e24.temporal.api.enums.v1.WorkerDeploymentVersionStatusR\x06status\"\xec\v\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" + @@ -3324,8 +3330,8 @@ const file_temporal_server_api_deployment_v1_message_proto_rawDesc = "" + "\x15first_activation_time\x18\f \x01(\v2\x1a.google.protobuf.TimestampR\x13firstActivationTime\x12P\n" + "\x16last_deactivation_time\x18\r \x01(\v2\x1a.google.protobuf.TimestampR\x14lastDeactivationTime\x12T\n" + "\rdrainage_info\x18\a \x01(\v2/.temporal.api.deployment.v1.VersionDrainageInfoR\fdrainageInfo\x12G\n" + - "\bmetadata\x18\b \x01(\v2+.temporal.api.deployment.v1.VersionMetadataR\bmetadata\x12>\n" + - "\x1bstarted_deployment_workflow\x18\t \x01(\bR\x19startedDeploymentWorkflow\x12{\n" + + "\bmetadata\x18\b \x01(\v2+.temporal.api.deployment.v1.VersionMetadataR\bmetadata\x12B\n" + + "\x1bstarted_deployment_workflow\x18\t \x01(\bB\x02\x18\x01R\x19startedDeploymentWorkflow\x12{\n" + "\x13task_queue_families\x18\n" + " \x03(\v2K.temporal.server.api.deployment.v1.VersionLocalState.TaskQueueFamiliesEntryR\x11taskQueueFamilies\x12&\n" + "\x0fsync_batch_size\x18\v \x01(\x05R\rsyncBatchSize\x12L\n" + diff --git a/common/testing/testlogger/testlogger.go b/common/testing/testlogger/testlogger.go index 4a3b66a350..b234a1286b 100644 --- a/common/testing/testlogger/testlogger.go +++ b/common/testing/testlogger/testlogger.go @@ -218,7 +218,7 @@ func NewTestLogger(t TestingT, mode Mode, opts ...LoggerOption) *TestLogger { state: &sharedTestLoggerState{ t: t, logExpectations: false, - level: zapcore.DebugLevel, + level: zapcore.FatalLevel, logCaller: true, mode: mode, }, diff --git a/proto/internal/temporal/server/api/deployment/v1/message.proto b/proto/internal/temporal/server/api/deployment/v1/message.proto index d60111ba52..876db42434 100644 --- a/proto/internal/temporal/server/api/deployment/v1/message.proto +++ b/proto/internal/temporal/server/api/deployment/v1/message.proto @@ -112,7 +112,10 @@ message VersionLocalState { // Arbitrary user-provided metadata attached to this version. temporal.api.deployment.v1.VersionMetadata metadata = 8; - bool started_deployment_workflow = 9; + // Deployment workflow should always be running before starting the version workflow. + // We should not start the deployment workflow. If we cannot find the deployment workflow when signaling, it means a bug and we should fix it. + // Deprecated. + bool started_deployment_workflow = 9 [deprecated = true]; // Key: Task Queue Name map task_queue_families = 10; diff --git a/service/frontend/workflow_handler.go b/service/frontend/workflow_handler.go index 61b8f3199b..035e68bc16 100644 --- a/service/frontend/workflow_handler.go +++ b/service/frontend/workflow_handler.go @@ -98,12 +98,6 @@ var ( ) const ( - errTooManySetCurrentVersionRequests = "Too many SetWorkerDeploymentCurrentVersion requests have been issued in rapid succession. Please throttle the request rate to avoid exceeding Worker Deployment resource limits." - errTooManySetRampingVersionRequests = "Too many SetWorkerDeploymentRampingVersion requests have been issued in rapid succession. Please throttle the request rate to avoid exceeding Worker Deployment resource limits." - errTooManyDeleteDeploymentRequests = "Too many DeleteWorkerDeployment requests have been issued in rapid succession. Please throttle the request rate to avoid exceeding Worker Deployment resource limits." - errTooManyDeleteVersionRequests = "Too many DeleteWorkerDeploymentVersion requests have been issued in rapid succession. Please throttle the request rate to avoid exceeding Worker Deployment resource limits." - errTooManyVersionMetadataRequests = "Too many UpdateWorkerDeploymentVersionMetadata requests have been issued in rapid succession. Please throttle the request rate to avoid exceeding Worker Deployment resource limits." - maxReasonLength = 1000 // Maximum length for the reason field in RateLimitUpdate configurations. defaultUserTerminateReason = "terminated by user via frontend" defaultUserTerminateIdentity = "frontend-service" @@ -3444,9 +3438,6 @@ func (wh *WorkflowHandler) SetWorkerDeploymentCurrentVersion(ctx context.Context resp, err := wh.workerDeploymentClient.SetCurrentVersion(ctx, namespaceEntry, request.DeploymentName, versionStr, request.Identity, request.IgnoreMissingTaskQueues, request.GetConflictToken(), request.GetAllowNoPollers()) if err != nil { - if common.IsResourceExhausted(err) { - return nil, serviceerror.NewResourceExhaustedf(enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW, errTooManySetCurrentVersionRequests) - } return nil, err } @@ -3508,9 +3499,6 @@ func (wh *WorkflowHandler) SetWorkerDeploymentRampingVersion(ctx context.Context resp, err := wh.workerDeploymentClient.SetRampingVersion(ctx, namespaceEntry, request.DeploymentName, versionStr, request.GetPercentage(), request.GetIdentity(), request.IgnoreMissingTaskQueues, request.GetConflictToken(), request.GetAllowNoPollers()) if err != nil { - if common.IsResourceExhausted(err) { - return nil, serviceerror.NewResourceExhaustedf(enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW, errTooManySetRampingVersionRequests) - } return nil, err } @@ -3634,9 +3622,6 @@ func (wh *WorkflowHandler) DeleteWorkerDeployment(ctx context.Context, request * err = wh.workerDeploymentClient.DeleteWorkerDeployment(ctx, namespaceEntry, request.DeploymentName, request.Identity) if err != nil { - if common.IsResourceExhausted(err) { - return nil, serviceerror.NewResourceExhaustedf(enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW, errTooManyDeleteDeploymentRequests) - } return nil, err } @@ -3663,9 +3648,6 @@ func (wh *WorkflowHandler) DeleteWorkerDeploymentVersion(ctx context.Context, re err = wh.workerDeploymentClient.DeleteWorkerDeploymentVersion(ctx, namespaceEntry, versionStr, request.SkipDrainage, request.Identity) if err != nil { - if common.IsResourceExhausted(err) { - return nil, serviceerror.NewResourceExhaustedf(enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW, errTooManyDeleteVersionRequests) - } return nil, err } @@ -3697,9 +3679,6 @@ func (wh *WorkflowHandler) UpdateWorkerDeploymentVersionMetadata(ctx context.Con identity := uuid.NewString() updatedMetadata, err := wh.workerDeploymentClient.UpdateVersionMetadata(ctx, namespaceEntry, versionStr, request.UpsertEntries, request.RemoveEntries, identity) if err != nil { - if common.IsResourceExhausted(err) { - return nil, serviceerror.NewResourceExhaustedf(enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW, errTooManyVersionMetadataRequests) - } return nil, err } diff --git a/service/matching/physical_task_queue_manager.go b/service/matching/physical_task_queue_manager.go index 695926fe7f..64409c1101 100644 --- a/service/matching/physical_task_queue_manager.go +++ b/service/matching/physical_task_queue_manager.go @@ -10,6 +10,7 @@ import ( "time" "github.com/nexus-rpc/sdk-go/nexus" + enumspb "go.temporal.io/api/enums/v1" "go.temporal.io/api/serviceerror" taskqueuepb "go.temporal.io/api/taskqueue/v1" "go.temporal.io/api/workflowservice/v1" @@ -17,6 +18,7 @@ import ( persistencespb "go.temporal.io/server/api/persistence/v1" taskqueuespb "go.temporal.io/server/api/taskqueue/v1" "go.temporal.io/server/common" + backoff2 "go.temporal.io/server/common/backoff" "go.temporal.io/server/common/clock" "go.temporal.io/server/common/cluster" "go.temporal.io/server/common/contextutil" @@ -712,8 +714,11 @@ func (c *physicalTaskQueueManagerImpl) ensureRegisteredInDeploymentVersion( return nil } - // we need to update the deployment workflow to tell it about this task queue - // TODO: add some backoff here if we got an error last time + backoff, ok := testhooks.Get[time.Duration](c.partitionMgr.engine.testHooks, testhooks.MatchingDeploymentRegisterErrorBackoff) + if !ok { + backoff = deploymentRegisterErrorBackoff + } + backoff = backoff2.Jitter(backoff, .5) err = c.partitionMgr.engine.workerDeploymentClient.RegisterTaskQueueWorker( ctx, namespaceEntry, workerDeployment.SeriesName, workerDeployment.BuildId, c.queue.TaskQueueFamily().Name(), c.queue.TaskType(), @@ -724,17 +729,14 @@ func (c *physicalTaskQueueManagerImpl) ensureRegisteredInDeploymentVersion( return err } var errResourceExhausted *serviceerror.ResourceExhausted - if !errors.As(err, &errResourceExhausted) { + if !errors.As(err, &errResourceExhausted) || errResourceExhausted.Cause != enumspb.RESOURCE_EXHAUSTED_CAUSE_WORKER_DEPLOYMENT_LIMITS { // Do not surface low level error to user + // Also, we don't surface resource exhausted errors that are not about deployment limits as they are caused by our workflow-based implementation. c.logger.Error("error while registering version", tag.Error(err)) err = errDeploymentVersionNotReady } // Before retrying the error, hold the poller for some time so it does not retry immediately // Parallel polls are already serialized using the lock. - backoff := deploymentRegisterErrorBackoff - if testBackoff, ok := testhooks.Get[time.Duration](c.partitionMgr.engine.testHooks, testhooks.MatchingDeploymentRegisterErrorBackoff); ok { - backoff = testBackoff - } time.Sleep(backoff) return err } diff --git a/service/worker/workerdeployment/client.go b/service/worker/workerdeployment/client.go index fc7129ea7d..50b2e5209a 100644 --- a/service/worker/workerdeployment/client.go +++ b/service/worker/workerdeployment/client.go @@ -22,10 +22,12 @@ import ( deploymentspb "go.temporal.io/server/api/deployment/v1" "go.temporal.io/server/api/historyservice/v1" "go.temporal.io/server/api/matchingservice/v1" + "go.temporal.io/server/common" "go.temporal.io/server/common/backoff" "go.temporal.io/server/common/dynamicconfig" "go.temporal.io/server/common/log" "go.temporal.io/server/common/log/tag" + "go.temporal.io/server/common/metrics" "go.temporal.io/server/common/namespace" "go.temporal.io/server/common/payload" "go.temporal.io/server/common/persistence/visibility/manager" @@ -36,7 +38,9 @@ import ( "go.temporal.io/server/common/searchattribute/sadefs" "go.temporal.io/server/common/testing/testhooks" "go.temporal.io/server/common/worker_versioning" + "go.temporal.io/server/service/history/api" "go.temporal.io/server/service/history/consts" + "go.temporal.io/server/service/history/workflow/update" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -124,6 +128,7 @@ type Client interface { ) (*workflowservice.SetWorkerDeploymentManagerResponse, error) // Used internally by the Worker Deployment Version workflow in its StartWorkerDeployment Activity + // Deprecated. StartWorkerDeployment( ctx context.Context, namespaceEntry *namespace.Namespace, @@ -189,6 +194,8 @@ type Client interface { type ErrRegister struct{ error } +var retryPolicy = backoff.NewExponentialRetryPolicy(100 * time.Millisecond).WithExpirationInterval(1 * time.Minute) + // ClientImpl implements Client type ClientImpl struct { logger log.Logger @@ -200,6 +207,7 @@ type ClientImpl struct { maxTaskQueuesInDeploymentVersion dynamicconfig.IntPropertyFnWithNamespaceFilter maxDeployments dynamicconfig.IntPropertyFnWithNamespaceFilter testHooks testhooks.TestHooks + metricsHandler metrics.Handler } func (d *ClientImpl) SetManager( @@ -214,7 +222,7 @@ func (d *ClientImpl) SetManager( newManagerID = request.GetManagerIdentity() } //revive:disable-next-line:defer - defer d.record("SetManager", &retErr, newManagerID, request.GetIdentity())() + defer d.convertAndRecordError("SetManager", &retErr, newManagerID, request.GetIdentity())() // validating params err := validateVersionWfParams(worker_versioning.WorkerDeploymentNameFieldName, request.GetDeploymentName(), d.maxIDLengthLimit()) @@ -279,7 +287,8 @@ func (d *ClientImpl) SetManager( var _ Client = (*ClientImpl)(nil) -var errRetry = errors.New("retry update") +var errUpdateInProgress = errors.New("update in progress") +var errWorkflowHistoryTooLong = errors.New("workflow history too long") func (d *ClientImpl) RegisterTaskQueueWorker( ctx context.Context, @@ -290,7 +299,7 @@ func (d *ClientImpl) RegisterTaskQueueWorker( identity string, ) (retErr error) { //revive:disable-next-line:defer - defer d.record("RegisterTaskQueueWorker", &retErr, taskQueueName, taskQueueType, identity)() + defer d.convertAndRecordError("RegisterTaskQueueWorker", &retErr, taskQueueName, taskQueueType, identity)() // Creating request ID out of build ID + TQ name + TQ type. Many updates may come from multiple // matching partitions, we do not want them to create new update requests. @@ -369,7 +378,7 @@ func (d *ClientImpl) DescribeVersion( buildID := v.GetBuildId() //revive:disable-next-line:defer - defer d.record("DescribeVersion", &retErr, deploymentName, buildID)() + defer d.convertAndRecordError("DescribeVersion", &retErr, deploymentName, buildID)() // validate deployment name if err = validateVersionWfParams(worker_versioning.WorkerDeploymentNameFieldName, deploymentName, d.maxIDLengthLimit()); err != nil { @@ -394,7 +403,8 @@ func (d *ClientImpl) DescribeVersion( }, } - res, err := d.historyClient.QueryWorkflow(ctx, req) + res, err := d.queryWorkflowWithRetry(ctx, req) + if err != nil { var notFound *serviceerror.NotFound if errors.As(err, ¬Found) { @@ -431,6 +441,16 @@ func (d *ClientImpl) DescribeVersion( return versionInfo, tqInfos, nil } +func (d *ClientImpl) queryWorkflowWithRetry(ctx context.Context, req *historyservice.QueryWorkflowRequest) (*historyservice.QueryWorkflowResponse, error) { + var res *historyservice.QueryWorkflowResponse + var err error + err = backoff.ThrottleRetryContext(ctx, func(ctx context.Context) error { + res, err = d.historyClient.QueryWorkflow(ctx, req) + return err + }, retryPolicy, isRetryableQueryError) + return res, err +} + func (d *ClientImpl) UpdateVersionMetadata( ctx context.Context, namespaceEntry *namespace.Namespace, @@ -440,7 +460,7 @@ func (d *ClientImpl) UpdateVersionMetadata( identity string, ) (_ *deploymentpb.VersionMetadata, retErr error) { //revive:disable-next-line:defer - defer d.record("UpdateVersionMetadata", &retErr, namespaceEntry.Name(), version, upsertEntries, removeEntries, identity)() + defer d.convertAndRecordError("UpdateVersionMetadata", &retErr, namespaceEntry.Name(), version, upsertEntries, removeEntries, identity)() requestID := uuid.NewString() versionObj, err := worker_versioning.WorkerDeploymentVersionFromStringV31(version) @@ -467,9 +487,6 @@ func (d *ClientImpl) UpdateVersionMetadata( } if failure := outcome.GetFailure(); failure != nil { - if failure.GetApplicationFailureInfo().GetType() == errVersionDeleted { - return nil, serviceerror.NewNotFoundf(ErrWorkerDeploymentVersionNotFound, versionObj.GetBuildId(), versionObj.GetDeploymentName()) - } return nil, serviceerror.NewInternal(failure.Message) } success := outcome.GetSuccess() @@ -491,7 +508,7 @@ func (d *ClientImpl) DescribeWorkerDeployment( deploymentName string, ) (_ *deploymentpb.WorkerDeploymentInfo, conflictToken []byte, retErr error) { //revive:disable-next-line:defer - defer d.record("DescribeWorkerDeployment", &retErr, deploymentName)() + defer d.convertAndRecordError("DescribeWorkerDeployment", &retErr, deploymentName)() // validating params err := validateVersionWfParams(worker_versioning.WorkerDeploymentNameFieldName, deploymentName, d.maxIDLengthLimit()) @@ -512,7 +529,7 @@ func (d *ClientImpl) DescribeWorkerDeployment( }, } - res, err := d.historyClient.QueryWorkflow(ctx, req) + res, err := d.queryWorkflowWithRetry(ctx, req) if err != nil { var notFound *serviceerror.NotFound if errors.As(err, ¬Found) { @@ -582,7 +599,7 @@ func (d *ClientImpl) ListWorkerDeployments( nextPageToken []byte, ) (_ []*deploymentspb.WorkerDeploymentSummary, _ []byte, retError error) { //revive:disable-next-line:defer - defer d.record("ListWorkerDeployments", &retError)() + defer d.convertAndRecordError("ListWorkerDeployments", &retError)() query := WorkerDeploymentVisibilityBaseListQuery @@ -643,7 +660,7 @@ func (d *ClientImpl) SetCurrentVersion( allowNoPollers bool, ) (_ *deploymentspb.SetCurrentVersionResponse, retErr error) { //revive:disable-next-line:defer - defer d.record("SetCurrentVersion", &retErr, namespaceEntry.Name(), version, identity)() + defer d.convertAndRecordError("SetCurrentVersion", &retErr, namespaceEntry.Name(), version, identity)() versionObj, err := worker_versioning.WorkerDeploymentVersionFromStringV31(version) if err != nil { @@ -751,7 +768,7 @@ func (d *ClientImpl) SetRampingVersion( allowNoPollers bool, ) (_ *deploymentspb.SetRampingVersionResponse, retErr error) { //revive:disable-next-line:defer - defer d.record("SetRampingVersion", &retErr, namespaceEntry.Name(), version, percentage, identity)() + defer d.convertAndRecordError("SetRampingVersion", &retErr, namespaceEntry.Name(), version, percentage, identity)() var err error var versionObj *deploymentspb.WorkerDeploymentVersion @@ -870,7 +887,7 @@ func (d *ClientImpl) DeleteWorkerDeploymentVersion( buildId := v.GetBuildId() //revive:disable-next-line:defer - defer d.record("DeleteWorkerDeploymentVersion", &retErr, namespaceEntry.Name(), deploymentName, buildId)() + defer d.convertAndRecordError("DeleteWorkerDeploymentVersion", &retErr, namespaceEntry.Name(), deploymentName, buildId)() requestID := uuid.NewString() if identity == "" { @@ -934,7 +951,7 @@ func (d *ClientImpl) DeleteWorkerDeployment( identity string, ) (retErr error) { //revive:disable-next-line:defer - defer d.record("DeleteWorkerDeployment", &retErr, namespaceEntry.Name(), deploymentName, identity)() + defer d.convertAndRecordError("DeleteWorkerDeployment", &retErr, namespaceEntry.Name(), deploymentName, identity)() // validating params err := validateVersionWfParams(worker_versioning.WorkerDeploymentNameFieldName, deploymentName, d.maxIDLengthLimit()) @@ -993,7 +1010,7 @@ func (d *ClientImpl) StartWorkerDeployment( requestID string, ) (retErr error) { //revive:disable-next-line:defer - defer d.record("StartWorkerDeployment", &retErr, namespaceEntry.Name(), deploymentName, identity)() + defer d.convertAndRecordError("StartWorkerDeployment", &retErr, namespaceEntry.Name(), deploymentName, identity)() workflowID := GenerateDeploymentWorkflowID(deploymentName) @@ -1025,7 +1042,7 @@ func (d *ClientImpl) StartWorkerDeploymentVersion( requestID string, ) (retErr error) { //revive:disable-next-line:defer - defer d.record("StartWorkerDeploymentVersion", &retErr, namespaceEntry.Name(), deploymentName, identity)() + defer d.convertAndRecordError("StartWorkerDeploymentVersion", &retErr, namespaceEntry.Name(), deploymentName, identity)() err := validateVersionWfParams(worker_versioning.WorkerDeploymentNameFieldName, deploymentName, d.maxIDLengthLimit()) if err != nil { @@ -1061,7 +1078,7 @@ func (d *ClientImpl) SyncVersionWorkflowFromWorkerDeployment( requestID string, ) (_ *deploymentspb.SyncVersionStateResponse, retErr error) { //revive:disable-next-line:defer - defer d.record("SyncVersionWorkflowFromWorkerDeployment", &retErr, namespaceEntry.Name(), deploymentName, version, args, identity)() + defer d.convertAndRecordError("SyncVersionWorkflowFromWorkerDeployment", &retErr, namespaceEntry.Name(), deploymentName, version, args, identity)() versionObj, err := worker_versioning.WorkerDeploymentVersionFromStringV31(version) if err != nil { @@ -1123,7 +1140,7 @@ func (d *ClientImpl) DeleteVersionFromWorkerDeployment( asyncPropagation bool, ) (retErr error) { //revive:disable-next-line:defer - defer d.record("DeleteVersionFromWorkerDeployment", &retErr, namespaceEntry.Name(), deploymentName, version, identity, skipDrainage)() + defer d.convertAndRecordError("DeleteVersionFromWorkerDeployment", &retErr, namespaceEntry.Name(), deploymentName, version, identity, skipDrainage)() versionObj, err := worker_versioning.WorkerDeploymentVersionFromStringV31(version) if err != nil { @@ -1177,7 +1194,6 @@ func (d *ClientImpl) update( workflowID string, updateRequest *updatepb.Request, ) (*updatepb.Outcome, error) { - updateReq := &historyservice.UpdateWorkflowExecutionRequest{ NamespaceId: namespaceEntry.ID().String(), Request: &workflowservice.UpdateWorkflowExecutionRequest{ @@ -1190,8 +1206,6 @@ func (d *ClientImpl) update( }, } - policy := backoff.NewExponentialRetryPolicy(100 * time.Millisecond) - var outcome *updatepb.Outcome err := backoff.ThrottleRetryContext(ctx, func(ctx context.Context) error { // historyClient retries internally on retryable rpc errors, we just have to retry on @@ -1201,19 +1215,13 @@ func (d *ClientImpl) update( return err } - if res.GetResponse() == nil { - return serviceerror.NewInternal("failed to update workflow with workflowID: " + workflowID) - } - - stage := res.GetResponse().GetStage() - if stage != enumspb.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED { - // update not completed, try again - return errRetry + if err := convertUpdateFailure(res.GetResponse()); err != nil { + return err } outcome = res.GetResponse().GetOutcome() return nil - }, policy, isRetryableUpdateError) + }, retryPolicy, isRetryableUpdateError) return outcome, err } @@ -1293,6 +1301,7 @@ func (d *ClientImpl) countWorkerDeployments( Query: query, }, ) + metrics.WorkerDeploymentVersionVisibilityQueryCount.With(d.metricsHandler).Record(1, metrics.OperationTag("countWorkerDeployments")) if err != nil { return 0, err } @@ -1382,7 +1391,6 @@ func (d *ClientImpl) updateWithStart( }, } - policy := backoff.NewExponentialRetryPolicy(100 * time.Millisecond) var outcome *updatepb.Outcome err := backoff.ThrottleRetryContext(ctx, func(ctx context.Context) error { @@ -1405,33 +1413,84 @@ func (d *ClientImpl) updateWithStart( } if startRes == nil { return serviceerror.NewInternal("failed to start deployment workflow") - } else if updateRes == nil { - return serviceerror.NewInternal("failed to update deployment workflow") } - if updateRes.Stage != enumspb.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED { - // update not completed, try again - return errRetry + if err := convertUpdateFailure(updateRes); err != nil { + return err } outcome = updateRes.GetOutcome() return nil - }, policy, isRetryableUpdateError) + }, retryPolicy, isRetryableUpdateError) return outcome, err } +func convertUpdateFailure(updateRes *workflowservice.UpdateWorkflowExecutionResponse) error { + if updateRes == nil { + return serviceerror.NewInternal("failed to update deployment workflow") + } + + if updateRes.Stage != enumspb.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED { + // update not completed, try again + return errUpdateInProgress + } + + if failure := updateRes.GetOutcome().GetFailure(); failure != nil { + if failure.GetApplicationFailureInfo().GetType() == errLongHistory { + // Retriable + return errWorkflowHistoryTooLong + } else if failure.GetApplicationFailureInfo().GetType() == errVersionDeleted { + // Non-retriable + return serviceerror.NewNotFoundf("Worker Deployment Version not found") + } else if failure.GetApplicationFailureInfo().GetType() == errDeploymentDeleted { + // Non-retriable + return serviceerror.NewNotFoundf("Worker Deployment not found") + } else if failure.GetApplicationFailureInfo().GetType() == errFailedPrecondition { + return serviceerror.NewFailedPrecondition(failure.GetMessage()) + } + + // we let caller handle other update failures + } + return nil +} + +func isRetryableQueryError(err error) bool { + return api.IsRetryableError(err) +} + func isRetryableUpdateError(err error) bool { - if errors.Is(err, errRetry) || err.Error() == consts.ErrWorkflowClosing.Error() { + if errors.Is(err, errUpdateInProgress) || errors.Is(err, errWorkflowHistoryTooLong) || + err.Error() == consts.ErrWorkflowClosing.Error() || err.Error() == update.AbortedByServerErr.Error() { + return true + } + + var errResourceExhausted *serviceerror.ResourceExhausted + if errors.As(err, &errResourceExhausted) && + (errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT || + errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW) { + // We're hitting the max concurrent update limit for the wf. Retrying will eventually succeed. + return true + } + + var errWfNotReady *serviceerror.WorkflowNotReady + if errors.As(err, &errWfNotReady) { + // Update edge cases, can retry. return true } // All updates that are admitted as the workflow is closing due to CaN are considered retryable. - // The ErrWorkflowClosing could be nested. + // The ErrWorkflowClosing and ResourceExhausted could be nested. var errMultiOps *serviceerror.MultiOperationExecution if errors.As(err, &errMultiOps) { for _, e := range errMultiOps.OperationErrors() { - if e.Error() == consts.ErrWorkflowClosing.Error() { + if errors.As(e, &errResourceExhausted) && + (errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT || + errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW) { + // We're hitting the max concurrent update limit for the wf. Retrying will eventually succeed. + return true + } + if e.Error() == consts.ErrWorkflowClosing.Error() || e.Error() == update.AbortedByServerErr.Error() { return true } } @@ -1445,7 +1504,7 @@ func (d *ClientImpl) buildSearchAttributes() *commonpb.SearchAttributes { return sa } -func (d *ClientImpl) record(operation string, retErr *error, args ...any) func() { +func (d *ClientImpl) convertAndRecordError(operation string, retErr *error, args ...any) func() { start := time.Now() return func() { elapsed := time.Since(start) @@ -1453,20 +1512,50 @@ func (d *ClientImpl) record(operation string, retErr *error, args ...any) func() // TODO: add metrics recording here if *retErr != nil { - if isFailedPrecondition(*retErr) { - d.logger.Debug("deployment client failure due to a failed precondition", + if isFailedPreconditionOrNotFound(*retErr) { + d.logger.Debug("deployment client failure due to a failed precondition or not found error", tag.Error(*retErr), tag.Operation(operation), tag.NewDurationTag("elapsed", elapsed), tag.NewAnyTag("args", args), ) } else { - d.logger.Error("deployment client error", - tag.Error(*retErr), - tag.Operation(operation), - tag.NewDurationTag("elapsed", elapsed), - tag.NewAnyTag("args", args), - ) + if isRetryableUpdateError(*retErr) || isRetryableQueryError(*retErr) { + d.logger.Debug("deployment client throttling due to retriable error", + tag.Error(*retErr), + tag.Operation(operation), + tag.NewDurationTag("elapsed", elapsed), + tag.NewAnyTag("args", args), + ) + var errResourceExhausted *serviceerror.ResourceExhausted + if !errors.As(*retErr, &errResourceExhausted) || errResourceExhausted.Cause != enumspb.RESOURCE_EXHAUSTED_CAUSE_WORKER_DEPLOYMENT_LIMITS { + // if it's not a deployment limits error, we don't want to expose the underlying cause to the user + *retErr = &serviceerror.ResourceExhausted{ + Message: ErrTooManyRequests, + Scope: enumspb.RESOURCE_EXHAUSTED_SCOPE_NAMESPACE, + // These errors are caused by workflow throughput limits, so BUSY_WORKFLOW is the most appropriate cause. + // This cause is not sent back to the user. + Cause: enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW, + } + } + } else if errors.Is(*retErr, context.DeadlineExceeded) || + errors.Is(*retErr, context.Canceled) || + common.IsContextDeadlineExceededErr(*retErr) || + common.IsContextCanceledErr(*retErr) { + d.logger.Debug("deployment client timeout or cancellation", + tag.Error(*retErr), + tag.Operation(operation), + tag.NewDurationTag("elapsed", elapsed), + tag.NewAnyTag("args", args), + ) + } else { + d.logger.Error("deployment client unexpected error", + tag.Error(*retErr), + tag.Operation(operation), + tag.NewDurationTag("elapsed", elapsed), + tag.NewAnyTag("args", args), + ) + } } } else { d.logger.Debug("deployment client success", @@ -1645,6 +1734,7 @@ func (d *ClientImpl) GetVersionDrainageStatus( Query: makeDeploymentQuery(worker_versioning.ExternalWorkerDeploymentVersionToString(worker_versioning.ExternalWorkerDeploymentVersionFromStringV31(version))), } countResponse, err := d.visibilityManager.CountWorkflowExecutions(ctx, &countRequest) + metrics.WorkerDeploymentVersionVisibilityQueryCount.With(d.metricsHandler).Record(1, metrics.OperationTag("GetVersionDrainageStatus")) if err != nil { return enumspb.VERSION_DRAINAGE_STATUS_UNSPECIFIED, err } diff --git a/service/worker/workerdeployment/fx.go b/service/worker/workerdeployment/fx.go index b4e1736271..6e7549cc09 100644 --- a/service/worker/workerdeployment/fx.go +++ b/service/worker/workerdeployment/fx.go @@ -65,6 +65,7 @@ func ClientProvider( visibilityManager manager.VisibilityManager, dc *dynamicconfig.Collection, testHooks testhooks.TestHooks, + metricsHandler metrics.Handler, ) Client { return &ClientImpl{ logger: logger, @@ -76,6 +77,7 @@ func ClientProvider( maxTaskQueuesInDeploymentVersion: dynamicconfig.MatchingMaxTaskQueuesInDeploymentVersion.Get(dc), maxDeployments: dynamicconfig.MatchingMaxDeployments.Get(dc), testHooks: testHooks, + metricsHandler: metricsHandler, } } diff --git a/service/worker/workerdeployment/util.go b/service/worker/workerdeployment/util.go index 8ea02de30d..0a3f29b89b 100644 --- a/service/worker/workerdeployment/util.go +++ b/service/worker/workerdeployment/util.go @@ -27,17 +27,16 @@ const ( WorkerDeploymentNamespaceDivision = "TemporalWorkerDeployment" // Updates - RegisterWorkerInDeploymentVersion = "register-task-queue-worker" // for Worker Deployment Version wf - SyncVersionState = "sync-version-state" // for Worker Deployment Version wfs - UpdateVersionMetadata = "update-version-metadata" // for Worker Deployment Version wfs - RegisterWorkerInWorkerDeployment = "register-worker-in-deployment" // for Worker Deployment wfs - SetCurrentVersion = "set-current-version" // for Worker Deployment wfs - SetRampingVersion = "set-ramping-version" // for Worker Deployment wfs - AddVersionToWorkerDeployment = "add-version-to-worker-deployment" // for Worker Deployment wfs - DeleteVersion = "delete-version" // for WorkerDeployment wfs - DeleteDeployment = "delete-deployment" // for WorkerDeployment wfs - SetManagerIdentity = "set-manager-identity" // for WorkerDeployment wfs - serverDeleteVersionIdentity = "try-delete-for-add-version" // identity of the worker-deployment workflow when it tries to delete a version on the event that the addition + RegisterWorkerInDeploymentVersion = "register-task-queue-worker" // for Worker Deployment Version wf + SyncVersionState = "sync-version-state" // for Worker Deployment Version wfs + UpdateVersionMetadata = "update-version-metadata" // for Worker Deployment Version wfs + RegisterWorkerInWorkerDeployment = "register-worker-in-deployment" // for Worker Deployment wfs + SetCurrentVersion = "set-current-version" // for Worker Deployment wfs + SetRampingVersion = "set-ramping-version" // for Worker Deployment wfs + DeleteVersion = "delete-version" // for WorkerDeployment wfs + DeleteDeployment = "delete-deployment" // for WorkerDeployment wfs + SetManagerIdentity = "set-manager-identity" // for WorkerDeployment wfs + serverDeleteVersionIdentity = "try-delete-for-add-version" // identity of the worker-deployment workflow when it tries to delete a version on the event that the addition // of a version exceeds the max number of versions allowed in a worker-deployment (defaultMaxVersions) // Signals @@ -63,6 +62,7 @@ const ( errVersionNotFound = "Version not found in deployment" errDeploymentDeleted = "worker deployment deleted" // returned in the race condition that the deployment is deleted but the workflow is not yet closed. errVersionDeleted = "worker deployment version deleted" // returned in the race condition that the deployment version is deleted but the workflow is not yet closed. + errLongHistory = "errLongHistory" // update is not accepted until CaN happens. client should retry errFailedPrecondition = "FailedPrecondition" @@ -77,6 +77,7 @@ const ( ErrManagerIdentityMismatch = "ManagerIdentity '%s' is set and does not match user identity '%s'; to proceed, set your own identity as the ManagerIdentity, remove the ManagerIdentity, or wait for the other client to do so" ErrWorkerDeploymentNotFound = "no Worker Deployment found with name '%s'; does your Worker Deployment have pollers?" ErrWorkerDeploymentVersionNotFound = "build ID '%s' not found in Worker Deployment '%s'" + ErrTooManyRequests = "too many requests issued to the same Worker Deployment. Please try again later" ) var ( @@ -159,9 +160,8 @@ func durationEq(a, b any) bool { return a == b } -// isFailedPrecondition checks if the error is a FailedPrecondition error. It also checks if the FailedPrecondition error is wrapped in an ApplicationError. -func isFailedPrecondition(err error) bool { +func isFailedPreconditionOrNotFound(err error) bool { var failedPreconditionError *serviceerror.FailedPrecondition - var applicationError *temporal.ApplicationError - return errors.As(err, &failedPreconditionError) || (errors.As(err, &applicationError) && applicationError.Type() == errFailedPrecondition) + var notFound *serviceerror.NotFound + return errors.As(err, &failedPreconditionError) || errors.As(err, ¬Found) } diff --git a/service/worker/workerdeployment/version_activities.go b/service/worker/workerdeployment/version_activities.go index c81311d9a9..b345bbe393 100644 --- a/service/worker/workerdeployment/version_activities.go +++ b/service/worker/workerdeployment/version_activities.go @@ -49,6 +49,7 @@ func (a *VersionActivities) SyncDeploymentVersionUserData( ctx context.Context, input *deploymentspb.SyncDeploymentVersionUserDataRequest, ) (*deploymentspb.SyncDeploymentVersionUserDataResponse, error) { + //fmt.Printf("syncing task queue userdata rn %d for deployment version %s\n", input.GetUpdateRoutingConfig().GetRevisionNumber(), input.GetVersion().GetBuildId()) logger := activity.GetLogger(ctx) errs := make(chan error) @@ -112,6 +113,7 @@ func (a *VersionActivities) SyncDeploymentVersionUserData( } func (a *VersionActivities) CheckWorkerDeploymentUserDataPropagation(ctx context.Context, input *deploymentspb.CheckWorkerDeploymentUserDataPropagationRequest) error { + //fmt.Printf("checking userdata propagation\n") logger := activity.GetLogger(ctx) errs := make(chan error) diff --git a/service/worker/workerdeployment/version_workflow.go b/service/worker/workerdeployment/version_workflow.go index 79de1f95d7..abae0f15ec 100644 --- a/service/worker/workerdeployment/version_workflow.go +++ b/service/worker/workerdeployment/version_workflow.go @@ -204,17 +204,21 @@ func (d *VersionWorkflowRunner) run(ctx workflow.Context) error { return err } - // First ensure deployment workflow is running - if !d.VersionState.StartedDeploymentWorkflow { - activityCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) - err := workflow.ExecuteActivity(activityCtx, d.a.StartWorkerDeploymentWorkflow, &deploymentspb.StartWorkerDeploymentRequest{ - DeploymentName: d.VersionState.Version.DeploymentName, - RequestId: d.newUUID(ctx), - }).Get(ctx, nil) - if err != nil { - return err + // Deployment workflow should always be running before starting the version workflow. + // We should not start the deployment workflow. If we cannot find the deployment workflow when signaling, it means a bug and we should fix it. + if !d.hasMinVersion(VersionDataRevisionNumber) { + // First ensure deployment workflow is running + if !d.VersionState.StartedDeploymentWorkflow { + activityCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) + err := workflow.ExecuteActivity(activityCtx, d.a.StartWorkerDeploymentWorkflow, &deploymentspb.StartWorkerDeploymentRequest{ + DeploymentName: d.VersionState.Version.DeploymentName, + RequestId: d.newUUID(ctx), + }).Get(ctx, nil) + if err != nil { + return err + } + d.VersionState.StartedDeploymentWorkflow = true } - d.VersionState.StartedDeploymentWorkflow = true } // Listen to signals in a different goroutine to make business logic clearer @@ -244,14 +248,22 @@ func (d *VersionWorkflowRunner) run(ctx workflow.Context) error { } func (d *VersionWorkflowRunner) validateUpdateVersionMetadata(args *deploymentspb.UpdateVersionMetadataArgs) error { + return d.ensureNotDeleted() +} + +func (d *VersionWorkflowRunner) ensureNotDeleted() error { if d.deleteVersion { - // Deployment workflow should not call this function if version is marked for deletion, but still checking for safety. + // Deployment workflow should not call updates if version is marked for deletion, but still checking for safety. return temporal.NewNonRetryableApplicationError(errVersionDeleted, errVersionDeleted, nil) } return nil } func (d *VersionWorkflowRunner) handleUpdateVersionMetadata(ctx workflow.Context, args *deploymentspb.UpdateVersionMetadataArgs) (*deploymentspb.UpdateVersionMetadataResponse, error) { + if err := d.preUpdateChecks(ctx); err != nil { + return nil, err + } + if d.VersionState.Metadata == nil && args.UpsertEntries != nil { d.VersionState.Metadata = &deploymentpb.VersionMetadata{} d.VersionState.Metadata.Entries = make(map[string]*commonpb.Payload) @@ -311,6 +323,10 @@ func (d *VersionWorkflowRunner) validateDeleteVersion(args *deploymentspb.Delete } func (d *VersionWorkflowRunner) handleDeleteVersion(ctx workflow.Context, args *deploymentspb.DeleteVersionArgs) error { + if err := d.preUpdateChecks(ctx); err != nil { + return err + } + // use lock to enforce only one update at a time err := d.lock.Lock(ctx) if err != nil { @@ -324,11 +340,18 @@ func (d *VersionWorkflowRunner) handleDeleteVersion(ctx workflow.Context, args * d.lock.Unlock() }() - // wait until deployment workflow started - err = workflow.Await(ctx, func() bool { return d.VersionState.StartedDeploymentWorkflow }) - if err != nil { - d.logger.Error("Update canceled before worker deployment workflow started") - return serviceerror.NewDeadlineExceeded("Update canceled before worker deployment workflow started") + if d.deleteVersion { + // already deleted, returning success so it is idempotent + return nil + } + + if !d.hasMinVersion(VersionDataRevisionNumber) { + // wait until deployment workflow started + err = workflow.Await(ctx, func() bool { return d.VersionState.StartedDeploymentWorkflow }) + if err != nil { + d.logger.Error("Update canceled before worker deployment workflow started") + return serviceerror.NewDeadlineExceeded("Update canceled before worker deployment workflow started") + } } activityCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) @@ -458,6 +481,10 @@ func (d *VersionWorkflowRunner) doesVersionHaveActivePollers(ctx workflow.Contex } func (d *VersionWorkflowRunner) validateRegisterWorker(args *deploymentspb.RegisterWorkerInVersionArgs) error { + if err := d.ensureNotDeleted(); err != nil { + return err + } + if _, ok := d.VersionState.TaskQueueFamilies[args.TaskQueueName].GetTaskQueues()[int32(args.TaskQueueType)]; ok { return temporal.NewApplicationError("task queue already exists in deployment version", errNoChangeType) } @@ -471,6 +498,10 @@ func (d *VersionWorkflowRunner) validateRegisterWorker(args *deploymentspb.Regis } func (d *VersionWorkflowRunner) handleRegisterWorker(ctx workflow.Context, args *deploymentspb.RegisterWorkerInVersionArgs) error { + if err := d.preUpdateChecks(ctx); err != nil { + return err + } + // use lock to enforce only one update at a time err := d.lock.Lock(ctx) if err != nil { @@ -514,6 +545,12 @@ func (d *VersionWorkflowRunner) handleRegisterWorker(ctx workflow.Context, args if d.VersionState.TaskQueueFamilies[args.TaskQueueName].TaskQueues == nil { d.VersionState.TaskQueueFamilies[args.TaskQueueName].TaskQueues = make(map[int32]*deploymentspb.TaskQueueVersionData) } + + if _, ok := d.VersionState.TaskQueueFamilies[args.TaskQueueName].TaskQueues[int32(args.TaskQueueType)]; ok { + // already registered, returning success so it is idempotent + return nil + } + d.VersionState.TaskQueueFamilies[args.TaskQueueName].TaskQueues[int32(args.TaskQueueType)] = &deploymentspb.TaskQueueVersionData{} if withRevisionNumbers && args.GetRoutingConfig() != nil { @@ -583,10 +620,10 @@ func (d *VersionWorkflowRunner) versionDataToSync() *deploymentspb.WorkerDeploym // If routing update time has changed then we want to let the update through. func (d *VersionWorkflowRunner) validateSyncState(args *deploymentspb.SyncVersionStateUpdateArgs) error { - if d.deleteVersion { - // Deployment workflow should not call this function if version is marked for deletion, but still checking for safety. - return temporal.NewNonRetryableApplicationError(errVersionDeleted, errVersionDeleted, nil) + if err := d.ensureNotDeleted(); err != nil { + return err } + res := &deploymentspb.SyncVersionStateResponse{VersionState: d.VersionState} if args.GetRoutingUpdateTime().AsTime().Equal(d.GetVersionState().GetRoutingUpdateTime().AsTime()) { return temporal.NewApplicationError("no change", errNoChangeType, res) @@ -596,6 +633,10 @@ func (d *VersionWorkflowRunner) validateSyncState(args *deploymentspb.SyncVersio //nolint:staticcheck // SA1019 func (d *VersionWorkflowRunner) handleSyncState(ctx workflow.Context, args *deploymentspb.SyncVersionStateUpdateArgs) (*deploymentspb.SyncVersionStateResponse, error) { + if err := d.preUpdateChecks(ctx); err != nil { + return nil, err + } + // use lock to enforce only one update at a time err := d.lock.Lock(ctx) if err != nil { @@ -613,11 +654,13 @@ func (d *VersionWorkflowRunner) handleSyncState(ctx workflow.Context, args *depl return nil, err } - // wait until deployment workflow started - err = workflow.Await(ctx, func() bool { return d.VersionState.StartedDeploymentWorkflow }) - if err != nil { - d.logger.Error("Update canceled before worker deployment workflow started") - return nil, serviceerror.NewDeadlineExceeded("Update canceled before worker deployment workflow started") + if !d.hasMinVersion(VersionDataRevisionNumber) { + // wait until deployment workflow started + err = workflow.Await(ctx, func() bool { return d.VersionState.StartedDeploymentWorkflow }) + if err != nil { + d.logger.Error("Update canceled before worker deployment workflow started") + return nil, serviceerror.NewDeadlineExceeded("Update canceled before worker deployment workflow started") + } } state := d.GetVersionState() @@ -681,6 +724,20 @@ func (d *VersionWorkflowRunner) handleSyncState(ctx workflow.Context, args *depl }, nil } +func (d *VersionWorkflowRunner) preUpdateChecks(ctx workflow.Context) error { + err := d.ensureNotDeleted() + if err != nil { + return err + } + + if workflow.GetInfo(ctx).GetContinueAsNewSuggested() { + // History is too large, do not accept new updates until wf CaNs. + // Since this needs workflow context we cannot do it in validators. + return temporal.NewApplicationError(errLongHistory, errLongHistory) + } + return nil +} + // updateStateFromRoutingConfig updates the version state based on routing config received from Deployment. // returns true if any information that affects version data to be synced in TQs was changed. func (d *VersionWorkflowRunner) updateStateFromRoutingConfig( @@ -812,8 +869,6 @@ func (d *VersionWorkflowRunner) refreshDrainageInfo(ctx workflow.Context) { return } - d.metrics.Counter(metrics.WorkerDeploymentVersionVisibilityQueryCount.Name()).Inc(1) - if d.hasMinVersion(VersionDataRevisionNumber) { // Need to lock so there is no race condition with setCurrent/Ramping if err = d.lock.Lock(ctx); err != nil { diff --git a/service/worker/workerdeployment/workflow.go b/service/worker/workerdeployment/workflow.go index c44109a52e..71453c0afa 100644 --- a/service/worker/workerdeployment/workflow.go +++ b/service/worker/workerdeployment/workflow.go @@ -47,9 +47,9 @@ type ( stateChanged bool signalHandler *SignalHandler forceCAN bool - // 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. + // Tracks the version of the deployment workflow when a particular run of a workflow starts base on the dynamic config of the + // worker who completes the first task of the workflow. `workflowVersion` remains the same until the workflow CaNs when it + // will get another chance to pick the latest manager version. workflowVersion DeploymentWorkflowVersion } ) @@ -148,6 +148,7 @@ func (d *WorkflowRunner) handlePropagationComplete(completion *deploymentspb.Pro d.logger.Error("Received propagation complete signal, but no in-progress propagations found", "revision", revisionNumber, "build_id", buildID) + return } // Remove this revision from in-progress tracking for this build @@ -304,18 +305,6 @@ func (d *WorkflowRunner) run(ctx workflow.Context) error { return err } - // to-be-deprecated - if err := workflow.SetUpdateHandlerWithOptions( - ctx, - AddVersionToWorkerDeployment, - d.handleAddVersionToWorkerDeployment, - workflow.UpdateHandlerOptions{ - Validator: d.validateAddVersionToWorkerDeployment, - }, - ); err != nil { - return err - } - if err := workflow.SetUpdateHandlerWithOptions( ctx, DeleteVersion, @@ -393,6 +382,27 @@ func (d *WorkflowRunner) run(ctx workflow.Context) error { return workflow.NewContinueAsNewError(ctx, WorkerDeploymentWorkflowType, d.WorkerDeploymentWorkflowArgs) } +func (d *WorkflowRunner) preUpdateChecks(ctx workflow.Context) error { + err := d.ensureNotDeleted() + if err != nil { + return err + } + + if workflow.GetInfo(ctx).GetContinueAsNewSuggested() { + // History is too large, do not accept new updates until wf CaNs. + // Since this needs workflow context we cannot do it in validators. + return temporal.NewApplicationError(errLongHistory, errLongHistory) + } + return nil +} + +func (d *WorkflowRunner) ensureNotDeleted() error { + if d.deleteDeployment { + return temporal.NewNonRetryableApplicationError(errDeploymentDeleted, errDeploymentDeleted, nil) + } + return nil +} + func (d *WorkflowRunner) addVersionToWorkerDeployment(ctx workflow.Context, args *deploymentspb.AddVersionUpdateArgs) error { if d.State.Versions == nil { return nil @@ -424,6 +434,10 @@ func (d *WorkflowRunner) addVersionToWorkerDeployment(ctx workflow.Context, args } func (d *WorkflowRunner) handleRegisterWorker(ctx workflow.Context, args *deploymentspb.RegisterWorkerInWorkerDeploymentArgs) error { + if err := d.ensureNotDeleted(); err != nil { + return err + } + // use lock to enforce only one update at a time err := d.lock.Lock(ctx) if err != nil { @@ -483,8 +497,17 @@ func (d *WorkflowRunner) validateDeleteDeployment() error { } func (d *WorkflowRunner) handleDeleteDeployment(ctx workflow.Context) error { - // Even if the update doesn't change the state we mark it as dirty because of created history events. - defer d.setStateChanged() + // use lock to enforce only one update at a time + err := d.lock.Lock(ctx) + if err != nil { + d.logger.Error("Could not acquire workflow lock") + return serviceerror.NewDeadlineExceeded("Could not acquire workflow lock") + } + defer func() { + // Even if the update doesn't change the state we mark it as dirty because of created history events. + d.setStateChanged() + d.lock.Unlock() + }() if len(d.State.Versions) == 0 { d.deleteDeployment = true @@ -530,12 +553,19 @@ func (d *WorkflowRunner) validateStateBeforeAcceptingRampingUpdate(args *deploym } func (d *WorkflowRunner) validateSetRampingVersion(args *deploymentspb.SetRampingVersionArgs) error { + if err := d.ensureNotDeleted(); err != nil { + return err + } return d.validateStateBeforeAcceptingRampingUpdate(args) } //revive:disable-next-line:cognitive-complexity //nolint:staticcheck // deprecated stuff will be cleaned func (d *WorkflowRunner) handleSetRampingVersion(ctx workflow.Context, args *deploymentspb.SetRampingVersionArgs) (*deploymentspb.SetRampingVersionResponse, error) { + if err := d.preUpdateChecks(ctx); err != nil { + return nil, err + } + // use lock to enforce only one update at a time err := d.lock.Lock(ctx) if err != nil { @@ -746,9 +776,10 @@ func (d *WorkflowRunner) setRamp( ) } } - - // Erase summary drainage status immediately, so it is not draining/drained. - d.setDrainageStatus(newRampingVersion, enumspb.VERSION_DRAINAGE_STATUS_UNSPECIFIED, routingUpdateTime) + if !asyncMode { + // Erase summary drainage status immediately, so it is not draining/drained. + d.setDrainageStatus(newRampingVersion, enumspb.VERSION_DRAINAGE_STATUS_UNSPECIFIED, routingUpdateTime) + } } setRampUpdateArgs := &deploymentspb.SyncVersionStateUpdateArgs{ @@ -811,9 +842,11 @@ func (d *WorkflowRunner) unsetPreviousRamp( return err } } - // Set summary drainage status immediately to draining. - // We know prevRampingVersion cannot have been current, so it must now be draining - d.setDrainageStatus(prevRampingVersion, enumspb.VERSION_DRAINAGE_STATUS_DRAINING, routingUpdateTime) + if !asyncMode { + // Set summary drainage status immediately to draining. + // We know prevRampingVersion cannot have been current, so it must now be draining + d.setDrainageStatus(prevRampingVersion, enumspb.VERSION_DRAINAGE_STATUS_DRAINING, routingUpdateTime) + } return nil } @@ -829,6 +862,10 @@ func (d *WorkflowRunner) setDrainageStatus(version string, status enumspb.Versio } func (d *WorkflowRunner) validateDeleteVersion(args *deploymentspb.DeleteVersionArgs) error { + if err := d.ensureNotDeleted(); err != nil { + return err + } + if _, ok := d.State.Versions[args.Version]; !ok { return temporal.NewApplicationError("version not found in deployment", errVersionNotFound) } @@ -876,6 +913,10 @@ func (d *WorkflowRunner) deleteVersion(ctx workflow.Context, args *deploymentspb } func (d *WorkflowRunner) handleDeleteVersion(ctx workflow.Context, args *deploymentspb.DeleteVersionArgs) error { + if err := d.preUpdateChecks(ctx); err != nil { + return err + } + // use lock to enforce only one update at a time err := d.lock.Lock(ctx) if err != nil { @@ -912,10 +953,17 @@ func (d *WorkflowRunner) validateStateBeforeAcceptingSetManager(args *deployment } func (d *WorkflowRunner) validateSetManager(args *deploymentspb.SetManagerIdentityArgs) error { + if err := d.ensureNotDeleted(); err != nil { + return err + } return d.validateStateBeforeAcceptingSetManager(args) } func (d *WorkflowRunner) handleSetManager(ctx workflow.Context, args *deploymentspb.SetManagerIdentityArgs) (*deploymentspb.SetManagerIdentityResponse, error) { + if err := d.preUpdateChecks(ctx); err != nil { + return nil, err + } + // use lock to enforce only one update at a time err := d.lock.Lock(ctx) if err != nil { @@ -968,11 +1016,19 @@ func (d *WorkflowRunner) validateStateBeforeAcceptingSetCurrent(args *deployment } func (d *WorkflowRunner) validateSetCurrent(args *deploymentspb.SetCurrentVersionArgs) error { + if err := d.ensureNotDeleted(); err != nil { + return err + } + return d.validateStateBeforeAcceptingSetCurrent(args) } //nolint:staticcheck // deprecated stuff will be cleaned func (d *WorkflowRunner) handleSetCurrent(ctx workflow.Context, args *deploymentspb.SetCurrentVersionArgs) (*deploymentspb.SetCurrentVersionResponse, error) { + if err := d.preUpdateChecks(ctx); err != nil { + return nil, err + } + // use lock to enforce only one update at a time err := d.lock.Lock(ctx) if err != nil { @@ -1118,9 +1174,11 @@ func (d *WorkflowRunner) handleSetCurrent(ctx workflow.Context, args *deployment if _, err := d.syncVersion(ctx, prevCurrentVersion, prevUpdateArgs); err != nil { return nil, err } - // Set summary drainage status immediately to draining. - // We know prevCurrentVersion cannot have been ramping, so it must now be draining - d.setDrainageStatus(prevCurrentVersion, enumspb.VERSION_DRAINAGE_STATUS_DRAINING, updateTime) + if !asyncMode { + // Set summary drainage status immediately to draining. + // We know prevCurrentVersion cannot have been ramping, so it must now be draining + d.setDrainageStatus(prevCurrentVersion, enumspb.VERSION_DRAINAGE_STATUS_DRAINING, updateTime) + } } //nolint:staticcheck // deprecated stuff will be cleaned @@ -1192,28 +1250,6 @@ func (d *WorkflowRunner) getMaxVersions(ctx workflow.Context) int { return maxVersions } -// to-be-deprecated -func (d *WorkflowRunner) handleAddVersionToWorkerDeployment(ctx workflow.Context, args *deploymentspb.AddVersionUpdateArgs) error { - // Even if the update doesn't change the state we mark it as dirty because of created history events. - defer d.setStateChanged() - - maxVersions := d.getMaxVersions(ctx) - - if len(d.State.Versions) >= maxVersions { - err := d.tryDeleteVersion(ctx) - if err != nil { - return temporal.NewApplicationError(fmt.Sprintf("cannot add version, already at max versions %d", maxVersions), errTooManyVersions) - } - } - - d.State.Versions[args.Version] = &deploymentspb.WorkerDeploymentVersionSummary{ - Version: args.Version, - CreateTime: args.CreateTime, - } - - return nil -} - func (d *WorkflowRunner) tryDeleteVersion(ctx workflow.Context) error { sortedSummaries := d.sortedSummaries() for _, v := range sortedSummaries { diff --git a/tests/worker_deployment_test.go b/tests/worker_deployment_test.go index 05a2205eee..da637d88bf 100644 --- a/tests/worker_deployment_test.go +++ b/tests/worker_deployment_test.go @@ -19,6 +19,8 @@ import ( taskqueuepb "go.temporal.io/api/taskqueue/v1" "go.temporal.io/api/workflowservice/v1" sdkworker "go.temporal.io/sdk/worker" + "go.temporal.io/server/api/matchingservice/v1" + "go.temporal.io/server/common" "go.temporal.io/server/common/dynamicconfig" "go.temporal.io/server/common/testing/testhooks" "go.temporal.io/server/common/testing/testvars" @@ -38,12 +40,12 @@ type ( func TestWorkerDeploymentSuite(t *testing.T) { t.Parallel() - t.Run("sync", func(t *testing.T) { - suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.InitialVersion}) - }) - t.Run("async", func(t *testing.T) { - suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.AsyncSetCurrentAndRamping}) - }) + //t.Run("sync", func(t *testing.T) { + // suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.InitialVersion}) + //}) + //t.Run("async", func(t *testing.T) { + // suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.AsyncSetCurrentAndRamping}) + //}) t.Run("version_rev_no", func(t *testing.T) { suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.VersionDataRevisionNumber}) }) @@ -71,7 +73,7 @@ func (s *WorkerDeploymentSuite) SetupSuite() { dynamicconfig.MatchingMaxTaskQueuesInDeploymentVersion.Key(): 1000, dynamicconfig.VisibilityPersistenceSlowQueryThreshold.Key(): 60 * time.Second, - dynamicconfig.WorkflowExecutionMaxInFlightUpdates.Key(): 1000, + //dynamicconfig.WorkflowExecutionMaxInFlightUpdates.Key(): 1000, })) } @@ -1872,8 +1874,8 @@ func (s *WorkerDeploymentSuite) TestConcurrentPollers_DifferentTaskQueues_SameVe // start 10 different pollers each polling on a different task queue but belonging to the same version tv := testvars.New(s) - versions := 10 - for i := 0; i < versions; i++ { + tqs := 10 + for i := 0; i < tqs; i++ { go s.startVersionWorkflow(ctx, tv.WithTaskQueueNumber(i)) } @@ -1881,7 +1883,7 @@ func (s *WorkerDeploymentSuite) TestConcurrentPollers_DifferentTaskQueues_SameVe s.setCurrentVersion(ctx, tv, false, "") // verify that the task queues, eventually, have this version as the current version in their versioning info - for i := 0; i < versions; i++ { + for i := 0; i < tqs; i++ { s.verifyTaskQueueVersioningInfo(ctx, tv.WithTaskQueueNumber(i).TaskQueue(), tv.DeploymentVersionString(), "", 0) } } @@ -1987,6 +1989,160 @@ func (s *WorkerDeploymentSuite) TestSetRampingVersion_Concurrent_SameVersion_NoU s.Equal(tv.DeploymentVersionString(), resp.GetWorkerDeploymentInfo().GetRoutingConfig().GetRampingVersion()) } +// TODO: this test reliably produces a rare error seemingly about speculative tasks. use it for debugging the error +// ex: "history_events: premature end of stream, expectedLastEventID=13 but no more events after eventID=11" +// (error does not seems to be related to versioning) +func (s *WorkerDeploymentSuite) TestConcurrentPollers_ManyTaskQueues_RapidRoutingUpdates_RevisionConsistency() { + // This test should work for InitialVersion, but it takes much longer (4m vs 1m15s vs 55s, in order, for 50 TQs). + // Also skipping for AsyncSetCurrentAndRampingVersion, to reduce flake chance. + s.skipBeforeVersion(workerdeployment.VersionDataRevisionNumber) + + // Start pollers on many task queues across 3 versions + numTaskQueues := 50 + numVersions := 3 + syncBatchSize := 2 // reducing batch size to cause more delay + numOperations := 20 + + s.OverrideDynamicConfig(dynamicconfig.MatchingMaxTaskQueuesInDeploymentVersion, numTaskQueues) + s.InjectHook(testhooks.TaskQueuesInDeploymentSyncBatchSize, syncBatchSize) + s.InjectHook(testhooks.MatchingTaskQueueRegistrationBackoffDuration, time.Millisecond*500) + + // Need to increase max pending activities because it is set only to 10 for functional tests. it's 2000 by default. + s.OverrideDynamicConfig(dynamicconfig.NumPendingActivitiesLimitError, numOperations) + + tv := testvars.New(s) + dn := tv.DeploymentVersion().GetDeploymentName() + start := time.Now() + + // For each version send pollers regularly until all TQs are registered from DescribeVersion POV + for i := 0; i < numVersions; i++ { + pollCtx, cancelPollers := context.WithTimeout(context.Background(), 5*time.Minute) + + sendPollers := func() { + for j := 0; j < numTaskQueues; j++ { + go s.pollFromDeployment(pollCtx, tv.WithBuildIDNumber(i).WithTaskQueueNumber(j)) + } + } + + sendPollers() + + // Send new pollers regularly, this is needed because the registration might take more time than initial pollers + t := time.NewTicker(10 * time.Second) + go func() { + select { + case <-t.C: + sendPollers() + } + }() + + // Wait for all task queues to be added to versions + + // Wait for the versions to be created + s.EventuallyWithT(func(t *assert.CollectT) { + a := require.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeployment(pollCtx, &workflowservice.DescribeWorkerDeploymentRequest{ + Namespace: s.Namespace().String(), + DeploymentName: dn, + }) + a.NoError(err) + a.NotNil(resp.GetWorkerDeploymentInfo()) + a.Equal(i+1, len(resp.GetWorkerDeploymentInfo().GetVersionSummaries())) + }, 3*time.Minute, 500*time.Millisecond) + + fmt.Printf(">>> Time taken version %d added: %v\n", i, time.Since(start)) + + s.EventuallyWithT(func(t *assert.CollectT) { + a := require.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeploymentVersion(pollCtx, &workflowservice.DescribeWorkerDeploymentVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentVersion: tv.WithBuildIDNumber(i).ExternalDeploymentVersion(), + }) + a.NoError(err) + a.Equal(numTaskQueues, len(resp.GetVersionTaskQueues())) + }, 5*time.Minute, 1000*time.Millisecond) + + t.Stop() + cancelPollers() + + fmt.Printf(">>> Time taken registration for version %d: %v\n", i, time.Since(start)) + } + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) + defer cancel() + + // Rapidly perform 20 setCurrent and setRamping operations, each targeting one of the 3 versions + for i := 0; i < numOperations; i++ { + // Alternate between setCurrent and setRamping + targetVersion := i % numVersions + versionTV := tv.WithBuildIDNumber(targetVersion) + for { + var err error + if i%2 == 0 { + // setCurrent operation + _, err = s.FrontendClient().SetWorkerDeploymentCurrentVersion(ctx, &workflowservice.SetWorkerDeploymentCurrentVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: dn, + BuildId: versionTV.DeploymentVersion().GetBuildId(), + IgnoreMissingTaskQueues: true, + Identity: tv.ClientIdentity(), + }) + } else { + // setRamping operation + _, err = s.FrontendClient().SetWorkerDeploymentRampingVersion(ctx, &workflowservice.SetWorkerDeploymentRampingVersionRequest{ + Namespace: s.Namespace().String(), + DeploymentName: dn, + BuildId: versionTV.DeploymentVersion().GetBuildId(), + IgnoreMissingTaskQueues: true, + Identity: tv.ClientIdentity(), + Percentage: float32(50 + (i % 50)), + }) + } + if common.IsResourceExhausted(err) { + fmt.Printf("ResourceExhausted error, retrying operation %d\n", i) + time.Sleep(100 * time.Millisecond) + continue + } + s.NoError(err) + break + } + fmt.Printf(">>> Time taken operation %d: %v\n", i, time.Since(start)) + } + + fmt.Printf(">>> Time taken operations: %v\n", time.Since(start)) + + // Wait for the routing update status to be completed + var latestRoutingConfig *deploymentpb.RoutingConfig + s.EventuallyWithT(func(t *assert.CollectT) { + a := require.New(t) + resp, err := s.FrontendClient().DescribeWorkerDeployment(ctx, &workflowservice.DescribeWorkerDeploymentRequest{ + Namespace: s.Namespace().String(), + DeploymentName: dn, + }) + a.NoError(err) + a.NotNil(resp.GetWorkerDeploymentInfo()) + a.Equal(enumspb.ROUTING_CONFIG_UPDATE_STATE_COMPLETED, resp.GetWorkerDeploymentInfo().GetRoutingConfigUpdateState()) + latestRoutingConfig = resp.GetWorkerDeploymentInfo().GetRoutingConfig() + }, 120*time.Second, 1*time.Second) + + fmt.Printf(">>> Time taken propagation: %v\n", time.Since(start)) + + // Verify that the routing info revision number in each of the task queues matches the latest revision number + // Note: The public API doesn't expose revision numbers at the task queue level, so we verify that the + // versioning info has been propagated correctly by checking the current/ramping versions + for j := 0; j < numTaskQueues; j++ { + tqTV := tv.WithTaskQueueNumber(j) + tqUD, err := s.GetTestCluster().MatchingClient().GetTaskQueueUserData(ctx, &matchingservice.GetTaskQueueUserDataRequest{ + NamespaceId: s.NamespaceID().String(), + TaskQueueType: tqTypeWf, + TaskQueue: tqTV.TaskQueue().GetName(), + }) + s.NoError(err) + s.Equal(1, len(tqUD.GetUserData().GetData().GetPerType())) + s.Equal(1, len(tqUD.GetUserData().GetData().GetPerType()[int32(tqTypeWf)].GetDeploymentData().GetDeploymentsData())) + s.ProtoEqual(latestRoutingConfig, tqUD.GetUserData().GetData().GetPerType()[int32(tqTypeWf)].GetDeploymentData().GetDeploymentsData()[dn].GetRoutingConfig()) + } +} + func (s *WorkerDeploymentSuite) TestResourceExhaustedErrors_Converted_To_ReadableMessage() { s.OverrideDynamicConfig(dynamicconfig.WorkflowExecutionMaxInFlightUpdates, 2) // Lowering the limit to encounter ResourceExhausted errors @@ -3365,3 +3521,15 @@ func (s *WorkerDeploymentSuite) Name() string { ) return strings.Replace(short, ".", "|", -1) } + +func (s *WorkerDeploymentSuite) skipBeforeVersion(version workerdeployment.DeploymentWorkflowVersion) { + if s.workflowVersion < version { + s.T().Skipf("test supports version %v and newer", version) + } +} + +func (s *WorkerDeploymentSuite) skipFromVersion(version workerdeployment.DeploymentWorkflowVersion) { + if s.workflowVersion >= version { + s.T().Skipf("test supports version older than %v", version) + } +} From c20718731690536dcc27c2ccbf2103bd9ba732ad Mon Sep 17 00:00:00 2001 From: ShahabT Date: Fri, 12 Dec 2025 20:05:15 -0800 Subject: [PATCH 2/2] Fix tests and some refactoring --- common/testing/testlogger/testlogger.go | 2 +- config/dynamicconfig/development-sql.yaml | 16 +- service/worker/workerdeployment/activities.go | 42 ++- service/worker/workerdeployment/client.go | 356 +----------------- service/worker/workerdeployment/fx.go | 2 + ...replay_deployment-workflow_initial.json.gz | Bin 3772 -> 0 bytes ...eplay_deployment-workflow_maprange.json.gz | Bin 5725 -> 0 bytes ...ay_worker_deployment_wf_1748123053.json.gz | Bin 1963 -> 0 bytes ...9b0571-2ff6-7e21-bde0-068c74babed3.json.gz | Bin 4143 -> 0 bytes ...44c171-8e69-435b-9665-a8fbe2c654b7.json.gz | Bin 3730 -> 0 bytes ...65e55c-b84a-483d-aad5-bccf85c1e61c.json.gz | Bin 3418 -> 0 bytes ...b48846-7f6d-448d-97d5-83a7eb9dde36.json.gz | Bin 3630 -> 0 bytes ...3a5a49-1aca-4041-8b20-0f2dd0d20111.json.gz | Bin 3687 -> 0 bytes ...fd0a93-3fe3-4d51-b14e-43884c2edd59.json.gz | Bin 3601 -> 0 bytes ...2a9fc3-bac3-4fb6-8288-70337844d695.json.gz | Bin 3765 -> 0 bytes ...7eb2e7-09f8-40d4-816a-a2670fcb6c3d.json.gz | Bin 4736 -> 0 bytes ...ed4344-bbd3-4f0e-9fb6-a802a777e89b.json.gz | Bin 2483 -> 0 bytes ...a0028c-eb47-4bc6-9142-6d2ac5397261.json.gz | Bin 3791 -> 0 bytes ...3ecdd7-3900-4c47-8ea4-519dc09ae352.json.gz | Bin 3778 -> 0 bytes ...9b0571-2b9f-718a-9977-8d7671b071ab.json.gz | Bin 3932 -> 0 bytes ...a6fc1a-b364-4b35-92e3-f2ea041e72bf.json.gz | Bin 2912 -> 0 bytes ...c3e0a8-3ce8-4ddb-ba6e-adf4931e881f.json.gz | Bin 4124 -> 0 bytes ...ed8fba-920e-45c4-8759-8ee9599109d4.json.gz | Bin 3855 -> 0 bytes ...fecbcd-5d15-44a2-8c6d-7cbb4187b276.json.gz | Bin 3947 -> 0 bytes ...62c950-252c-446d-b460-14cbcea80857.json.gz | Bin 4015 -> 0 bytes ...672cd2-eecd-442f-9fcd-e6206768926a.json.gz | Bin 4088 -> 0 bytes ...da9742-adb0-4797-9fd7-b5cb7e37b5fb.json.gz | Bin 2777 -> 0 bytes ...6e7a31-c5bd-4460-b7a0-05169c048ac0.json.gz | Bin 2320 -> 0 bytes ...09581b-0521-4754-a29b-e3a135b807f2.json.gz | Bin 3584 -> 0 bytes ...c46524-1c7b-4463-8213-39f6f4dd31e4.json.gz | Bin 2818 -> 0 bytes ...3e54fa-f4f0-43eb-9bf4-c9563419d263.json.gz | Bin 2967 -> 0 bytes ...820cde-82e1-4b72-931b-88bc479991ec.json.gz | Bin 2892 -> 0 bytes ...aac9f0-7797-4456-9ba6-29bf6c7ee38d.json.gz | Bin 2633 -> 0 bytes ...40e74e-739f-4aa0-a986-bc03051d84e2.json.gz | Bin 3920 -> 0 bytes ...93628e-97da-4130-890b-5154ea122e85.json.gz | Bin 2917 -> 0 bytes ...603c68-f433-4554-8cf1-1a2ceb090f87.json.gz | Bin 2673 -> 0 bytes ...6768a2-ab3a-428e-8159-33cbefcc7ec1.json.gz | Bin 3780 -> 0 bytes ...e589f1-064d-492f-9bf4-634ff49e1489.json.gz | Bin 2683 -> 0 bytes .../expected_counts.txt | 2 +- ...9b1555-4606-7ed4-96f0-2378b646d14d.json.gz | Bin 0 -> 3588 bytes ...ab002f-0d3a-4ee5-88dd-0e79ec0d1d67.json.gz | Bin 0 -> 3790 bytes ...ea3e44-70f4-4e35-9c01-11772eb39a33.json.gz | Bin 0 -> 3580 bytes ...27e6e0-e78c-4bec-86f1-b251cf2eccaf.json.gz | Bin 0 -> 3677 bytes ...4892fb-9615-4c84-9300-0677505ff9e5.json.gz | Bin 0 -> 4658 bytes ...d2427e-f09f-4f93-9618-31af002ae6a9.json.gz | Bin 0 -> 3752 bytes ...39ca24-abf1-4146-9e1d-ca49d2785d54.json.gz | Bin 0 -> 3644 bytes ...5e9798-5fa4-4f2e-af4a-f91036064b0b.json.gz | Bin 0 -> 2417 bytes ...a7f46a-6ccd-4f54-a5e1-536b9447ce0f.json.gz | Bin 0 -> 3578 bytes ...ffa73b-f0be-4059-bb6b-bdca1e4a9553.json.gz | Bin 0 -> 3384 bytes ...3aef46-0d38-49ad-8eaf-6eefb1683095.json.gz | Bin 0 -> 3731 bytes ...9b1555-41fb-7af4-984a-48b0b548e052.json.gz | Bin 0 -> 3886 bytes ...41674c-b31c-4646-adba-bf2821320152.json.gz | Bin 0 -> 2286 bytes ...178650-bbf2-4ccf-ac3c-3d92c90c4c36.json.gz | Bin 0 -> 3897 bytes ...ba0b7b-c009-4e24-8501-32abb53408f8.json.gz | Bin 0 -> 2903 bytes ...f2aa05-91c7-4741-8bd0-c50aabf0ec1a.json.gz | Bin 0 -> 4056 bytes ...99e468-6c15-45ce-a9bb-1eabdc07b11d.json.gz | Bin 0 -> 2602 bytes ...862798-4968-4a9e-867c-588181be3cfc.json.gz | Bin 0 -> 2651 bytes ...ee4ea7-f980-404c-98e6-75d4417ccef6.json.gz | Bin 0 -> 2788 bytes ...eeeb0d-15f1-48f9-9d9c-f4bb20403f31.json.gz | Bin 0 -> 2749 bytes ...116cfa-ca67-40a8-a89d-02934b8fc4c0.json.gz | Bin 0 -> 3990 bytes ...8bc2bb-589b-4eb9-8571-1d83d71b77d8.json.gz | Bin 0 -> 4092 bytes ...1e16da-9268-44c7-9b3d-d4aebb2f6f67.json.gz | Bin 0 -> 3750 bytes ...d86583-748b-4f5c-b757-78760bde1614.json.gz | Bin 0 -> 3934 bytes ...534f99-cd6d-4a03-816d-b7c754e60ebe.json.gz | Bin 0 -> 3827 bytes ...aef8bd-a07d-4191-a30c-5781321e1b79.json.gz | Bin 0 -> 3540 bytes ...390f52-eddb-4a3f-b8c8-8cc599c03acb.json.gz | Bin 0 -> 2858 bytes ...8f813b-0c5c-4c7f-874f-900e4ccac3f9.json.gz | Bin 0 -> 2889 bytes ...1f1a81-884c-4952-92ba-7518dfa90739.json.gz | Bin 0 -> 2935 bytes ...449ab5-e1c8-48ee-b192-c123bcba85d2.json.gz | Bin 0 -> 2681 bytes service/worker/workerdeployment/util.go | 262 ++++++++++++- .../workerdeployment/version_activities.go | 2 - .../workerdeployment/version_workflow.go | 18 +- .../workerdeployment/version_workflow_test.go | 9 +- service/worker/workerdeployment/workflow.go | 17 +- tests/worker_deployment_test.go | 35 +- 75 files changed, 375 insertions(+), 388 deletions(-) delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v0/run_1753913370/replay_deployment-workflow_initial.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v0/run_1753913370/replay_deployment-workflow_maprange.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v0/run_1753913370/replay_worker_deployment_wf_1748123053.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_019b0571-2ff6-7e21-bde0-068c74babed3.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_3144c171-8e69-435b-9665-a8fbe2c654b7.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_5065e55c-b84a-483d-aad5-bccf85c1e61c.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_56b48846-7f6d-448d-97d5-83a7eb9dde36.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_763a5a49-1aca-4041-8b20-0f2dd0d20111.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_bcfd0a93-3fe3-4d51-b14e-43884c2edd59.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_d22a9fc3-bac3-4fb6-8288-70337844d695.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_d37eb2e7-09f8-40d4-816a-a2670fcb6c3d.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_f2ed4344-bbd3-4f0e-9fb6-a802a777e89b.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_f4a0028c-eb47-4bc6-9142-6d2ac5397261.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_fd3ecdd7-3900-4c47-8ea4-519dc09ae352.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_019b0571-2b9f-718a-9977-8d7671b071ab.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_0ea6fc1a-b364-4b35-92e3-f2ea041e72bf.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_10c3e0a8-3ce8-4ddb-ba6e-adf4931e881f.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_28ed8fba-920e-45c4-8759-8ee9599109d4.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_37fecbcd-5d15-44a2-8c6d-7cbb4187b276.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_3f62c950-252c-446d-b460-14cbcea80857.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_42672cd2-eecd-442f-9fcd-e6206768926a.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_4bda9742-adb0-4797-9fd7-b5cb7e37b5fb.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_6e6e7a31-c5bd-4460-b7a0-05169c048ac0.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_7809581b-0521-4754-a29b-e3a135b807f2.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_7ac46524-1c7b-4463-8213-39f6f4dd31e4.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_7b3e54fa-f4f0-43eb-9bf4-c9563419d263.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_8e820cde-82e1-4b72-931b-88bc479991ec.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_a6aac9f0-7797-4456-9ba6-29bf6c7ee38d.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c740e74e-739f-4aa0-a986-bc03051d84e2.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c793628e-97da-4130-890b-5154ea122e85.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c8603c68-f433-4554-8cf1-1a2ceb090f87.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c86768a2-ab3a-428e-8159-33cbefcc7ec1.json.gz delete mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_e4e589f1-064d-492f-9bf4-634ff49e1489.json.gz rename service/worker/workerdeployment/replaytester/testdata/v2/{run_1765322898 => run_1765589504}/expected_counts.txt (72%) create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_019b1555-4606-7ed4-96f0-2378b646d14d.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_10ab002f-0d3a-4ee5-88dd-0e79ec0d1d67.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_14ea3e44-70f4-4e35-9c01-11772eb39a33.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_1a27e6e0-e78c-4bec-86f1-b251cf2eccaf.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_1c4892fb-9615-4c84-9300-0677505ff9e5.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_27d2427e-f09f-4f93-9618-31af002ae6a9.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_8139ca24-abf1-4146-9e1d-ca49d2785d54.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_a85e9798-5fa4-4f2e-af4a-f91036064b0b.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_d9a7f46a-6ccd-4f54-a5e1-536b9447ce0f.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_dfffa73b-f0be-4059-bb6b-bdca1e4a9553.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_e23aef46-0d38-49ad-8eaf-6eefb1683095.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_019b1555-41fb-7af4-984a-48b0b548e052.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_0641674c-b31c-4646-adba-bf2821320152.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_08178650-bbf2-4ccf-ac3c-3d92c90c4c36.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_22ba0b7b-c009-4e24-8501-32abb53408f8.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_23f2aa05-91c7-4741-8bd0-c50aabf0ec1a.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_2899e468-6c15-45ce-a9bb-1eabdc07b11d.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_33862798-4968-4a9e-867c-588181be3cfc.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_42ee4ea7-f980-404c-98e6-75d4417ccef6.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_55eeeb0d-15f1-48f9-9d9c-f4bb20403f31.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_58116cfa-ca67-40a8-a89d-02934b8fc4c0.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_608bc2bb-589b-4eb9-8571-1d83d71b77d8.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_6a1e16da-9268-44c7-9b3d-d4aebb2f6f67.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_71d86583-748b-4f5c-b757-78760bde1614.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_ca534f99-cd6d-4a03-816d-b7c754e60ebe.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_deaef8bd-a07d-4191-a30c-5781321e1b79.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_e9390f52-eddb-4a3f-b8c8-8cc599c03acb.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_f18f813b-0c5c-4c7f-874f-900e4ccac3f9.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_f41f1a81-884c-4952-92ba-7518dfa90739.json.gz create mode 100644 service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_f9449ab5-e1c8-48ee-b192-c123bcba85d2.json.gz diff --git a/common/testing/testlogger/testlogger.go b/common/testing/testlogger/testlogger.go index b234a1286b..4a3b66a350 100644 --- a/common/testing/testlogger/testlogger.go +++ b/common/testing/testlogger/testlogger.go @@ -218,7 +218,7 @@ func NewTestLogger(t TestingT, mode Mode, opts ...LoggerOption) *TestLogger { state: &sharedTestLoggerState{ t: t, logExpectations: false, - level: zapcore.FatalLevel, + level: zapcore.DebugLevel, logCaller: true, mode: mode, }, diff --git a/config/dynamicconfig/development-sql.yaml b/config/dynamicconfig/development-sql.yaml index ea01750910..7861e96772 100644 --- a/config/dynamicconfig/development-sql.yaml +++ b/config/dynamicconfig/development-sql.yaml @@ -31,14 +31,14 @@ ### Worker Versioning Replay Test configs ### uncomment and set the right deploymentWorkflowVersion # -#matching.deploymentWorkflowVersion: -# - value: 2 # put the integer value of the workflow version you want to target (enum DeploymentWorkflowVersion) -#matching.PollerHistoryTTL: -# - value: 1s -#matching.wv.VersionDrainageStatusVisibilityGracePeriod: -# - value: 5s -#matching.wv.VersionDrainageStatusRefreshInterval: -# - value: 5s +matching.deploymentWorkflowVersion: + - value: 2 # put the integer value of the workflow version you want to target (enum DeploymentWorkflowVersion) +matching.PollerHistoryTTL: + - value: 1s +matching.wv.VersionDrainageStatusVisibilityGracePeriod: + - value: 5s +matching.wv.VersionDrainageStatusRefreshInterval: + - value: 5s # ### END of Worker Versioning Replay Test configs diff --git a/service/worker/workerdeployment/activities.go b/service/worker/workerdeployment/activities.go index 19b4cfff9d..0b494349c9 100644 --- a/service/worker/workerdeployment/activities.go +++ b/service/worker/workerdeployment/activities.go @@ -3,14 +3,19 @@ package workerdeployment import ( "cmp" "context" + "fmt" "sync" enumspb "go.temporal.io/api/enums/v1" + updatepb "go.temporal.io/api/update/v1" "go.temporal.io/sdk/activity" deploymentspb "go.temporal.io/server/api/deployment/v1" + "go.temporal.io/server/api/historyservice/v1" "go.temporal.io/server/api/matchingservice/v1" "go.temporal.io/server/common/namespace" "go.temporal.io/server/common/resource" + "go.temporal.io/server/common/sdk" + "go.temporal.io/server/common/worker_versioning" ) type ( @@ -18,6 +23,7 @@ type ( namespace *namespace.Namespace deploymentClient Client matchingClient resource.MatchingClient + historyClient historyservice.HistoryServiceClient } ) @@ -141,20 +147,42 @@ func (a *Activities) IsVersionMissingTaskQueues(ctx context.Context, args *deplo } func (a *Activities) DeleteWorkerDeploymentVersion(ctx context.Context, args *deploymentspb.DeleteVersionActivityArgs) error { + fmt.Printf("act Deleting version %s from deployment %s\n", args.Version, args.DeploymentName) identity := "worker-deployment workflow " + activity.GetInfo(ctx).WorkflowExecution.ID - err := a.deploymentClient.DeleteVersionFromWorkerDeployment( + versionObj, err := worker_versioning.WorkerDeploymentVersionFromStringV31(args.Version) + if err != nil { + return err + } + + workflowID := GenerateVersionWorkflowID(args.DeploymentName, versionObj.GetBuildId()) + updatePayload, err := sdk.PreferProtoDataConverter.ToPayloads(&deploymentspb.DeleteVersionArgs{ + Identity: identity, + Version: args.Version, + SkipDrainage: args.SkipDrainage, + AsyncPropagation: args.AsyncPropagation, + }) + if err != nil { + return err + } + + outcome, err := updateWorkflow( ctx, + a.historyClient, a.namespace, - args.DeploymentName, - args.Version, - identity, - args.RequestId, - args.SkipDrainage, - args.AsyncPropagation, + workflowID, + &updatepb.Request{ + Input: &updatepb.Input{Name: DeleteVersion, Args: updatePayload}, + Meta: &updatepb.Meta{UpdateId: args.RequestId, Identity: identity}, + }, ) if err != nil { return err } + + err = extractApplicationErrorOrInternal(outcome.GetFailure()) + if err != nil { + return err + } return nil } diff --git a/service/worker/workerdeployment/client.go b/service/worker/workerdeployment/client.go index 50b2e5209a..9084398a18 100644 --- a/service/worker/workerdeployment/client.go +++ b/service/worker/workerdeployment/client.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "sort" - "strings" "time" "github.com/dgryski/go-farm" @@ -29,18 +28,12 @@ import ( "go.temporal.io/server/common/log/tag" "go.temporal.io/server/common/metrics" "go.temporal.io/server/common/namespace" - "go.temporal.io/server/common/payload" "go.temporal.io/server/common/persistence/visibility/manager" - "go.temporal.io/server/common/primitives" "go.temporal.io/server/common/resource" "go.temporal.io/server/common/sdk" - "go.temporal.io/server/common/searchattribute" "go.temporal.io/server/common/searchattribute/sadefs" "go.temporal.io/server/common/testing/testhooks" "go.temporal.io/server/common/worker_versioning" - "go.temporal.io/server/service/history/api" - "go.temporal.io/server/service/history/consts" - "go.temporal.io/server/service/history/workflow/update" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -156,17 +149,6 @@ type Client interface { requestID string, ) (*deploymentspb.SyncVersionStateResponse, error) - // Used internally by the Worker Deployment workflow in its DeleteVersion Activity - DeleteVersionFromWorkerDeployment( - ctx context.Context, - namespaceEntry *namespace.Namespace, - deploymentName, version string, - identity string, - requestID string, - skipDrainage bool, - asyncPropagation bool, - ) error - // Used internally by the Drainage workflow (child of Worker Deployment Version workflow) // in its GetVersionDrainageStatus Activity GetVersionDrainageStatus( @@ -240,8 +222,9 @@ func (d *ClientImpl) SetManager( return nil, err } - outcome, err := d.update( + outcome, err := updateWorkflow( ctx, + d.historyClient, namespaceEntry, GenerateDeploymentWorkflowID(request.GetDeploymentName()), &updatepb.Request{ @@ -272,10 +255,6 @@ func (d *ClientImpl) SetManager( } success := outcome.GetSuccess() - if success == nil { - return nil, serviceerror.NewInternal("outcome missing success and failure") - } - if err := sdk.PreferProtoDataConverter.FromPayloads(success, &res); err != nil { return nil, err } @@ -478,7 +457,7 @@ func (d *ClientImpl) UpdateVersionMetadata( } workflowID := GenerateVersionWorkflowID(versionObj.GetDeploymentName(), versionObj.GetBuildId()) - outcome, err := d.update(ctx, namespaceEntry, workflowID, &updatepb.Request{ + outcome, err := updateWorkflow(ctx, d.historyClient, namespaceEntry, workflowID, &updatepb.Request{ Input: &updatepb.Input{Name: UpdateVersionMetadata, Args: updatePayload}, Meta: &updatepb.Meta{UpdateId: requestID, Identity: identity}, }) @@ -489,10 +468,6 @@ func (d *ClientImpl) UpdateVersionMetadata( if failure := outcome.GetFailure(); failure != nil { return nil, serviceerror.NewInternal(failure.Message) } - success := outcome.GetSuccess() - if success == nil { - return nil, serviceerror.NewInternal("outcome missing success and failure") - } var res deploymentspb.UpdateVersionMetadataResponse if err := sdk.PreferProtoDataConverter.FromPayloads(outcome.GetSuccess(), &res); err != nil { @@ -711,8 +686,9 @@ func (d *ClientImpl) SetCurrentVersion( } } else { // we *don't* want to start the Worker Deployment workflow; it should be started by a poller - outcome, err = d.update( + outcome, err = updateWorkflow( ctx, + d.historyClient, namespaceEntry, GenerateDeploymentWorkflowID(deploymentName), &updatepb.Request{ @@ -745,10 +721,6 @@ func (d *ClientImpl) SetCurrentVersion( } success := outcome.GetSuccess() - if success == nil { - return nil, serviceerror.NewInternal("outcome missing success and failure") - } - if err := sdk.PreferProtoDataConverter.FromPayloads(success, &res); err != nil { return nil, err } @@ -825,8 +797,9 @@ func (d *ClientImpl) SetRampingVersion( return nil, err } } else { - outcome, err = d.update( + outcome, err = updateWorkflow( ctx, + d.historyClient, namespaceEntry, workflowID, &updatepb.Request{ @@ -862,10 +835,6 @@ func (d *ClientImpl) SetRampingVersion( } success := outcome.GetSuccess() - if success == nil { - return nil, serviceerror.NewInternal("outcome missing success and failure") - } - if err := sdk.PreferProtoDataConverter.FromPayloads(success, &res); err != nil { return nil, err } @@ -913,8 +882,9 @@ func (d *ClientImpl) DeleteWorkerDeploymentVersion( workflowID := GenerateDeploymentWorkflowID(deploymentName) - outcome, err := d.update( + outcome, err := updateWorkflow( ctx, + d.historyClient, namespaceEntry, workflowID, &updatepb.Request{ @@ -936,11 +906,6 @@ func (d *ClientImpl) DeleteWorkerDeploymentVersion( } return serviceerror.NewInternal(failure.Message) } - - success := outcome.GetSuccess() - if success == nil { - return serviceerror.NewInternal("outcome missing success and failure") - } return nil } @@ -973,8 +938,9 @@ func (d *ClientImpl) DeleteWorkerDeployment( } workflowID := GenerateDeploymentWorkflowID(deploymentName) - outcome, err := d.update( + outcome, err := updateWorkflow( ctx, + d.historyClient, namespaceEntry, workflowID, &updatepb.Request{ @@ -993,12 +959,6 @@ func (d *ClientImpl) DeleteWorkerDeployment( if failure := outcome.GetFailure(); failure != nil { return serviceerror.NewInternal(failure.Message) } - - success := outcome.GetSuccess() - if success == nil { - return serviceerror.NewInternal("outcome missing success and failure") - } - return nil } @@ -1023,7 +983,7 @@ func (d *ClientImpl) StartWorkerDeployment( return err } - startReq := d.makeStartRequest(requestID, workflowID, identity, WorkerDeploymentWorkflowType, namespaceEntry, nil, input) + startReq := makeStartRequest(requestID, workflowID, identity, WorkerDeploymentWorkflowType, namespaceEntry, nil, input) historyStartReq := &historyservice.StartWorkflowExecutionRequest{ NamespaceId: namespaceEntry.ID().String(), @@ -1058,7 +1018,7 @@ func (d *ClientImpl) StartWorkerDeploymentVersion( if err != nil { return err } - startReq := d.makeStartRequest(requestID, workflowID, identity, WorkerDeploymentVersionWorkflowType, namespaceEntry, nil, input) + startReq := makeStartRequest(requestID, workflowID, identity, WorkerDeploymentVersionWorkflowType, namespaceEntry, nil, input) historyStartReq := &historyservice.StartWorkflowExecutionRequest{ NamespaceId: namespaceEntry.ID().String(), @@ -1093,8 +1053,9 @@ func (d *ClientImpl) SyncVersionWorkflowFromWorkerDeployment( workflowID := GenerateVersionWorkflowID(deploymentName, versionObj.GetBuildId()) // updates an already existing deployment version workflow. - outcome, err := d.update( + outcome, err := updateWorkflow( ctx, + d.historyClient, namespaceEntry, workflowID, &updatepb.Request{ @@ -1119,10 +1080,6 @@ func (d *ClientImpl) SyncVersionWorkflowFromWorkerDeployment( } success := outcome.GetSuccess() - if success == nil { - return nil, serviceerror.NewInternal("outcome missing success and failure") - } - var res deploymentspb.SyncVersionStateResponse if err := sdk.PreferProtoDataConverter.FromPayloads(success, &res); err != nil { return nil, err @@ -1130,102 +1087,6 @@ func (d *ClientImpl) SyncVersionWorkflowFromWorkerDeployment( return &res, nil } -func (d *ClientImpl) DeleteVersionFromWorkerDeployment( - ctx context.Context, - namespaceEntry *namespace.Namespace, - deploymentName, version string, - identity string, - requestID string, - skipDrainage bool, - asyncPropagation bool, -) (retErr error) { - //revive:disable-next-line:defer - defer d.convertAndRecordError("DeleteVersionFromWorkerDeployment", &retErr, namespaceEntry.Name(), deploymentName, version, identity, skipDrainage)() - - versionObj, err := worker_versioning.WorkerDeploymentVersionFromStringV31(version) - if err != nil { - return err - } - - workflowID := GenerateVersionWorkflowID(deploymentName, versionObj.GetBuildId()) - updatePayload, err := sdk.PreferProtoDataConverter.ToPayloads(&deploymentspb.DeleteVersionArgs{ - Identity: identity, - Version: version, - SkipDrainage: skipDrainage, - AsyncPropagation: asyncPropagation, - }) - if err != nil { - return err - } - - outcome, err := d.update( - ctx, - namespaceEntry, - workflowID, - &updatepb.Request{ - Input: &updatepb.Input{Name: DeleteVersion, Args: updatePayload}, - Meta: &updatepb.Meta{UpdateId: requestID, Identity: identity}, - }, - ) - if err != nil { - return err - } - - if failure := outcome.GetFailure(); failure != nil { - if strings.Contains(failure.Message, errVersionIsDrainingSuffix) { - return temporal.NewNonRetryableApplicationError(fmt.Sprintf(ErrVersionIsDraining, worker_versioning.WorkerDeploymentVersionToStringV32(versionObj)), errFailedPrecondition, nil) // non-retryable error to stop multiple activity attempts - } else if strings.Contains(failure.Message, errVersionHasPollersSuffix) { - return temporal.NewNonRetryableApplicationError(fmt.Sprintf(ErrVersionHasPollers, worker_versioning.WorkerDeploymentVersionToStringV32(versionObj)), errFailedPrecondition, nil) // non-retryable error to stop multiple activity attempts - } - return serviceerror.NewInternal(failure.Message) - } - - success := outcome.GetSuccess() - if success == nil { - return serviceerror.NewInternal("outcome missing success and failure") - } - return nil -} - -// update updates an already existing deployment version/deployment workflow. -func (d *ClientImpl) update( - ctx context.Context, - namespaceEntry *namespace.Namespace, - workflowID string, - updateRequest *updatepb.Request, -) (*updatepb.Outcome, error) { - updateReq := &historyservice.UpdateWorkflowExecutionRequest{ - NamespaceId: namespaceEntry.ID().String(), - Request: &workflowservice.UpdateWorkflowExecutionRequest{ - Namespace: namespaceEntry.Name().String(), - WorkflowExecution: &commonpb.WorkflowExecution{ - WorkflowId: workflowID, - }, - Request: updateRequest, - WaitPolicy: &updatepb.WaitPolicy{LifecycleStage: enumspb.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED}, - }, - } - - var outcome *updatepb.Outcome - err := backoff.ThrottleRetryContext(ctx, func(ctx context.Context) error { - // historyClient retries internally on retryable rpc errors, we just have to retry on - // successful but un-completed responses. - res, err := d.historyClient.UpdateWorkflowExecution(ctx, updateReq) - if err != nil { - return err - } - - if err := convertUpdateFailure(res.GetResponse()); err != nil { - return err - } - - outcome = res.GetResponse().GetOutcome() - return nil - }, retryPolicy, isRetryableUpdateError) - - return outcome, err -} - func (d *ClientImpl) updateWithStartWorkerDeployment( ctx context.Context, namespaceEntry *namespace.Namespace, @@ -1274,8 +1135,9 @@ func (d *ClientImpl) updateWithStartWorkerDeployment( return nil, err } - return d.updateWithStart( + return updateWorkflowWithStart( ctx, + d.historyClient, namespaceEntry, WorkerDeploymentWorkflowType, workflowID, @@ -1331,8 +1193,9 @@ func (d *ClientImpl) updateWithStartWorkerDeploymentVersion( return nil, err } - return d.updateWithStart( + return updateWorkflowWithStart( ctx, + d.historyClient, namespaceEntry, WorkerDeploymentVersionWorkflowType, workflowID, @@ -1344,166 +1207,6 @@ func (d *ClientImpl) updateWithStartWorkerDeploymentVersion( ) } -func (d *ClientImpl) updateWithStart( - ctx context.Context, - namespaceEntry *namespace.Namespace, - workflowType string, - workflowID string, - memo *commonpb.Memo, - input *commonpb.Payloads, - updateRequest *updatepb.Request, - identity string, - requestID string, -) (*updatepb.Outcome, error) { - // Start workflow execution, if it hasn't already - startReq := d.makeStartRequest(requestID, workflowID, identity, workflowType, namespaceEntry, memo, input) - - updateReq := &workflowservice.UpdateWorkflowExecutionRequest{ - Namespace: namespaceEntry.Name().String(), - WorkflowExecution: &commonpb.WorkflowExecution{ - WorkflowId: workflowID, - }, - Request: updateRequest, - WaitPolicy: &updatepb.WaitPolicy{LifecycleStage: enumspb.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED}, - } - - // This is an atomic operation; if one operation fails, both will. - multiOpReq := &historyservice.ExecuteMultiOperationRequest{ - NamespaceId: namespaceEntry.ID().String(), - WorkflowId: workflowID, - Operations: []*historyservice.ExecuteMultiOperationRequest_Operation{ - { - Operation: &historyservice.ExecuteMultiOperationRequest_Operation_StartWorkflow{ - StartWorkflow: &historyservice.StartWorkflowExecutionRequest{ - NamespaceId: namespaceEntry.ID().String(), - StartRequest: startReq, - }, - }, - }, - { - Operation: &historyservice.ExecuteMultiOperationRequest_Operation_UpdateWorkflow{ - UpdateWorkflow: &historyservice.UpdateWorkflowExecutionRequest{ - NamespaceId: namespaceEntry.ID().String(), - Request: updateReq, - }, - }, - }, - }, - } - - var outcome *updatepb.Outcome - - err := backoff.ThrottleRetryContext(ctx, func(ctx context.Context) error { - // historyClient retries internally on retryable rpc errors, we just have to retry on - // successful but un-completed responses. - res, err := d.historyClient.ExecuteMultiOperation(ctx, multiOpReq) - if err != nil { - return err - } - - // we should get exactly one of each of these - var startRes *historyservice.StartWorkflowExecutionResponse - var updateRes *workflowservice.UpdateWorkflowExecutionResponse - for _, response := range res.Responses { - if sr := response.GetStartWorkflow(); sr != nil { - startRes = sr - } else if ur := response.GetUpdateWorkflow().GetResponse(); ur != nil { - updateRes = ur - } - } - if startRes == nil { - return serviceerror.NewInternal("failed to start deployment workflow") - } - - if err := convertUpdateFailure(updateRes); err != nil { - return err - } - - outcome = updateRes.GetOutcome() - return nil - }, retryPolicy, isRetryableUpdateError) - - return outcome, err -} - -func convertUpdateFailure(updateRes *workflowservice.UpdateWorkflowExecutionResponse) error { - if updateRes == nil { - return serviceerror.NewInternal("failed to update deployment workflow") - } - - if updateRes.Stage != enumspb.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED { - // update not completed, try again - return errUpdateInProgress - } - - if failure := updateRes.GetOutcome().GetFailure(); failure != nil { - if failure.GetApplicationFailureInfo().GetType() == errLongHistory { - // Retriable - return errWorkflowHistoryTooLong - } else if failure.GetApplicationFailureInfo().GetType() == errVersionDeleted { - // Non-retriable - return serviceerror.NewNotFoundf("Worker Deployment Version not found") - } else if failure.GetApplicationFailureInfo().GetType() == errDeploymentDeleted { - // Non-retriable - return serviceerror.NewNotFoundf("Worker Deployment not found") - } else if failure.GetApplicationFailureInfo().GetType() == errFailedPrecondition { - return serviceerror.NewFailedPrecondition(failure.GetMessage()) - } - - // we let caller handle other update failures - } - return nil -} - -func isRetryableQueryError(err error) bool { - return api.IsRetryableError(err) -} - -func isRetryableUpdateError(err error) bool { - if errors.Is(err, errUpdateInProgress) || errors.Is(err, errWorkflowHistoryTooLong) || - err.Error() == consts.ErrWorkflowClosing.Error() || err.Error() == update.AbortedByServerErr.Error() { - return true - } - - var errResourceExhausted *serviceerror.ResourceExhausted - if errors.As(err, &errResourceExhausted) && - (errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT || - errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW) { - // We're hitting the max concurrent update limit for the wf. Retrying will eventually succeed. - return true - } - - var errWfNotReady *serviceerror.WorkflowNotReady - if errors.As(err, &errWfNotReady) { - // Update edge cases, can retry. - return true - } - - // All updates that are admitted as the workflow is closing due to CaN are considered retryable. - // The ErrWorkflowClosing and ResourceExhausted could be nested. - var errMultiOps *serviceerror.MultiOperationExecution - if errors.As(err, &errMultiOps) { - for _, e := range errMultiOps.OperationErrors() { - if errors.As(e, &errResourceExhausted) && - (errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT || - errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW) { - // We're hitting the max concurrent update limit for the wf. Retrying will eventually succeed. - return true - } - if e.Error() == consts.ErrWorkflowClosing.Error() || e.Error() == update.AbortedByServerErr.Error() { - return true - } - } - } - return false -} - -func (d *ClientImpl) buildSearchAttributes() *commonpb.SearchAttributes { - sa := &commonpb.SearchAttributes{} - searchattribute.AddSearchAttribute(&sa, sadefs.TemporalNamespaceDivision, payload.EncodeString(WorkerDeploymentNamespaceDivision)) - return sa -} - func (d *ClientImpl) convertAndRecordError(operation string, retErr *error, args ...any) func() { start := time.Now() return func() { @@ -1948,24 +1651,3 @@ func (d *ClientImpl) makeVersionWorkflowArgs( }, } } - -func (d *ClientImpl) makeStartRequest( - requestID, workflowID, identity, workflowType string, - namespaceEntry *namespace.Namespace, - memo *commonpb.Memo, - input *commonpb.Payloads, -) *workflowservice.StartWorkflowExecutionRequest { - return &workflowservice.StartWorkflowExecutionRequest{ - RequestId: requestID, - Namespace: namespaceEntry.Name().String(), - WorkflowId: workflowID, - WorkflowType: &commonpb.WorkflowType{Name: workflowType}, - TaskQueue: &taskqueuepb.TaskQueue{Name: primitives.PerNSWorkerTaskQueue}, - Input: input, - WorkflowIdReusePolicy: enumspb.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE, - WorkflowIdConflictPolicy: enumspb.WORKFLOW_ID_CONFLICT_POLICY_USE_EXISTING, - SearchAttributes: d.buildSearchAttributes(), - Memo: memo, - Identity: identity, - } -} diff --git a/service/worker/workerdeployment/fx.go b/service/worker/workerdeployment/fx.go index 6e7549cc09..57d4d5e8bf 100644 --- a/service/worker/workerdeployment/fx.go +++ b/service/worker/workerdeployment/fx.go @@ -44,6 +44,7 @@ type ( Logger log.Logger ClientFactory sdk.ClientFactory MatchingClient resource.MatchingClient + HistoryClient resource.HistoryClient WorkerDeploymentClient Client } @@ -135,6 +136,7 @@ func (s *workerComponent) Register(registry sdkworker.Registry, ns *namespace.Na namespace: ns, deploymentClient: s.activityDeps.WorkerDeploymentClient, matchingClient: s.activityDeps.MatchingClient, + historyClient: s.activityDeps.HistoryClient, } registry.RegisterActivity(activities) return nil diff --git a/service/worker/workerdeployment/replaytester/testdata/v0/run_1753913370/replay_deployment-workflow_initial.json.gz b/service/worker/workerdeployment/replaytester/testdata/v0/run_1753913370/replay_deployment-workflow_initial.json.gz deleted file mode 100644 index 46a35d324f834829b4460d59821a727d8f6a3b51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3772 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 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_019b0571-2ff6-7e21-bde0-068c74babed3.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_019b0571-2ff6-7e21-bde0-068c74babed3.json.gz deleted file mode 100644 index 70d74d3740b16826d25f6a3a3b3115165f662284..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4143 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 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_5065e55c-b84a-483d-aad5-bccf85c1e61c.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_5065e55c-b84a-483d-aad5-bccf85c1e61c.json.gz deleted file mode 100644 index 94e6697e0ce522fb2676bf1b7bfba68618b2dfb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3418 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 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_56b48846-7f6d-448d-97d5-83a7eb9dde36.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_56b48846-7f6d-448d-97d5-83a7eb9dde36.json.gz deleted file mode 100644 index 6d04bad9f479d17f148ab4804fd1c6f7e81ffe84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3630 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 AaR2}S diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_763a5a49-1aca-4041-8b20-0f2dd0d20111.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_763a5a49-1aca-4041-8b20-0f2dd0d20111.json.gz deleted file mode 100644 index 7a0f8cde157d5df6ddddce8e0c9aa40c7ccfbc54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3687 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 F002NLOyvLo diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_bcfd0a93-3fe3-4d51-b14e-43884c2edd59.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_bcfd0a93-3fe3-4d51-b14e-43884c2edd59.json.gz deleted file mode 100644 index 0cdf76b49a240efff2e5500c5437e982e8a7a4ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3601 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 X>EPJm<)=s?eth~LhfMhUqgwy~b;AB2 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_d22a9fc3-bac3-4fb6-8288-70337844d695.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_d22a9fc3-bac3-4fb6-8288-70337844d695.json.gz deleted file mode 100644 index 18af278765467fe4fc65a7c10f12c69b3bef0135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3765 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 f#~*&>4tvayN2g*YAL0e^B3Z< diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_d37eb2e7-09f8-40d4-816a-a2670fcb6c3d.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_d37eb2e7-09f8-40d4-816a-a2670fcb6c3d.json.gz deleted file mode 100644 index c6261f424963701f0b80205b1be181dce3972d3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4736 zcmV-`5`XOfkd3Wcv6`NAWPMM8JI#eBSIp){3B
H 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 O|MvelZKXn;lmGx0m`AYy diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_f2ed4344-bbd3-4f0e-9fb6-a802a777e89b.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_f2ed4344-bbd3-4f0e-9fb6-a802a777e89b.json.gz deleted file mode 100644 index 6c70e46b263fd02459780091eb6a60452a4439b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2483 zcmV;k2~74MiwFRdusCS~1MOOAZ==c*{XV}U^5$9Tt7cuT~+V|hiOvzdiCG@>FVm|;_td$ zLHUacRr$Qts(S%0+5rhzf&v67=z#tTxUUTO!jl5Wa^~)c`FJrx?#o^MK_A@855|q! zYP4^R2l-x>db)Dceb97K)#du@*c2wC)fPyG=UM*s)ijDnjvr0s8Md?3i$X1haf*># zEGMRE>{(fg3%S-3Z46p%=k-ngE`&>=QXGt<82UsqPl#dwjtPXvel!pAnTZLGlYBK| zJyqppj_1#>3l$r`%W!tyD&u^KFd@<(mCu`fM_#y)T^F_1!(C7A$qy~1TYu=@s2#Cg zzOWaLvvhaSF`WAmM6Z{;{`tA}l=lp93K2}<&J63T4DAScp<8Tf5ct{P{+eymwYf#B zlR?-IwzmH=W0F7@uK|FX{nTy>^MNtVY|x*hpg(U1jVaXFk$GQBEZR>^gC*PHVAl50 z#12y59;v?FoK3Jn`BtbJ=Kb{(G=!`VggFFeJ_gn706kT9R)5~zPGu!pMRL)|G|V9~ zW~A)hvE8Q;(+L#P^vHSlvG&;3@0e~=Ne9N=Q%54n!DEN&1_NebbeK+Ef%k6IlH6`! z0bUcI`6CnO%eNwCAn#28neWjQ?x~2CuY&ty;DS05f`6B zMeGg9R^1r-RxV}xzL0u0YU_$t7b95`6-``x%9_}4OG4nSyC^JbakbhBV5!Ty0Y=0bQN6@^&9oYPHYa1V$bzL=7dhkcan>1ah?85L;=Ll^g#ma0URFHmzBb|;o6Os!^P zY`NdQm8p2T(rpd&S(NLfDbL0>efRBreKh9Rg>J-VFqMaFmS3QjXA{g&;caH zpuMxH#BWrmL+T?%!Pv*SlV8rt><_VH3{!lJpRhbfQLMQ?6wk(9yf>5rhpEl0oW(h( z(DI9+X`JB;&GQgLgbOqHv&?8Og*}g!e08GeEA@q3BWAhwYSuDp2hOH;bRj=0fJ>;| zg1KnYpK`s|KEms&>^`q6?pw2m7-jwmQunuUt)yU_dL;Q#f)9Jl4cBn)rO=mL3Ptfe zclo89pxRabz?GcAvXiZA+r?So#!%kwrSsj($^ZXD8^R&95~2g`S`>|l+c+Y?7eBJ0 z{|CYj%=~n7su=&saI#tiI-KB80wM}~LNFEy2`D%YK?@8cR2j-)5Z)X-^pc!@%r)-` z*XBzxDgw>yvLYOpyV8q{85krmXG0p1LZh)F~#pgLb3s; zUF?4>P=3KhZpwj1opMr9@pCTLOLEfYLwDcd(%a62+J0m4)L@VQ|t16W+KitQ*y zCxE%^x<0}6DQ%nx%1^@c_h^&7VAh0(_R06bAp5F}WFDoUr%34Dfaelg`a&?nMHC(6 zgp%&((Y6izi8X4B%w~V2l+5aqMZz8pr1wqW+Gd}tHPy?s zhG)n#w5E5f$*TTp$QcQz=w17Ic0$Y=U@l(#nCU$c+ zga)IDy7Fev6)eF-BsrQ0ynqvtvqqn=qby99f%w0~rQN;Ve{V|vujey9PhZGoezAM! z&o;T$FANU=sD6B2MIfucG_P_b0{d!{ltlrA2!W>%!2p^m^6-cN5HnQ>s(=>k^D;1+ zu1KxHcHc0HgJrJwNPg$9&DjW-UARE9ADy!iNbX~EHvC_av%zE)vz84A#-e$G;gL-U zz_AG127ssYw=Bh-%GppnOZ`KVHWYag4%mE|kI&i&B>&M_8~%9KM)-fo+I(0>grY74 z0Y|;9V4`H^+w`XgEZ2EXtwfdd-C zs=lg`I;=C)5uK6N1zcj%#nYoI6XNN9Wt3$*h=c-7&<>^xw?z>a#bAP=d7iNWMu-(k z%gTP2T>dV(d`HQp=gKX~jp}9~Ok}q+Yd?xwU3|=#oAz~WD2ekJ^u@pa_<(d*Xm)&WrCc2XBip6J5c57O58nt1wpIA*kExrb@ns=*mO?g$Wsr&=VHBTk9 xHr(sMI;7uU)BG+<{D7iFFC69(by|A~+BXX2R!;U)p%BlX{s$3^cIB5a007=e=H>tZ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_f4a0028c-eb47-4bc6-9142-6d2ac5397261.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_f4a0028c-eb47-4bc6-9142-6d2ac5397261.json.gz deleted file mode 100644 index 966a959e63aa93099b919d0ddba30819f8a6c316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3791 zcmV;=4lwZ_iwFRdusCS~1MOUEbD~HW{yx7V<<}Wz=%%?%)l@Aa8YXJuJ>jjb6qiOB zQCz`Ww&uUTjh6%j6*4B9+09h#8j<=clKE!Uu26@GRRX6Eeiur-HueE<^D>o zm+tG=&6-qAAJ`dBX2JfT6Mf}+y7eUF-M_zM-^iUK9O#xF=zBfvL^(D+%Nh5>hq@cN zv%A~xY?Udl45m518+S*s$A9e6_w_#BDS%b!24+QE-SrkT6LweDsJp6;$_u^44z=5& zZ!m74^;o((zFSsZYi^DL*Bmxov$CAy9&n9uv!~sDf6#m4tP91J4mHxoDw-qfp|Cgl z&;7?KY^PR``_@qFX#=abq!p*Z)*ptbHd1NLp;z@E#UIsn1Jx^PaMx=*)MT2z`%we+ z(H*+$)ljXZ>OfMiU*BtuTQnxVM}dzJ-I({ zjZuBBRot1jRIl`LeQr47!l;xd#z4JP$J)TS?7Hf(U+fJ0D;bje$*NUv!&O`kmHy(Y zDD{gH0=R2rROiMx_zd2ITqr4OJSb()zQhO1+}%kom2)^YcFH z)rr(g&d-#ZNa}z47MH}&$hSXJwRUGr&Dl7_7H_S>1==s9+|wqe6}bt-?=rn{;EZPk z2X?qX`rJSW&oMfyBas5SsZ)qXfD#NyQ?v~&i?$#Q04T&v$q5`i@TO~xxvsa>Isqk__P%u2xQF&iUqZn>Z{{5QjLs? z$aD#!nb4gZ!}3t8bcfZpnye9T>aN{`}eiGl(c2`eqXvWNOt*!k- z(Z)35Z3`F>VQ6zSgLz93beq^dvJz`km_F0o4w;wijV3N8BxTbpN;Wa4SP$@Feg!|X z0uKPIC7a^q#F-|V0{GNaphceLQ<_f0bq;jH4Vwnj8O{mc1FTy(gvr0tKz%dWY_#gD z?Rj6pXL_eGo3XdOrcqOvnVJfOnnD(#Jk)f}yjt?5QtDKX@KPQod1)x`mN~%I%soL$ z|1qxUhm5)H$*$+)!#iqZ>&Pk;CYMl%K7;&1IpHes>;aKv@Dlu(*!J}-+~zED-3eCv z!XbbE(HiIj-SDZJZWcXnNZm|53VwDyQ+NNcu&vMBAllUw|24z@b`T5%!{Crj89Ejz z#1dX02!=)3mcg?Y!vRh-qKyZRPw2_2ih{40v?9WlTn1J?KPt?w1~?|GVU0eoiIr=21G_=FMRDd9ZPIb_yTHlLm% zfytn!HK}=}H1C^=eBCS^(NBSX`e~$xB5q>Sn_4Fnb93u%1$V0ySrLn@gySZ7lewne zlw&2?`N1f`MHLJIu~%HC#TcVYw_;)46FW&Gr+>w-l)lXWQ$s*>1r~)P+dBk&zDu#_?)^X!gC@t zJOe`4W^4bdMF@dn+t>^;V0Eg~5PdupeRo@&R7Yg`JwP6sg|!yj zxVv?I1D1#8BJWbj1OKYr_f)ON{xD#3VvNj|JeoWZJ~lTi%YoiQEvcQ$l!@|* zHc@!3P84B{E@gVNaj@~kf0He(@%;TeI{V+A&$t4UlgqsD_AcauT#iQPgk0twaN%)n2bQZOewEOQJivOEXe9C~z z0(x7pEarq|hR*=YZM8;F`BX?%h{W?|#KB697Zv>3h`{h_A6O5{G_y408uyfbs{2~6 zyNFBa(Xn`%3t6XWmf-LD#{IQ^3YM3*IhJj#ocS#9NMzZAnd)DYHlQ<$Tl~z@G{bP` zPj5hme$n*CkvQmAlLiKWmPLsIuqXr>M2WUxQBcQ-(;){L(ae?zX|+}P>Mnlo*qe?v zDc2)ume)<40FY1OJQU8IJAn*1Z|)?b#V?pVfrzJ}fEmgZX_`Vpm^{&eKoJmRLld

65)0oZmEma<<$AU~;Mf|IFIU&P_>b zEBBHtD>p|qf;m!y*_n_DV#ze|($9O(S#KwN+&LMQn)x? zViA^B9OhGLb)%6z+9!|uSo%r?7U2D7)TezvEp~l``d_5e`xEs4x&G&`)}q!~V^n{v zJ?${f0cqbgE9=kH`qKm6N30HYp^A7@_qnLezi@petRn@RI?Ix@`ts#3sWmCeeQRVu zVODD)!gLdD{vvH2c5UV#t3Yb2$=cJtcO^Y2vszJI*R6J>TAH`CcjeD>hVcQ)31;H2 zfmw$A4V^@@Y+GH5#pkg1)GbAi!f0YQ2&+tIf$5DByxO0UhQ9xrUievpK+iP6mUdfT z7?6F?8hPD+Wmvl^LTzrWP`ShkUL>K_^vOV(QFj$DU86RF6+$4yMmD7qq7&Obv})`TrSLIXaVHM z+!K)*jyZt1&yCEmuMwFsY?`%nnxk~i0u+KaP3chNDV;X4q4SUt1@`pID*t3GhR-2- zj^-g`bBq2oSLIN;@Us!rDfUAd{pWU@2hu0$uajrDA-hYd7vEi~ZM9KscsFuCi0>{% zsr+1oKWvF9VKMHUmYP}dg`A3ym>0-DaO`{j;nngFVlIgb0#Bbk|G(ffKBFMJO=yfzIS)(IJ_ zPgCDJE=OqK<@dQ+DUZqDVV!zQyDbClwoc~>KnTfzgVecFQV&pgJ|+C!oPJ3EyPbXr zbHN{kkU6{4AAN)I98Nz3uR(`&%QjivW+)&S0%6XWrUb&KDPEvOjxj9D!q%I1`XQ4` z^hkI{yyr9lioPD0-|0Us{v-i{@SpHBA=q!v;r3CoM{*oWU)>m9by8l48d2MN49}&!!Yero+gVJ^j17gE|((k94EYhrzxEO zoB(tJXxVp9GpYuBJ~iMoy>Zl1D|M-QuiUnkX81=+vB>r)uOqr4MmAyJ>8}s=A~PkQ zz5SXIb#rJ~)^i9C(dt;Vcf30jYV98-<^A~kwrrgj1!y3ff*fszg|G&tTLd1E!LXby z=%zr!G>-o`hkcdFbC6HG$}FZg>xJ8GL6ax9nKHL4Q25v8#>1|Q0}YnxuyCaTMbdWZ zT9xo119zs4ggn^^sn%NOpQZe{Ie=UWf=`)jc z@l{?+!KT0&qCoMCi77<>QHIF#6o#g00+Ys~iB6Gq4npRQkaZ?kJ^%uirq55-85*6P ztcxd3^`hU&dQ=TyPBmbe=T&m=&fP6-58gej635O4mv^TEOMV?Mjw;6(FOtXYvYdeg z0dW*>a|G{^K#-reSV~}Y9vh-%VTMZ$o4=nk{#)?#w|dTakolbPc#*oAQl$Ro&lA6u zWSn>><|D!0PryEWV1zRskj*(bmbCm38pO{J{|8bbK1IZ1 F008mAc^?1( diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_fd3ecdd7-3900-4c47-8ea4-519dc09ae352.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_version_wf_run_fd3ecdd7-3900-4c47-8ea4-519dc09ae352.json.gz deleted file mode 100644 index 629151c1b5d53771b74839535e1400651c768710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3778 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 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_019b0571-2b9f-718a-9977-8d7671b071ab.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_019b0571-2b9f-718a-9977-8d7671b071ab.json.gz deleted file mode 100644 index 69af833e7037889658dade3336de74c17f74637d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3932 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 an8KwSpQ{Y~konx-Kl~RvnD~8`SpWdFE)xR) diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_28ed8fba-920e-45c4-8759-8ee9599109d4.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_28ed8fba-920e-45c4-8759-8ee9599109d4.json.gz deleted file mode 100644 index 08d4bcd9e3452d6277260cea198356fb726ceb70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3855 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 RzRAzu{s$UnUMw$9006R}n#2GA diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_37fecbcd-5d15-44a2-8c6d-7cbb4187b276.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_37fecbcd-5d15-44a2-8c6d-7cbb4187b276.json.gz deleted file mode 100644 index 3a02daf432a9bb17f86cde15eda73ea598700e16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3947 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 F0053E!h!$* diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_3f62c950-252c-446d-b460-14cbcea80857.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_3f62c950-252c-446d-b460-14cbcea80857.json.gz deleted file mode 100644 index 34fbddbe3fbb86399068546c0134b1ecef0438e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4015 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 V)GG5^=Iea_?SH-;bR;rS000RO`AGl( diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_42672cd2-eecd-442f-9fcd-e6206768926a.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_42672cd2-eecd-442f-9fcd-e6206768926a.json.gz deleted file mode 100644 index 6fa0ea017e814ed6be13b3c9da7693b523215c65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4088 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 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_6e6e7a31-c5bd-4460-b7a0-05169c048ac0.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_6e6e7a31-c5bd-4460-b7a0-05169c048ac0.json.gz deleted file mode 100644 index 331edf312c6042bf1a806a642a338cfbf9f66787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2320 zcmV+r3GenFiwFRcusCS~1MOLBbD~NU{=UB=<=3<94mXjlO4ad#E=DjSit^SeYk*Nv zE-n`h*~))^2QLXK-jY4%yj%6=LlR)RXS(O7oc)FoFjfc3bF~zGZupbWuasiHCzG+oCIpK`YCl*LU}p z|Ee(z;RNkA-fHwCv%x1rZ55kTKe60?(sJu7*k$MXpb{Fi6X_ZYTHf%f8bqhg3>29f)tOy7%a zFUE1Wi%YC?6T(~x@N9`R2*6S#!Eh`?K#DgAL_?BhjS}F-RACR&c4WiI57s-_mQ_*4 zkx=fAWI-E=vZ#t>wXMA7k*ug6*c01>&ha9OsE9a7lZ43{7Qrw@Ko}eZcui!HHvvmg; z$2M}T@F)%o+By@}UK5dYEPG=lLr-2BHor1m9vD=U)F=1%|9B+hXRUNYB%`FcH;d}l zBfTpYMK_I5F%+xKnd$bYc$GbfXA@_>EzQb_+yzgP4OZ=bCy}20M1J;xWHY2Zn*-^& z2}OG~5xwTp8Ym0HwQ4wuU8tFM+Y9X>-A}O2*sAX$oUz+>b3CB&J8Zp4IZMOs&j)15 zZdJ=U~G$+iEpKCXTzG+iR zBuC%ADHoc}5_e)tuIMwvy=^+6Vw;S zH=*;Vg~l*;qO7U_{fJSxorE1yqFd$~T6m2mqvc`a;$(_s#{2m|IO81OuOdu&$Q(ql_F2LztX2f}Oq{TLL& z44w|b|7(%*H*93q4r?yuGl_zO30N=0OwECl<0{MSR}galkz=BM34t&kBQv@pSLbf|@0F%)@iMGFxaupfG|nG|4hNM* z%f;qvBwjR2NnN%x95|st)#v8wR##M~;X{4mi@L_n3@Sa6G`m%I@r?P{(ri3Up~iH} zs`&28sfp3gWX`bIAEH<$O)Eh(1+ z0F>T$YutORl~rL>u2zM|vwa+U=JvR^z|KWw(?p9)9o-`EBj5BL(Zj8qXQFLS#~3s) z#ukCdwDY#uB4Jo2BoN2)xD_*vqOpG?w4F-XwC~a;vs|z1>$dMdqqCd-@k|W4Q@!Vb zz+w4F5q%sL@!D1IvO1@u4b#xuzBn1EdAHk{<1GuND9s!I9!?2^Ntj2A&II^feh^;> z^7mGj4_>p)6~}1wf!^D@W~-R4^<2oA?IpLkyEC zXF$b^x#POypq!ApJ)m+EH_Ya)!wj6>iN}%YyGKXFVT|R%@SiMxuTepEyjvE=*Ebp@=rGqAc2P`B3WPpSW2KK&Q(G(HdeB>(^%jF?jZ diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_7809581b-0521-4754-a29b-e3a135b807f2.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_7809581b-0521-4754-a29b-e3a135b807f2.json.gz deleted file mode 100644 index a3b65a37345f03c2f63d47b45738d4d58344b24d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 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 Uem@kYg0e7u4zJWCW0JT<=2><{9 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_7b3e54fa-f4f0-43eb-9bf4-c9563419d263.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_7b3e54fa-f4f0-43eb-9bf4-c9563419d263.json.gz deleted file mode 100644 index d1eeec88fd4a56a213dc51a60c0a5e144317bced..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2967 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 N;ZM`Hs_C{l004t<-U0vs diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_8e820cde-82e1-4b72-931b-88bc479991ec.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_8e820cde-82e1-4b72-931b-88bc479991ec.json.gz deleted file mode 100644 index 3dd80319c605761db570c5beaceba4afaf8686ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2892 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 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_a6aac9f0-7797-4456-9ba6-29bf6c7ee38d.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_a6aac9f0-7797-4456-9ba6-29bf6c7ee38d.json.gz deleted file mode 100644 index 43536f3ba6d8b409abb642f452daabac1bfdf6c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2633 zcmV-P3byqhiwFRdusCS~1MOOAbJ|D~{+?gq;&T-1K2nvchsVIBaf^<79W=vOn0-NYgVt^K|#qo&NFZ=B5PaFi7Ik*PH*Lr<{x(W$l}go-Gc^r!>==)@=yn+8X-dn! zgqtp&DU-^irFUqhAteK&^CVYsd@zv-#UIcEL#E}L1j?j2x3VUvjusM^*4(T!=q&DT zYmU=@-)oxjIYYVZAe%iGBS75o{7X)9sy?rX1yP7_4J^gtU4I7ZEX^`7$xP(Rt zk4s0s(Gg^~J|cF%vcn*8gB01-#?Fw;l}X}+VBri$V5B7sF^=E?CI}pd@eapwgoSei zuu3}+brTmPVYIxFwxUZ4LUvhuP(uvSLFKkZ@BX{Hmz&qRoU;(g&A&zmJ zz+p7au$W*079#~~$l4r)6z^xrpJtmNmGBgIm+ zIkElT811qP&}z~obmd7oQ#AZhcJW2K*U99kFjJmFTy|+fnM`r{sR<-^F_MDj-07<` z%XezXDt%zsZaawG0oBWp%+#rGES7fLZgbeD&=}I*CcU}k_ojVKfQj> z=#D`oxf_%wGfoP27bFC{aLI&SvR87<#Q8S-{SOBb`2US@hV>8U-DsP?3j zwI*G%tt0Q~h3>GAe>?4wo{xH@7=p+ipNPv#=itCc=+sYGi@pw<)iDT0um__US?~Lp zi`A<P`e^tZhUidyGR0nJGTbY^qZL-$vG?UaW(7!B53(sGeEH7m{~ymY~ zmo5#AC|RwymUJvpA&Vs{1j83eRF-^Pt9}=2-PXA*g+0tt@;lb- zF?3SzLW=T_We{P@Qy>F z)1Wb%v~fgjaTWsvv@x5eI~$Zcb_IL>zPyu6Mwd z>?NJXT<4H+pR66-9AlPedFLhOc`)Jm2p4@}mBBIv^%0AtdYfczTA!k1XDS_$_Pq1_ z=cf~^l;$ULihu1v$mK%Ho~;udy1y&^6Xd)1nyBipPF@qsYW4d=S=Uvm z($z)nv>k1gtkYQxqZhWV?Iohu)r(J_&qs>;mK66mFt5cLR}gC~^PV1>dqSw6Jm}1N&;@ zghh~!g9$w0U^Ge5m@u>)j0BKo0m+h-U|&~)(R8VLH`x6)2qS-0;5}2|`MpIOq0og> z1c|?U(T1nqw`jxvj-riY(HsOgjzIuOjHY;qS+vDtB*7PXS{3il;^AB$ zPGu1Vp}`9wIxYd4a?PYRDjCc6f&e1Yqgi zUV!yd>dFtuD_(iMtlPB%IU`fc{{%L=z*89Bo3M|qoX;F`qI7vwZ_@gRWyCr0S`VD0 zX~+7MwqkG$6U+wzI=|>u*xsrj8pX%*;xi2I<~WPH!1CUjTKsH}h2l9PF}D1AVD_6$ zv(ZbPhKIxM@vf&61aqhRiNMXig0~EBny&)-DkB~lJ3?IdM*e)yG@c*}xfKqlgr9ON zSHv0iqF=c#LE=$AfLZcHo}#R;e_xL;rx}#wnT@$GZU8O94l~f))WG`IBd7Gc@}X+M38|+0hCT5mdq23fKilf!J%z)&?b)dDt`3se)R1Y z@7tw+XWy&i>v@C8Dha@MJsBN89U1+v`W$ r>qpz`N89VKYI}8qF^t@#@=_t%YQeS^K&dvs(=`A9@>)Vt diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c740e74e-739f-4aa0-a986-bc03051d84e2.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c740e74e-739f-4aa0-a986-bc03051d84e2.json.gz deleted file mode 100644 index bb747e569860485f521a1276f5a0b684c6c4b41d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3920 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 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c793628e-97da-4130-890b-5154ea122e85.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c793628e-97da-4130-890b-5154ea122e85.json.gz deleted file mode 100644 index b1a9ca4ebb427966fdc528ab5103626fedf54247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2917 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 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c86768a2-ab3a-428e-8159-33cbefcc7ec1.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765322898/replay_worker_deployment_wf_run_c86768a2-ab3a-428e-8159-33cbefcc7ec1.json.gz deleted file mode 100644 index b27b34447234a1ec76b91060a04f00754bcd420b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3780 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 E0Et<5iU0rr literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_14ea3e44-70f4-4e35-9c01-11772eb39a33.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_14ea3e44-70f4-4e35-9c01-11772eb39a33.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..339e77329294d3a60e328bcab9b923f5628472fa GIT binary patch literal 3580 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 O!~X$Ql5F&QS^xmsKLf}B literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_a85e9798-5fa4-4f2e-af4a-f91036064b0b.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_a85e9798-5fa4-4f2e-af4a-f91036064b0b.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..a99e423789b4ed26b997c3a2922bbca00fa4463f GIT binary patch literal 2417 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 Ax&QzG literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_dfffa73b-f0be-4059-bb6b-bdca1e4a9553.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_dfffa73b-f0be-4059-bb6b-bdca1e4a9553.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..5a4ac208631698fa2f88833b56133d83711ddbb1 GIT binary patch literal 3384 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 O|L{K@#pfXCRR92LNU#L} literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_e23aef46-0d38-49ad-8eaf-6eefb1683095.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_version_wf_run_e23aef46-0d38-49ad-8eaf-6eefb1683095.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..718af761d22e02361452b31eb158d6ec4a0745d6 GIT binary patch literal 3731 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 x#ZiA(${mfcyg%aduhvy3ll007!fTx|dV literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_019b1555-41fb-7af4-984a-48b0b548e052.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_019b1555-41fb-7af4-984a-48b0b548e052.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..059b18c951c74385e26cba133da3191d4540ff76 GIT binary patch literal 3886 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 literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_0641674c-b31c-4646-adba-bf2821320152.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_0641674c-b31c-4646-adba-bf2821320152.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..ccd6760771c985d062d2796dc95a0860710b5601 GIT binary patch literal 2286 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 I8_OjC0KWv4KL7v# literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_08178650-bbf2-4ccf-ac3c-3d92c90c4c36.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_08178650-bbf2-4ccf-ac3c-3d92c90c4c36.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..29ef83fc0c129f4ea2ee2c2d3b9141a686a39332 GIT binary patch literal 3897 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 H$4>wNa|Xuf literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_22ba0b7b-c009-4e24-8501-32abb53408f8.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_22ba0b7b-c009-4e24-8501-32abb53408f8.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..034d88c7a9dc796668f81c8d62b9d4295d670305 GIT binary patch literal 2903 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 B*8czi literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_23f2aa05-91c7-4741-8bd0-c50aabf0ec1a.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_23f2aa05-91c7-4741-8bd0-c50aabf0ec1a.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d97f9c6531542048a6af74dcd077cd72281591e9 GIT binary patch literal 4056 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 literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_42ee4ea7-f980-404c-98e6-75d4417ccef6.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_42ee4ea7-f980-404c-98e6-75d4417ccef6.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..00d24ef2796d57204dafd8e1c5fab9827a4f0e37 GIT binary patch literal 2788 zcmV|3P;jKmMrx@1DyZ z`l3eEJ{>(Zf*6+1Nt|Rbg2V{Qz=^LE@s%JyvmC=vxP3}d%qj}WlvLxv7~M+`R!_TY zb$ix>G?c`FA@|e=-4HZGYCh5CAPcu5;B=j5>rY>;(s}4d=}KBdcaaBaqUT_qLr*G~ z6Y_i>IEx&X``Yd3fM_eu(>Lh51Z*~y!+4g?L4;*RhLr?xj(KnvrA3T5V>=eLJ?+m= zPYaX+_ZM*SI_@*XI?1s7kJ_ihcf%m5_G}3H-9vvM4Wx%VS#3V3Jxvk1mlqC_*&;t( zbOwqj1>Tc!cYi;Q?$Dbt%z+1TaKd3{!o*FzAQ_iJjpArA8g`g2)hHZFTaFSlJ`#V= zG0VUh?hNm>&D?GC#mHJMT+%GO*etqnYXx*Bw1mK+bz|^u@~BwJ@KqHE(O}8X9$Je9xzIQ zGpf~!yGDOKvZQ=u*wayg6QjpIZW{`zG{eWyR00BNFC8SW&`%XnEt>Uu*p}3Q%)2X5 z3d6f5!TX-YkoK_i2rPbKTbe&y%iryoUv{U`LTTWFAPZma#w(eY?;nf)sGs!$Whux- zQ<#p&U+z1NiMV3rqArB#oj6w3-Kn5g>k>kv9nyD=N(Q=m-e08$yyY{QF08|zuY>4% z;)brZsfsN4=!wM4Zkr3Q9pTUr?B1Bb?V*Zy zttc$52ZkEcAE$T1VFtajlY1BKhcOT_V8 zZkpslvOt)y!wAH411BsXAi;V7<4LxT(X`89yhC}IM+4|Mq|f>+S33%?AP+#E&MR-~ zsfMhgs1)=ERk9vrRW@Y7=xKXQJ0wl#!8k}jbS?x=5?&+qb_RhS0rLzX66|(K%Yhh+Da>%d8xip)F^!*qOSqIYCkm09s9+rhzgQ3RTC~ zN`Nk+zfz3!5nZdENR#SRAygv*a__hZK5-cJGqW(uvJ*NYsO_CQ*1| zl1oUcXc085oHoxm7UC^26UQ2qYsC&(4}86napDXcrHlvs(qIo|Vx__c+bP)j3cc64OKB7DyZKo1GjU$m zaZ?}ST5BM!@2vsRG9t}4LsK8%(Y+DzhAFiMrm6aau!SHj>S-IlJMv5OU_IosfoDaT zEk)r*W_nfaDL(R#-e{|n(w1_9|Ee$VY+)e#PHhwUb>&NPp)_TpYe)sU9?hn(?oAbR zq5J8GRHortX{B2~<_WL#W5Qh7rGDSQ!;Yf@>9;YWw3!#T@X~%}JKDtTR9-35L9Q4w zy3~Qvlvw2vU530+Q4!HIq?HwH?7NRCVi$vq;aNmp)=^bFB}cJY#>--_=S0OvLyd3? zv}WYp55l}PhEp$X?1DhK|Ybc&E@=3Ggo`8J2@q{(vEvZ;yfyneU1Xqud^J%5xC3y{F!cQ z^EXza*D6mjjb{-=z5KRJJ|}VK5ajUc7y_?)7umL0^8Oa0Dfv(HZ-zWQmp^ODVaTTYjzHslRc8;<7)w*JPc zjoem+?$xmkkK@d9W1C=%nxhxyHd*zOx}BlS=IIQKK}n6dTVJXD-_Alx)(uqlZpx27 z$s^izRHdpAl@#$U4Tva6dexhsVb{yv8+gb-L0*)6CP9XJ;R4Ixd>Ob$%D?R7aGk?B zGNE;9{!=sE5)IgLllsc2_)2`nkEdvRRPuPh`7{eK)^$CM_8A%j3?wjyVjZ5QITzyo z!BFkB;YGbVyeNc5EWxt3gjY5D)5Y&nbMRbfk?eVBl@O}C6X-2o3afu?TA7uzS|b&s zG=taYHwS}?*BXVs$tWB_^S2x2*&#JD34g^Tub59~M`kNkq%E~ zA7y_yNBRA553lw|_BMay@z=nQB4~G#_Mk~(PisEshX>#ngVMwrbkn)_f&*?|-Dz;A zr2~z4NE1PH)>^n#_lX7Gd4qbj*7|s_rHI*vPx}vr3L?=RfHnkwAp8Wr#XkZ9X7u|V^Hu%4PlVnw5xVS{ul2S1jlM>) ze?4M3X%z&2YF-v%hUI|Z literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_55eeeb0d-15f1-48f9-9d9c-f4bb20403f31.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_55eeeb0d-15f1-48f9-9d9c-f4bb20403f31.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..440eda029604f84b2ff263cae7d8ce933d427ebf GIT binary patch literal 2749 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 D9#UFL literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_58116cfa-ca67-40a8-a89d-02934b8fc4c0.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_58116cfa-ca67-40a8-a89d-02934b8fc4c0.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..efd3aeccf77b632b788a5f6af88e18e8322998d2 GIT binary patch literal 3990 zcmV;H4{7ipiwFP#!aQjL1MNI%bD~Pu-{)6MIiq|-HoWJ;?3sP`VE zN2{gX*P1QsQR+&fq024xv7-x`E>&M(6BtjnQy>|>%<(T@Eu-0F;73bog`9cfMPVm_ zvjn+PHk^_iwkk?V!SY*M|zpZB^Awn}JM5(2t;9C%Cw+@0n_+L&^xcIM zB)&7ze5bxzAPe|*sC8|+G3y7bg-h1bKCOJcI~w)J@igwXB;AQacha}|BiCAylBbPY zx{&tk2CJkbt6H_7skc`>OGg1_6mY_iO7k1j@gm$EeYFg#E zNnKJsDrqi7X(HWM*55O$=2-Bm!gw|O{LrY3L?NA}p9K%Yw9p3Teq2rLrKk*-GRr(X zrR`q(yV3#+K`x2IsH$|Br8HCno8sG*(KN>M#{YBk_5I*roDLqx*^EacH;a=~G$i0{ zz_KjCfPqbv;ea7{j)4Tj*`&=f93ok29}P@0CzUY_?A;Ae5FPuMfrorIKJgiM*4k@U zpPi<13R}?Yz))S-9=~(~p0ue3=x2)acY7UtZE*#>4oVvbqv$~`>38Ik9As83$FkTM zJApaEvos(cO&&*{G8R&`L#`ALe?WVw=+P7YEL$Q&sbdAGx({V1%RvJ`Yc=UuZLj6YYp>N51rJ;4(ysHY zZDsK6$hHjpeIxTg-k^iW3{>ERjU#-K*AMtbb1cmjaYK{aZKN5!Cg!$7`3rlZMm>uS z`<8Z%&a~CZ=$x>vsQah7Pi9qEwZ;nm zNNjW5qm(CuRzb9;(ZMos>i)bB`o0sYQ_Qk{AB4YOs| zcnjatI|kqC0@Y}nnrQ&OYMPCXX0XPZm%%U52`uXx**CB8OJFd+X!XfpRdd6y{

m zTI{G#nGGA;#AY6=5#~`9)@yToe`41Cjm?bZr7|`WMVIkMHI%AUQl9WCxA5l_M?dgW z%!^8o#w%)2BQsfD<%ce3{7756w6weipW%7-3AJaP*Rg&kSs1tGdAPgJ>}0!+I5zgD zl2~tnlj1Rb_raJXHN)p6&8#Ro@YPJWx}cBmsSTZE2L{k8X3f;Qq-q*|qo(`qQ$4Ef zjhFeX(45+Jt{cc>@#hpr0I_dyrP>(lFxAV} z8H&Be4}6{RLuM7d0_70!=OeoxxshFr;LI7F$=%jLmWx)%t(}QF^lfS-j$k-MCYr@K z3VNHc18c_AJ`-{z+gPJRnXF6kXh`w z@(_8O-HpSF@*ogg1AyR|eqw z(Y&>n$cRxe^-+Sh6Jkz5oEd@%I=eeVa-T|Nk}Z|{r=Vyx^=7A_r5DgLNi!6c13Jt2 zoIu;pK$F=V6-?+x2)Zasoc_v7^ESj@-jw+=h@zdAY{uJS%G=DM3T|eV$s(Is>ph!} z_)V%B%?mqOJbAj4mC3l{jF3C`uWV!eW4laow#TMNq94WRd|thmK;9}8x{y%HEcptd zT-jXY%V$J#!@gpCAhu&Y%a$$|-}jRASUC9q|0vM;kBbIy?kD>oGxU9q;w`cPOVU&s z@x*|}E`(tnNWe0Q2n0E@3`vGzU1uM7tsu%qVw@GdaS)mJy0jh}et!=clf2=bLY}no>clp>DAn&G@# zn>fp&tPn@>eQg-YeTyC2R92>OI$|(=vMFZa)K?>DF&#mdU%he#8)YJ5tW5-3s}tcs z-zS`C9wwV?`Zrn9+OJ=~_o@Hw;~Af$3&t|PczNdvx?HCGx~?DNp(^OoqacdX!^M1! zz0mz*Ofhqj;5cY{EpwaBq9k%6Uk-7K7CLAf%-|f!VL3=paDWJg88`&*LYv@7j$tT- z^Xq|ou*tC&P-S@kNab28UB zGrjGNvxb`2owT=I6(j7u=CfJWU$r<%WHyw}hH+kCbiu?w=9}>qGk@*c^0Uncs_#mt z<@I*A5$3NxxgO@Ag*xSr6?^3x$&Ku0+6%q^(B)ZPSuc=UczKn0HsmxHE$>{&dnqoG5hc;uk zP{V{27?-=iN5hIdVq`(vTR$3jtyUtjzSrd)+@nc4l)s;>9}^7M5;t(oYBX*x#m*ia zqjsmOWusjYUcYvnHR98f86aO{PXG!v6!0as#J+Vy0Y|fM z+fV@Bw4;D`sewz|BmrHUA{dUL2)>MYW7|9n0YuQ|_-h>nOo?IsB^?EzP)k9!P_e(D zrGVz&x}^YI=_vreRa3#673=|9Ox!e}i-`L{YduJsE=!$9rB#({@&%bQIqv&m7Gckq zcqmqI$T9G4J(hSTc>xDjwyA9*S9w2?^IM(BsU39L=WWD!XS($Zo`x9GsxB;d-QYb7 zEZ5!O#ZTj`HXZJm#wYjeX&j?&radY<-OiYCDjkDu=o9C+ImK{5>kCbiF{xoXYTq>TJbkY@0nyTBO4ZGu zH~}$9)v*C~Cm@QSoH;#-_46lZUQQBeb#qh*&w&j#_(A*Y+qOc0Qo*&4=69e`jg=O}ZIgTW>M~^9kd? z@J7*&hyA1KhsVUD{|RQp&!4&1)wXXoi*iA;D3xAk7Q5r!)$RH2^JYO^Fbi>a_*{rp zw7h5)AzJ1f4rdWUHt7<89RQra4R~w{yh98a+oni{qz5#}-5`H|^~L+EFN(kVg3o>R z#V;sc)kEQ6gR|d`zC9m?uE;NQc<@?dM-l6S23i{|dt7Zo8AD?{fWeDy`Kj5EIg{QgFW_x$rc w|9sCs-}BG^j{NieSi}2C{I@-c?}Z~Y^O8#~D<860=f{Wt1K92vsESYk06~!SwEzGB literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_608bc2bb-589b-4eb9-8571-1d83d71b77d8.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_608bc2bb-589b-4eb9-8571-1d83d71b77d8.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..94a5089c7629de4481c54a38659cb5485c684fe8 GIT binary patch literal 4092 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 QOMd_Gf1#)|BhFF)0LnIU=l}o! literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_71d86583-748b-4f5c-b757-78760bde1614.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_71d86583-748b-4f5c-b757-78760bde1614.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..65b32aeaa466c0a4b2737af12c1369c6eb3a27fa GIT binary patch literal 3934 zcmV-k525fMiwFP#!aQjL1MM7XlbXu*dwxaAukVu3ECQ*zRSy*nj^Kz0%Bx#bEUls} zMnJ_|`R}iBnQ_5|$>iRf_a;>)5xY!Zfr)=-4<|)11$6M(=wb-hhDf8R?tpjHw?P5Igg%!xqBO#?32=@%aOQ=nk04`v5T)n2 z-+y~qAlq;!fysT)X9#o;|(W zK3#NXre0_|FU;Nl`Sa)-8tKE>bj;X1fv{&`V26$yjIvD)d@mXFn{W)xyE+sX9N4OJqf+H^gb2qsS$3oC88d?%Eua#~~AX+w}* zB5p0Kg3CVC05^1WnlSp!wW)K7p)13FipI7Z+p#UzVxmq}8ZAX?@VHJpgHF<1BrCqz z;m5Nj+MjO`Y$A23rQr7-Dx3AFRcpd`Yy89>eSU0K#&RIA-=0TB=OTwLan&*@;bE$+$IhzD`d#^!?!5AGuPzS1u(9G8+?aM7o4WrJOM; zQniCY;CPfB2C*9?$R6zN1A@6VB_zp~35H`aiYuePOb%jfnXxgNWdRE;NZLcYbfj8t z?3!^n-$+thRz(?UB;S3K1^r2sMOEb0w(@Mx4yT55cjN}9cfJV*IBc0_NsOUb3!{d# zjadxMU<}KYam#_A45&j$Lw6p<=U{NaS%9W#i~>UoW6U9iaV%wG2qhlmAm*#a?uBLmXaE-(P!DNQiME_fUJ6^=q^WM&|EluWoG$K%_3;u)NQvN zMDBppQUo(`>V{_r^2{PAx9v8EeG)xG*xQ7+uzYRW2dvww@~(~cWH-FT0Q>QD&1}>Y zgV3g0!`tq6A}*y#FP2mhedL~06Ux#WeN-utC!>`#8Lf49gAbxKSeiPGPKe!FUd6M0 zIiutl!TcfEM&FoiU`}aZ=}pgeH}l;7zNJ4&v&@5UwI>q#@KkFuAf$Bk6lImOfT8;YJ5fpDw49+o5ef-Li z`91f@jG#HU#}^#l&FSU96?Ezsth2iFN2_Bq7(orrBXqpHjd?~CnOPT1bG)<3T|%QB zf=dlyHABur0eh;aP4d|qzu2pa(NH|2iZ4a)jF!LUqb?)YJerv{tho#KZ$h8{y#VT> zhdiu)1szcJNJFztbeJiJrlTqr7Ngl5F8Cx46&S(zF?6>f;c+yve|jU9uoBmEcJ2wo z;$@pL*)q-n2!;%4!Xa|D00VHF8**o~Da~K$*V*-!9IzaC=Jzs%EX0&DQpVy;xsj3KxC<<~BN-DNvF%jOvZKpE&)qmZ zWe)oPza`WDw*!Y};>Cwk=I~nrqaCoa1MwjTQBXw!fKjwP#84zNL?IWT%Op-hfa8ag z$8Ln8ytM1CVI|#ew*)wxIE_BxJpY_5Wcfav>iSJ~Q-#>g5=^-;yQ^*Ku_at#IB`I+ zBZfcQ*&kzhbRajULjF35_z4U<+^;j0@;!r+ha9S2ggh_L9G#z<;P^x!kH1of_W#HL zp#|krdo>D6r(<65ErCxY{Rz+CKJsed9QiGWINU9dbTN4(@q5gV#48Vi@}vmWwoFThpev&S@Q++URh%b${NkQrG+Nnz(PyOCPwO_gI^d9p&j30t8-cYYnf?Rye(Eg zxa&LXc-PbDgMMY!@)7zvK%1rssY`bTeJ`?z`qW+)B}H`{J=8~`Xz29BBC@oe-L3kw zwM9@1yRjOZI@RS>@zp1nzZE7dLehl6jW}Vp>3NtPCPBQ7rhkzmt@HZx`w;tI-kXlaF_{pvh&a*R@LY9&5ZRJn_}4@OU*|qpq|}^k#^-khg6(yA`?3=3yM#p(h3? zLjM^T<*bVbEK=Bx1yHGl2d@}oss*>eOL*g^BC#MbFIgZ$Gc*TNk2iJbQ~2nW3x z4PMBzS|?BbcuOCSD`rqAg1*C`@KsgRM0Idy=9Rz?Vtvz&-31cd`!lcm8K(#x0=v?X z)lCEYw25Hv_5ZV)u=11g|68qDGHv zY13-8Y4ZYnO&kLiA}2Jrxc1UZ5ld%A=62y`p8`EE2prb~UdC;5>6gdlR~O31qmX3I zV+)$`U2Ro2BltOt=jmhUxpsOUyl34~$WK5H^}_VFEkpo6S}e=FZaa*sA@W3B+eOQu zk;JjPZmwKE@ed(^Q!u+R{I+|NRS6FYpp z*g_EH3s(4*#TM=@i!GdGIy5sRFbd}=j3P(^GcB9OXp*LeCdX0q(7D}-_BWPSK%p*Y zhQT?!Fo$o~R|qDb$M@A&<}k{5^nY^JXid*1wa6*dJRwY_OYODPBqVFRdw%vvXJ=2d zisp@W=g6`wrY!IA)z_W{7nSn790u^$DDB-kKorvf@H6WC1o3n0{D?4L0Ba)afpeJ6 zu_%NaS{7!KoQdHiZgNA1HF49t&mZinV)bEgJT?gD{oR|;M7|; z3lJpvw#@?IO}hnHhhu1NXkmoSl+h{1(ijH;jX4&Ma~xws2ROI71t^>>|3kV3K%sU4 z7Uvk|C$tNY%v-k$fE)b+;FoF`c(YTcwu=`PIKMIN}3f(8ET@&l#HJ;~~ z@5gzFEMM%xNJ1{e(7pGb)`ei?_-@3uZV4Uf{Z_&+bt^&mDIM}>>A-By2U&s*PENm> zX867|M#$knrvpP*Zg!B%-3-scQeKbuc#f@pCByS21xbv@=zHO=_6xT#ItcD0+wVYk zydQ(D5oUh_v+d}>HTq&Ue=P?1t|LFY#HAeg+*)ku^%NqRK(azyq3POb)N!XTW&G%? zpxIKi=1>u|jw*15+SA%vozu}XwcF#`eIWNbnxgdpSJSj+H@j8w%iNkMeDk4~$Qj(4 zO}+Bw1IYFzPk6Fj4^QP>Mf;oF#_br!Ru(wmY~)N^8jXACa}LAsy%f=67n9ZTj90hm zA!hVQ+p4hC-6og8Ilrm&SKQc!OK8r2N1XPLiZJNI}s zy-cTW(xf)ZXtI{o9=(&1DY65|rqlzYhj`?(n|*9=nf!pQdX`;nViuO&Q(htZ__Fs3 z`A;oU!#6j>`jzQj^f`y&o5(geLVbc{m>6W|3_;(%{o`iz5NS!Rm|_69H*L28<$^vK zL;O(j_YU`)yIK9c&lArniWV=4<~qdYVfFd6hMrxaO=3Ir&w}|VLGz;MuWVm#?3fblEHYJrQDuruzUHklb`O033yH$iKrXqk~UZ*1a zd)l?#MeU0!Lg80bq`JRF&POs_Ue%BQF3+!L4*@%50cl~lP1_h{GeeAJs3FGTIHYXb zw8^78Q19=jcz-{|kG!9P&3!+`R5(m{yET3?*(a{OsLX8>-nZUUA(pG7u(o+W#in4( zb@UjT%89&R=X!qw$=kkx#0|!9?#9>J^FCxg_xBI~1$K2cO1Dw~06&$)kpKVy literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_ca534f99-cd6d-4a03-816d-b7c754e60ebe.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_ca534f99-cd6d-4a03-816d-b7c754e60ebe.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..9928be3ea9fe1f8508e5fbb8ba181ceee05fedce GIT binary patch literal 3827 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 OKm8YY4*6z}N&o;lF9xCj literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_e9390f52-eddb-4a3f-b8c8-8cc599c03acb.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_e9390f52-eddb-4a3f-b8c8-8cc599c03acb.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..5b2b7a629f7981f6df4f6adb658dbf733b0c4463 GIT binary patch literal 2858 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 literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_f41f1a81-884c-4952-92ba-7518dfa90739.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_f41f1a81-884c-4952-92ba-7518dfa90739.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..aeb67550c6038235a6dcef84d26ff497dbd447ae GIT binary patch literal 2935 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 h#7DS(ODm5h=FZ^crhfZS}J|006YJ%(nml literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_f9449ab5-e1c8-48ee-b192-c123bcba85d2.json.gz b/service/worker/workerdeployment/replaytester/testdata/v2/run_1765589504/replay_worker_deployment_wf_run_f9449ab5-e1c8-48ee-b192-c123bcba85d2.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..791c1a3cd9f4c96d629ebde8246b3a2b0c1323ab GIT binary patch literal 2681 zcmV-<3WoI`iwFP#!aQjL1MOPrkD}NX|K5K^$FHyH=CUYsGRdH#g(X-5g7Pw{uv`>n zu?1A@)c^i2ZslH5J@e+xOI1RrLC(4NY`?Q`e}4M>xdi7hOybh_&;LeupFjUx|GRrG zIOvBGD1AA4s(Jy;pA$GiV}QT_sp8-}3BCjNYq>(;IBT3zWYaYTukn)ltPY;|XT2jo zHrgHineX$po+@;tXGP^?m9M|jCT2X@ZULuQ8nCZFEuz`P^`iy9gm#*EQK%&5EP)Q6 zFUKXx%(K!2=5p;MIw0C^=k*u#TWD^CN?>PK0CIAc2&r9JJ- zm)8aI4R=$R-p754Scfr|{3v}ne0So7YnfF}d3^5n_#XfKC`k2ZsUwSA`|`qGI8Bq& zMW<%wN2c>?+}+>LqdW9w029+O6Z3?_&V->IIbJx-H#G?SbkJ|nZL*qKq&y#lT5z=e zJ;yjUhj3?jr>P}&lg$SDBDD!Ea{?`E2aScP&=aFyjV;no44uZ?;b7VJow*$(zCDqB zySbc09r#u#_bswDGlJ#Z!5f)DiocakR((0$MrkWjsWx;bhHi`;eTnm)JnE=iW;A=W znBlafH-fg>T@G|U8K}m1kl|pk>f(kf5@LO_8jN|9BaFF~wHdA(i8U#!Gt8vPOCFK5 z7d3v2Kh^>3Iyy}l{npCV+0@Wwx1R}OtphjjK91{&wWvJ~7XnQ^t+MW*`$O!2IVWUw zZX6E3J+-Q%TC}L>4Cix=X2?BO*K1PC_Lx(QZuDRT?7ThZQ?V+X?V-u>-otQM7w1K1`|2V(O4!nMJaNvo9xv>R7lurgLx1(O-bp)lIM$odw{Ogk zdLLPe>?Woz=a!l}50gbxjU;6Cl~V&#qp77%)5l>?c&rV@wM^V1s#d$domlbZ;O>u$ zp1un}ISq3hiq>vl!sF6~cT^OP2QPu+x9liPyf8(WvBMC=a|1Ux11e0J#xcus35>FB z7c*_r#z==HY!~>NE`B4yCC@P+rGtxqT8nL(x0VNK8Z1nmMp

    awN7nP9yt%%D(9!+tfJtW(#PdS zk6%9NJfVMDl zn`CArtEYXsdjNu9a5jmYuPPE}m|W2ZXrlkrIeDb_)Cq?V~y%QK}3Ycl66#mvDI%pK>j8-wNWuXhcVb<-J2=+*&?vaN~tt(KUY%yLTG?X~m%;1+(RJ0VpXFY3?dvphT{Hq#G**9wV zLh$iZU4FSNx`f(+cxu|P?#;cwNqp|N0-_5(s_gnzl<*p{hNw~aWbz^0)P%xrG@ZdY zmnM-6W0*We-lh#b?qGIL-{@bg)bpKfxl>{AvRyHmGR^`B+zM$zmnm031>iR8vS+#} z&E8olU8{_0Q84u(>P0tPsdEy02F(OsZKH7pwb3|Tt{CT}a5?p6=cMIV(h5#e1aX0M zmg_k&Ek7qsW+^OKd5@s!z`Vl!d8r=X2z$GG{_aN6&Pz7yZ8=?4i$z5O!=Kt z2cao(?HgkUx_oQw;0;mn{>I!PUcV%5X8_Y#G&P52PL0`HUn%|H_VPLF>c}8A>8VSw zh<53t6pBi{by-lPkLP*{w?f4WSG;fZ9AqFb$#Om;FGjsuhQ)9;_v|C(Uv_f1OyCTe zP(L;QshNsI12*5JzC0?vgRl7U6ljl1z$7ZL3~>xr7#pK3Xk$#-1sKXaz;+2}+opRk z6uLLO$a}+!0AI^ANiukm@LJEVl-dJd@7)S57MzDx4xx%Yf=>EYSp99&wm6?Ps!`34 zVt9SNaL`EKYZR)GQOYEsiW}vPAuCH=G07eC)%eJ4r+#)4gonmK|NmVy?cW{fnyH^0 zlFZwlc`Q(jgHe=A;t=IbyzCxD^Cr+0Zw0H_X1gVVq{^qm zA~?HTh88L;ipL;b$lPqXLKZf6ts_3Q`I`o3E*pGb#{8Pe;{(4rFNogb5r2Wf4)^O! z#LF49v|#esMwKIa33-#B&2@BT~#{e~5>y8Pghnc&9AiJ|Fen^xkAF;{El!AbvtanH)<*cqlT*75jDLhg_qS=Fjsg^ zu01?+swxZBp2{oN;;4+j7LuiOib~vlbE=%oZSMP4dR0Fk6QTD^gf2Vgy}rg2^tB50 z=OJ_%2Y&)Wi|KjdY%p+^NLk(Ok!NpBn4&mbbv;aX^CT>+M%*JsRqaZf7v-WyRz-xKINs(%cuVUYvd5c(J}x4YQs7W literal 0 HcmV?d00001 diff --git a/service/worker/workerdeployment/util.go b/service/worker/workerdeployment/util.go index 0a3f29b89b..953cd58a95 100644 --- a/service/worker/workerdeployment/util.go +++ b/service/worker/workerdeployment/util.go @@ -1,6 +1,7 @@ package workerdeployment import ( + "context" "errors" "fmt" "strings" @@ -9,13 +10,26 @@ import ( commonpb "go.temporal.io/api/common/v1" deploymentpb "go.temporal.io/api/deployment/v1" enumspb "go.temporal.io/api/enums/v1" + failurepb "go.temporal.io/api/failure/v1" "go.temporal.io/api/serviceerror" + taskqueuepb "go.temporal.io/api/taskqueue/v1" + updatepb "go.temporal.io/api/update/v1" + "go.temporal.io/api/workflowservice/v1" "go.temporal.io/sdk/temporal" "go.temporal.io/sdk/workflow" deploymentspb "go.temporal.io/server/api/deployment/v1" + "go.temporal.io/server/api/historyservice/v1" + "go.temporal.io/server/common/backoff" + "go.temporal.io/server/common/namespace" + "go.temporal.io/server/common/payload" + "go.temporal.io/server/common/primitives" "go.temporal.io/server/common/sdk" + "go.temporal.io/server/common/searchattribute" "go.temporal.io/server/common/searchattribute/sadefs" "go.temporal.io/server/common/worker_versioning" + "go.temporal.io/server/service/history/api" + "go.temporal.io/server/service/history/consts" + update2 "go.temporal.io/server/service/history/workflow/update" ) const ( @@ -63,13 +77,13 @@ const ( errDeploymentDeleted = "worker deployment deleted" // returned in the race condition that the deployment is deleted but the workflow is not yet closed. errVersionDeleted = "worker deployment version deleted" // returned in the race condition that the deployment version is deleted but the workflow is not yet closed. errLongHistory = "errLongHistory" // update is not accepted until CaN happens. client should retry + errVersionIsDraining = "errVersionIsDraining" + errVersionHasPollers = "errVersionHasPollersSuffix" errFailedPrecondition = "FailedPrecondition" - errVersionIsDrainingSuffix = "cannot be deleted since it is draining" - ErrVersionIsDraining = "version '%s' " + errVersionIsDrainingSuffix - errVersionHasPollersSuffix = "cannot be deleted since it has active pollers" - ErrVersionHasPollers = "version '%s' " + errVersionHasPollersSuffix + ErrVersionIsDraining = "version '%s' cannot be deleted since it is draining" + ErrVersionHasPollers = "version '%s' cannot be deleted since it has active pollers" ErrVersionIsCurrentOrRamping = "version '%s' cannot be deleted since it is current or ramping" ErrRampingVersionDoesNotHaveAllTaskQueues = "proposed ramping version '%s' is missing active task queues from the current version; these would become unversioned if it is set as the ramping version" @@ -165,3 +179,243 @@ func isFailedPreconditionOrNotFound(err error) bool { var notFound *serviceerror.NotFound return errors.As(err, &failedPreconditionError) || errors.As(err, ¬Found) } + +// update updates an already existing deployment version/deployment workflow. +func updateWorkflow( + ctx context.Context, + historyClient historyservice.HistoryServiceClient, + namespaceEntry *namespace.Namespace, + workflowID string, + updateRequest *updatepb.Request, +) (*updatepb.Outcome, error) { + updateReq := &historyservice.UpdateWorkflowExecutionRequest{ + NamespaceId: namespaceEntry.ID().String(), + Request: &workflowservice.UpdateWorkflowExecutionRequest{ + Namespace: namespaceEntry.Name().String(), + WorkflowExecution: &commonpb.WorkflowExecution{ + WorkflowId: workflowID, + }, + Request: updateRequest, + WaitPolicy: &updatepb.WaitPolicy{LifecycleStage: enumspb.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED}, + }, + } + + var outcome *updatepb.Outcome + err := backoff.ThrottleRetryContext(ctx, func(ctx context.Context) error { + // historyClient retries internally on retryable rpc errors, we just have to retry on + // successful but un-completed responses. + res, err := historyClient.UpdateWorkflowExecution(ctx, updateReq) + if err != nil { + return err + } + + if err := convertUpdateFailure(res.GetResponse()); err != nil { + return err + } + + outcome = res.GetResponse().GetOutcome() + return nil + }, retryPolicy, isRetryableUpdateError) + + return outcome, err +} + +// extractApplicationErrorOrInternal extract application error from update failure preserving error type and retriability. +// If the failure is no-nil but not an application error, it returns an internal error. +func extractApplicationErrorOrInternal(failure *failurepb.Failure) error { + if failure != nil { + if af := failure.GetApplicationFailureInfo(); af != nil { + if af.GetNonRetryable() { + return temporal.NewNonRetryableApplicationError(failure.GetMessage(), af.GetType(), nil) + } + return temporal.NewApplicationError(failure.GetMessage(), af.GetType(), nil) + } + return serviceerror.NewInternal(failure.Message) + } + return nil +} + +func updateWorkflowWithStart( + ctx context.Context, + historyClient historyservice.HistoryServiceClient, + namespaceEntry *namespace.Namespace, + workflowType string, + workflowID string, + memo *commonpb.Memo, + input *commonpb.Payloads, + updateRequest *updatepb.Request, + identity string, + requestID string, +) (*updatepb.Outcome, error) { + // Start workflow execution, if it hasn't already + startReq := makeStartRequest(requestID, workflowID, identity, workflowType, namespaceEntry, memo, input) + + updateReq := &workflowservice.UpdateWorkflowExecutionRequest{ + Namespace: namespaceEntry.Name().String(), + WorkflowExecution: &commonpb.WorkflowExecution{ + WorkflowId: workflowID, + }, + Request: updateRequest, + WaitPolicy: &updatepb.WaitPolicy{LifecycleStage: enumspb.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED}, + } + + // This is an atomic operation; if one operation fails, both will. + multiOpReq := &historyservice.ExecuteMultiOperationRequest{ + NamespaceId: namespaceEntry.ID().String(), + WorkflowId: workflowID, + Operations: []*historyservice.ExecuteMultiOperationRequest_Operation{ + { + Operation: &historyservice.ExecuteMultiOperationRequest_Operation_StartWorkflow{ + StartWorkflow: &historyservice.StartWorkflowExecutionRequest{ + NamespaceId: namespaceEntry.ID().String(), + StartRequest: startReq, + }, + }, + }, + { + Operation: &historyservice.ExecuteMultiOperationRequest_Operation_UpdateWorkflow{ + UpdateWorkflow: &historyservice.UpdateWorkflowExecutionRequest{ + NamespaceId: namespaceEntry.ID().String(), + Request: updateReq, + }, + }, + }, + }, + } + + var outcome *updatepb.Outcome + + err := backoff.ThrottleRetryContext(ctx, func(ctx context.Context) error { + // historyClient retries internally on retryable rpc errors, we just have to retry on + // successful but un-completed responses. + res, err := historyClient.ExecuteMultiOperation(ctx, multiOpReq) + if err != nil { + return err + } + + // we should get exactly one of each of these + var startRes *historyservice.StartWorkflowExecutionResponse + var updateRes *workflowservice.UpdateWorkflowExecutionResponse + for _, response := range res.Responses { + if sr := response.GetStartWorkflow(); sr != nil { + startRes = sr + } else if ur := response.GetUpdateWorkflow().GetResponse(); ur != nil { + updateRes = ur + } + } + if startRes == nil { + return serviceerror.NewInternal("failed to start deployment workflow") + } + + if err := convertUpdateFailure(updateRes); err != nil { + return err + } + + outcome = updateRes.GetOutcome() + return nil + }, retryPolicy, isRetryableUpdateError) + + return outcome, err +} + +func convertUpdateFailure(updateRes *workflowservice.UpdateWorkflowExecutionResponse) error { + if updateRes == nil { + return serviceerror.NewInternal("failed to update deployment workflow") + } + + if updateRes.Stage != enumspb.UPDATE_WORKFLOW_EXECUTION_LIFECYCLE_STAGE_COMPLETED { + // update not completed, try again + return errUpdateInProgress + } + + if failure := updateRes.GetOutcome().GetFailure(); failure != nil { + if failure.GetApplicationFailureInfo().GetType() == errLongHistory { + // Retriable + return errWorkflowHistoryTooLong + } else if failure.GetApplicationFailureInfo().GetType() == errVersionDeleted { + // Non-retriable + return serviceerror.NewNotFoundf("Worker Deployment Version not found") + } else if failure.GetApplicationFailureInfo().GetType() == errDeploymentDeleted { + // Non-retriable + return serviceerror.NewNotFoundf("Worker Deployment not found") + } else if failure.GetApplicationFailureInfo().GetType() == errFailedPrecondition { + return serviceerror.NewFailedPrecondition(failure.GetMessage()) + } + + // we let caller handle other update failures + } else if updateRes.GetOutcome().GetSuccess() == nil { + return serviceerror.NewInternal("outcome missing success and failure") + } + return nil +} + +func isRetryableQueryError(err error) bool { + var internalErr *serviceerror.Internal + return api.IsRetryableError(err) && !errors.As(err, &internalErr) +} + +func isRetryableUpdateError(err error) bool { + if errors.Is(err, errUpdateInProgress) || errors.Is(err, errWorkflowHistoryTooLong) || + err.Error() == consts.ErrWorkflowClosing.Error() || err.Error() == update2.AbortedByServerErr.Error() { + return true + } + + var errResourceExhausted *serviceerror.ResourceExhausted + if errors.As(err, &errResourceExhausted) && + (errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT || + errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW) { + // We're hitting the max concurrent update limit for the wf. Retrying will eventually succeed. + return true + } + + var errWfNotReady *serviceerror.WorkflowNotReady + if errors.As(err, &errWfNotReady) { + // Update edge cases, can retry. + return true + } + + // All updates that are admitted as the workflow is closing due to CaN are considered retryable. + // The ErrWorkflowClosing and ResourceExhausted could be nested. + var errMultiOps *serviceerror.MultiOperationExecution + if errors.As(err, &errMultiOps) { + for _, e := range errMultiOps.OperationErrors() { + if errors.As(e, &errResourceExhausted) && + (errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT || + errResourceExhausted.Cause == enumspb.RESOURCE_EXHAUSTED_CAUSE_BUSY_WORKFLOW) { + // We're hitting the max concurrent update limit for the wf. Retrying will eventually succeed. + return true + } + if e.Error() == consts.ErrWorkflowClosing.Error() || e.Error() == update2.AbortedByServerErr.Error() { + return true + } + } + } + return false +} + +func makeStartRequest( + requestID, workflowID, identity, workflowType string, + namespaceEntry *namespace.Namespace, + memo *commonpb.Memo, + input *commonpb.Payloads, +) *workflowservice.StartWorkflowExecutionRequest { + return &workflowservice.StartWorkflowExecutionRequest{ + RequestId: requestID, + Namespace: namespaceEntry.Name().String(), + WorkflowId: workflowID, + WorkflowType: &commonpb.WorkflowType{Name: workflowType}, + TaskQueue: &taskqueuepb.TaskQueue{Name: primitives.PerNSWorkerTaskQueue}, + Input: input, + WorkflowIdReusePolicy: enumspb.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE, + WorkflowIdConflictPolicy: enumspb.WORKFLOW_ID_CONFLICT_POLICY_USE_EXISTING, + SearchAttributes: buildSearchAttributes(), + Memo: memo, + Identity: identity, + } +} + +func buildSearchAttributes() *commonpb.SearchAttributes { + sa := &commonpb.SearchAttributes{} + searchattribute.AddSearchAttribute(&sa, sadefs.TemporalNamespaceDivision, payload.EncodeString(WorkerDeploymentNamespaceDivision)) + return sa +} diff --git a/service/worker/workerdeployment/version_activities.go b/service/worker/workerdeployment/version_activities.go index b345bbe393..c81311d9a9 100644 --- a/service/worker/workerdeployment/version_activities.go +++ b/service/worker/workerdeployment/version_activities.go @@ -49,7 +49,6 @@ func (a *VersionActivities) SyncDeploymentVersionUserData( ctx context.Context, input *deploymentspb.SyncDeploymentVersionUserDataRequest, ) (*deploymentspb.SyncDeploymentVersionUserDataResponse, error) { - //fmt.Printf("syncing task queue userdata rn %d for deployment version %s\n", input.GetUpdateRoutingConfig().GetRevisionNumber(), input.GetVersion().GetBuildId()) logger := activity.GetLogger(ctx) errs := make(chan error) @@ -113,7 +112,6 @@ func (a *VersionActivities) SyncDeploymentVersionUserData( } func (a *VersionActivities) CheckWorkerDeploymentUserDataPropagation(ctx context.Context, input *deploymentspb.CheckWorkerDeploymentUserDataPropagationRequest) error { - //fmt.Printf("checking userdata propagation\n") logger := activity.GetLogger(ctx) errs := make(chan error) diff --git a/service/worker/workerdeployment/version_workflow.go b/service/worker/workerdeployment/version_workflow.go index abae0f15ec..163db1f47b 100644 --- a/service/worker/workerdeployment/version_workflow.go +++ b/service/worker/workerdeployment/version_workflow.go @@ -208,6 +208,7 @@ func (d *VersionWorkflowRunner) run(ctx workflow.Context) error { // We should not start the deployment workflow. If we cannot find the deployment workflow when signaling, it means a bug and we should fix it. if !d.hasMinVersion(VersionDataRevisionNumber) { // First ensure deployment workflow is running + //nolint:staticcheck // SA1019 if !d.VersionState.StartedDeploymentWorkflow { activityCtx := workflow.WithActivityOptions(ctx, defaultActivityOptions) err := workflow.ExecuteActivity(activityCtx, d.a.StartWorkerDeploymentWorkflow, &deploymentspb.StartWorkerDeploymentRequest{ @@ -217,6 +218,7 @@ func (d *VersionWorkflowRunner) run(ctx workflow.Context) error { if err != nil { return err } + //nolint:staticcheck // SA1019 d.VersionState.StartedDeploymentWorkflow = true } } @@ -347,6 +349,7 @@ func (d *VersionWorkflowRunner) handleDeleteVersion(ctx workflow.Context, args * if !d.hasMinVersion(VersionDataRevisionNumber) { // wait until deployment workflow started + //nolint:staticcheck // SA1019 err = workflow.Await(ctx, func() bool { return d.VersionState.StartedDeploymentWorkflow }) if err != nil { d.logger.Error("Update canceled before worker deployment workflow started") @@ -365,7 +368,7 @@ func (d *VersionWorkflowRunner) handleDeleteVersion(ctx workflow.Context, args * if !args.SkipDrainage { if d.GetVersionState().GetDrainageInfo().GetStatus() == enumspb.VERSION_DRAINAGE_STATUS_DRAINING { // activity won't retry on this error since version not eligible for deletion - return serviceerror.NewFailedPrecondition(ErrVersionIsDraining) + return temporal.NewNonRetryableApplicationError(fmt.Sprintf(ErrVersionIsDraining, worker_versioning.WorkerDeploymentVersionToStringV32(d.VersionState.GetVersion())), errVersionIsDraining, nil) } } @@ -373,7 +376,7 @@ func (d *VersionWorkflowRunner) handleDeleteVersion(ctx workflow.Context, args * hasPollers, err := d.doesVersionHaveActivePollers(ctx) if hasPollers { // activity won't retry on this error since version not eligible for deletion - return serviceerror.NewFailedPrecondition(ErrVersionHasPollers) + return temporal.NewNonRetryableApplicationError(fmt.Sprintf(ErrVersionHasPollers, worker_versioning.WorkerDeploymentVersionToStringV32(d.VersionState.GetVersion())), errVersionHasPollers, nil) } if err != nil { // some other error allowing activity retries @@ -481,9 +484,7 @@ func (d *VersionWorkflowRunner) doesVersionHaveActivePollers(ctx workflow.Contex } func (d *VersionWorkflowRunner) validateRegisterWorker(args *deploymentspb.RegisterWorkerInVersionArgs) error { - if err := d.ensureNotDeleted(); err != nil { - return err - } + // Should not ensure not deleted, instead the version would revive if deleted. if _, ok := d.VersionState.TaskQueueFamilies[args.TaskQueueName].GetTaskQueues()[int32(args.TaskQueueType)]; ok { return temporal.NewApplicationError("task queue already exists in deployment version", errNoChangeType) @@ -498,8 +499,11 @@ func (d *VersionWorkflowRunner) validateRegisterWorker(args *deploymentspb.Regis } func (d *VersionWorkflowRunner) handleRegisterWorker(ctx workflow.Context, args *deploymentspb.RegisterWorkerInVersionArgs) error { - if err := d.preUpdateChecks(ctx); err != nil { - return err + // Should not ensure not deleted, instead the version would revive if deleted. + if workflow.GetInfo(ctx).GetContinueAsNewSuggested() { + // History is too large, do not accept new updates until wf CaNs. + // Since this needs workflow context we cannot do it in validators. + return temporal.NewApplicationError(errLongHistory, errLongHistory) } // use lock to enforce only one update at a time diff --git a/service/worker/workerdeployment/version_workflow_test.go b/service/worker/workerdeployment/version_workflow_test.go index f58ad7cbee..b59d5783e8 100644 --- a/service/worker/workerdeployment/version_workflow_test.go +++ b/service/worker/workerdeployment/version_workflow_test.go @@ -10,6 +10,7 @@ import ( "github.com/stretchr/testify/suite" deploymentpb "go.temporal.io/api/deployment/v1" enumspb "go.temporal.io/api/enums/v1" + "go.temporal.io/sdk/temporal" "go.temporal.io/sdk/testsuite" "go.temporal.io/sdk/workflow" deploymentspb "go.temporal.io/server/api/deployment/v1" @@ -552,7 +553,9 @@ func (s *VersionWorkflowSuite) Test_DeleteVersion_FailsWhenDraining() { OnAccept: func() {}, OnComplete: func(result interface{}, err error) { s.Require().Error(err, "delete version should fail when version is draining") - s.Contains(err.Error(), ErrVersionIsDraining) + var applicationError *temporal.ApplicationError + s.Require().ErrorAs(err, &applicationError) + s.Equal(errVersionIsDraining, applicationError.Type()) }, }, deleteArgs) }, 1*time.Millisecond) @@ -683,7 +686,9 @@ func (s *VersionWorkflowSuite) Test_DeleteVersion_FailsWithActivePollers() { OnAccept: func() {}, OnComplete: func(result interface{}, err error) { s.Require().Error(err, "delete version should fail when version has active pollers") - s.Contains(err.Error(), ErrVersionHasPollers) + var applicationError *temporal.ApplicationError + s.Require().ErrorAs(err, &applicationError) + s.Equal(errVersionHasPollers, applicationError.Type()) }, }, deleteArgs) }, 1*time.Millisecond) diff --git a/service/worker/workerdeployment/workflow.go b/service/worker/workerdeployment/workflow.go index 71453c0afa..06a7cb03cc 100644 --- a/service/worker/workerdeployment/workflow.go +++ b/service/worker/workerdeployment/workflow.go @@ -47,9 +47,9 @@ type ( stateChanged bool signalHandler *SignalHandler forceCAN bool - // Tracks the version of the deployment workflow when a particular run of a workflow starts base on the dynamic config of the - // worker who completes the first task of the workflow. `workflowVersion` remains the same until the workflow CaNs when it - // will get another chance to pick the latest manager version. + // 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. workflowVersion DeploymentWorkflowVersion } ) @@ -434,6 +434,11 @@ func (d *WorkflowRunner) addVersionToWorkerDeployment(ctx workflow.Context, args } func (d *WorkflowRunner) handleRegisterWorker(ctx workflow.Context, args *deploymentspb.RegisterWorkerInWorkerDeploymentArgs) error { + // TODO: there is a small race condition where the deployment is just deleted and got a register update before closing itself. + // In that case, we should ideally not reject the update, but revive the workflow so that the caller does not need to retry. + // In practice this should be fine because the polls will retry and Deployment workflows are short-lived. + // Same principle applies for Version workflows, but they can be slightly more long-lived of they are handling long propagations. + // Hence, the revive logic is implemented in Version workflow but not here yet. if err := d.ensureNotDeleted(); err != nil { return err } @@ -899,6 +904,12 @@ func (d *WorkflowRunner) deleteVersion(ctx workflow.Context, args *deploymentspb AsyncPropagation: d.hasMinVersion(AsyncSetCurrentAndRamping), }).Get(ctx, &res) if err != nil { + var activityError *temporal.ActivityError + var applicationError *temporal.ApplicationError + if errors.As(err, &activityError) && errors.As(activityError.Unwrap(), &applicationError) && + (applicationError.Type() == errVersionHasPollers || applicationError.Type() == errVersionIsDraining) { + return serviceerror.NewFailedPrecondition(applicationError.Message()) + } return err } // update local state diff --git a/tests/worker_deployment_test.go b/tests/worker_deployment_test.go index da637d88bf..be637f0440 100644 --- a/tests/worker_deployment_test.go +++ b/tests/worker_deployment_test.go @@ -40,12 +40,12 @@ type ( func TestWorkerDeploymentSuite(t *testing.T) { t.Parallel() - //t.Run("sync", func(t *testing.T) { - // suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.InitialVersion}) - //}) - //t.Run("async", func(t *testing.T) { - // suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.AsyncSetCurrentAndRamping}) - //}) + t.Run("sync", func(t *testing.T) { + suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.InitialVersion}) + }) + t.Run("async", func(t *testing.T) { + suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.AsyncSetCurrentAndRamping}) + }) t.Run("version_rev_no", func(t *testing.T) { suite.Run(t, &WorkerDeploymentSuite{workflowVersion: workerdeployment.VersionDataRevisionNumber}) }) @@ -73,7 +73,6 @@ func (s *WorkerDeploymentSuite) SetupSuite() { dynamicconfig.MatchingMaxTaskQueuesInDeploymentVersion.Key(): 1000, dynamicconfig.VisibilityPersistenceSlowQueryThreshold.Key(): 60 * time.Second, - //dynamicconfig.WorkflowExecutionMaxInFlightUpdates.Key(): 1000, })) } @@ -2005,7 +2004,7 @@ func (s *WorkerDeploymentSuite) TestConcurrentPollers_ManyTaskQueues_RapidRoutin s.OverrideDynamicConfig(dynamicconfig.MatchingMaxTaskQueuesInDeploymentVersion, numTaskQueues) s.InjectHook(testhooks.TaskQueuesInDeploymentSyncBatchSize, syncBatchSize) - s.InjectHook(testhooks.MatchingTaskQueueRegistrationBackoffDuration, time.Millisecond*500) + s.InjectHook(testhooks.MatchingDeploymentRegisterErrorBackoff, time.Millisecond*500) // Need to increase max pending activities because it is set only to 10 for functional tests. it's 2000 by default. s.OverrideDynamicConfig(dynamicconfig.NumPendingActivitiesLimitError, numOperations) @@ -2029,9 +2028,13 @@ func (s *WorkerDeploymentSuite) TestConcurrentPollers_ManyTaskQueues_RapidRoutin // Send new pollers regularly, this is needed because the registration might take more time than initial pollers t := time.NewTicker(10 * time.Second) go func() { - select { - case <-t.C: - sendPollers() + for { + select { + case <-t.C: + sendPollers() + case <-pollCtx.Done(): + return + } } }() @@ -2046,7 +2049,7 @@ func (s *WorkerDeploymentSuite) TestConcurrentPollers_ManyTaskQueues_RapidRoutin }) a.NoError(err) a.NotNil(resp.GetWorkerDeploymentInfo()) - a.Equal(i+1, len(resp.GetWorkerDeploymentInfo().GetVersionSummaries())) + a.Len(resp.GetWorkerDeploymentInfo().GetVersionSummaries(), i+1) }, 3*time.Minute, 500*time.Millisecond) fmt.Printf(">>> Time taken version %d added: %v\n", i, time.Since(start)) @@ -2058,7 +2061,7 @@ func (s *WorkerDeploymentSuite) TestConcurrentPollers_ManyTaskQueues_RapidRoutin DeploymentVersion: tv.WithBuildIDNumber(i).ExternalDeploymentVersion(), }) a.NoError(err) - a.Equal(numTaskQueues, len(resp.GetVersionTaskQueues())) + a.Len(resp.GetVersionTaskQueues(), numTaskQueues) }, 5*time.Minute, 1000*time.Millisecond) t.Stop() @@ -2099,7 +2102,7 @@ func (s *WorkerDeploymentSuite) TestConcurrentPollers_ManyTaskQueues_RapidRoutin } if common.IsResourceExhausted(err) { fmt.Printf("ResourceExhausted error, retrying operation %d\n", i) - time.Sleep(100 * time.Millisecond) + time.Sleep(100 * time.Millisecond) //nolint:forbidigo // throttling requests continue } s.NoError(err) @@ -2137,8 +2140,8 @@ func (s *WorkerDeploymentSuite) TestConcurrentPollers_ManyTaskQueues_RapidRoutin TaskQueue: tqTV.TaskQueue().GetName(), }) s.NoError(err) - s.Equal(1, len(tqUD.GetUserData().GetData().GetPerType())) - s.Equal(1, len(tqUD.GetUserData().GetData().GetPerType()[int32(tqTypeWf)].GetDeploymentData().GetDeploymentsData())) + s.Len(tqUD.GetUserData().GetData().GetPerType(), 1) + s.Len(tqUD.GetUserData().GetData().GetPerType()[int32(tqTypeWf)].GetDeploymentData().GetDeploymentsData(), 1) s.ProtoEqual(latestRoutingConfig, tqUD.GetUserData().GetData().GetPerType()[int32(tqTypeWf)].GetDeploymentData().GetDeploymentsData()[dn].GetRoutingConfig()) } }