274
}
275
277
>
prevLastWriteVersion := rand.Int63()
278
>
branchToken, prevSnapshot, prevEvents := s.CreateWorkflow(
279
>
prevLastWriteVersion,
280
>
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED,
281
>
enumspb.WORKFLOW_EXECUTION_STATUS_COMPLETED,
282
>
rand.Int63(),
283
>
)
284
>
285
>
_, err := s.ExecutionManager.CreateWorkflowExecution(s.Ctx, &p.CreateWorkflowExecutionRequest{
286
>
ShardID: s.ShardID,
287
>
RangeID: s.RangeID,
288
>
Mode: p.CreateWorkflowModeUpdateCurrent,
289
>
290
>
PreviousRunID: uuid.New().String(),
291
>
PreviousLastWriteVersion: rand.Int63(),
292
>
293
>
ArchetypeID: chasm.WorkflowArchetypeID,
294
>
295
>
NewWorkflowSnapshot: *prevSnapshot,
296
>
NewWorkflowEvents: prevEvents,
297
>
})
298
>
if err, ok := err.(*p.CurrentWorkflowConditionFailedError); ok {
299
>
err.Msg = ""
300
>
}
301
>
s.DeepEqual(&p.CurrentWorkflowConditionFailedError{
302
>
Msg: "",
303
>
RequestIDs: prevSnapshot.ExecutionState.RequestIds,
304
>
RunID: prevSnapshot.ExecutionState.RunId,
305
>
State: prevSnapshot.ExecutionState.State,
306
>
Status: prevSnapshot.ExecutionState.Status,
307
>
LastWriteVersion: prevLastWriteVersion,
308
>
StartTime: timestamp.TimeValuePtr(prevSnapshot.ExecutionState.StartTime),
309
>
}, err)
310
>
311
>
// A failed CreateWorkflowExecution must not mutate the caller's snapshot. It previously leaked
312
>
// its HistorySize increment into prevSnapshot, which double-counted on a retry that reused it;
313
>
// AssertMSEqualWithDB fails if the snapshot diverges from the persisted state, guarding that.
314
>
s.AssertMSEqualWithDB(chasm.WorkflowArchetypeID, prevSnapshot)
315
>
s.AssertHEEqualWithDB(branchToken, prevEvents)
316
}
317