({
payload,
correlation,
workflowRecord,
actorUserId,
loggingSession,
requestId,
executionId,
asyncTimeout,
}: {
payload: ScheduleExecutionPayload
correlation: AsyncExecutionCorrelation
workflowRecord: WorkflowRecord
actorUserId: string
loggingSession: LoggingSession
requestId: string
executionId: string
asyncTimeout?: number
})
| 336 | } |
| 337 | |
| 338 | async function runWorkflowExecution({ |
| 339 | payload, |
| 340 | correlation, |
| 341 | workflowRecord, |
| 342 | actorUserId, |
| 343 | loggingSession, |
| 344 | requestId, |
| 345 | executionId, |
| 346 | asyncTimeout, |
| 347 | }: { |
| 348 | payload: ScheduleExecutionPayload |
| 349 | correlation: AsyncExecutionCorrelation |
| 350 | workflowRecord: WorkflowRecord |
| 351 | actorUserId: string |
| 352 | loggingSession: LoggingSession |
| 353 | requestId: string |
| 354 | executionId: string |
| 355 | asyncTimeout?: number |
| 356 | }): Promise<RunWorkflowResult> { |
| 357 | let workflowCoreStarted = false |
| 358 | try { |
| 359 | const deployedData = await loadDeployedWorkflowState( |
| 360 | payload.workflowId, |
| 361 | workflowRecord.workspaceId ?? undefined |
| 362 | ) |
| 363 | |
| 364 | const blocks = deployedData.blocks |
| 365 | const { deploymentVersionId } = deployedData |
| 366 | if (payload.deploymentVersionId && deploymentVersionId !== payload.deploymentVersionId) { |
| 367 | logger.info(`[${requestId}] Loaded deployment no longer matches queued schedule, skipping`, { |
| 368 | scheduleId: payload.scheduleId, |
| 369 | workflowId: payload.workflowId, |
| 370 | queuedDeploymentVersionId: payload.deploymentVersionId, |
| 371 | loadedDeploymentVersionId: deploymentVersionId, |
| 372 | }) |
| 373 | return { |
| 374 | status: 'skip', |
| 375 | reason: 'stale_deployment', |
| 376 | blocks: {} as Record<string, BlockState>, |
| 377 | } |
| 378 | } |
| 379 | logger.info(`[${requestId}] Loaded deployed workflow ${payload.workflowId}`) |
| 380 | |
| 381 | if (payload.blockId) { |
| 382 | if (!blocks[payload.blockId]) { |
| 383 | logger.warn( |
| 384 | `[${requestId}] Schedule trigger block ${payload.blockId} not found in deployed workflow ${payload.workflowId}. Skipping execution.` |
| 385 | ) |
| 386 | |
| 387 | return { |
| 388 | status: 'skip', |
| 389 | reason: 'invalid_schedule', |
| 390 | blocks: {} as Record<string, BlockState>, |
| 391 | } |
| 392 | } |
| 393 | } |
| 394 | |
| 395 | const workspaceId = workflowRecord.workspaceId |
no test coverage detected