596
ctx context.Context,
597
request *persistence.UpdateWorkflowExecutionRequest,
598
>
) (*persistence.UpdateWorkflowExecutionResponse, error) {
context_impl.go
599
>
// do not try to get namespace cache within shard lock
600
>
namespaceID := namespace.ID(request.UpdateWorkflowMutation.ExecutionInfo.NamespaceId)
601
>
namespaceEntry, err := s.GetNamespaceRegistry().GetNamespaceByID(namespaceID)
602
>
if err != nil {
603
return nil, err
604
}
605
607
return nil, err
608
}
610
>
611
>
s.wLock()
612
>
613
>
// timeout check should be done within the shard lock, in case of shard lock contention
614
>
ctx, cancel, err := s.newDetachedContext(ctx)
615
>
if err != nil {
616
s.wUnlock()
617
return nil, err
618
}
620
>
621
>
if err := s.errorByState(); err != nil {
622
s.wUnlock()
623
return nil, err
624
}
625
626
>
if err := s.errorByNamespaceStateLocked(namespaceEntry.Name(), request.UpdateWorkflowMutation.ExecutionInfo.WorkflowId); err != nil {
context_impl.go
627
s.wUnlock()
628
return nil, err
629
}
630
631
>
taskMaps := make([]map[tasks.Category][]tasks.Task, 0, 2)
context_impl.go
632
>
taskMaps = append(taskMaps, request.UpdateWorkflowMutation.Tasks)
633
>
if request.NewWorkflowSnapshot != nil {
634
taskMaps = append(taskMaps, request.NewWorkflowSnapshot.Tasks)
635
}
636
>
requestCompletionFn, err := s.taskKeyManager.setAndTrackTaskKeys(taskMaps...)
context_impl.go
637
>
if err != nil {
638
s.wUnlock()
639
return nil, err
640
}
641
>
s.updateCloseTaskIDs(request.UpdateWorkflowMutation.ExecutionInfo, request.UpdateWorkflowMutation.Tasks)
context_impl.go
642
>
if request.NewWorkflowSnapshot != nil {
643
s.updateCloseTaskIDs(request.NewWorkflowSnapshot.ExecutionInfo, request.NewWorkflowSnapshot.Tasks)
644
}
645
647
>
s.wUnlock()
648
>
649
>
resp, err := s.executionManager.UpdateWorkflowExecution(ctx, request)
650
>
requestCompletionFn(err)
651
>
if err = s.handleWriteError(request.RangeID, err); err != nil {
652
return nil, err
653
}