Skip to content

Diagnose Airflow runtime startup failures

This runbook helps operators diagnose strict runtime and separate-hook startup without exposing container credentials. Start from the task's base-container log and collect run-volume diagnostics while the containers are still running. See strict delivery for init-fetch failures.

Service files and publication

Both runtime and separate hooks use /var/lib/dpone/run on the provider-owned writable emptyDir. The verified workload and fetched artifacts stay mounted read-only. A non-root image can write the run volume without changing its workload files. The child still uses the verified workload directory as its working directory; a custom hook must place its own writable outputs elsewhere.

File Meaning
runtime-evidence.json Captured child stdout; hooks may emit text rather than JSON
runtime-stderr.log Captured child stderr, also streamed to the Airflow log
runtime-summary.json Local outcome summary, including hooks without XCom
runtime-startup-error.json Safe OS-failure diagnostic when the run volume can be written

Runtime, including dbt, enables KPO XCom and publishes the summary to /airflow/xcom/return.json. KPO supplies the writable XCom volume and sidecar. Separate pre-hooks disable publication and perform no required access to /airflow/xcom. VerifiedPackCommand.publish_xcom defaults to true for existing Python callers; the verified launcher sets it from the execution kind.

SQL hooks with canonical connection_ref use the same pinned binding set, connection registry and credential-runtime context as the main workload. The verified launcher supplies that context automatically. If a separate hook reports DPONE_RUNTIME_CONNECTION_CONTEXT_REQUIRED after successful init-fetch, check that the pinned runtime image includes the hook context-handoff fix, then rebuild and activate the deployment with the matching packages.

Ordinary runtime retains the XCom outcome-gate exit policy. dbt and hooks retain the real child exit code; failed hooks block downstream all_success runtime tasks and do not gain automatic retries. An OS failure in preparation, capture or publication returns nonzero. Kubernetes/Airflow task status and local artifacts remain necessary for a failed task; Airflow only collects XCom from successful KPO tasks.

Read the failure

The DPONE_RUNTIME_PACK_EXEC_FAILED diagnostic includes a stable stage, exception class, numeric errno and a logical service-path role. It omits raw arguments, environment, exception messages and exception filenames. The log is the primary fallback when permissions or a full disk prevent artifact writes. A secondary artifact failure must not hide the original failure.

errno Typical cause Recovery
13 (EACCES) Run/XCom path or executable is inaccessible Inspect admitted mounts, image UID and filesystem permissions for the reported role
2 (ENOENT) Working directory or executable is missing Verify the pinned image entry point and verified workload contents
28 (ENOSPC) Run volume or underlying node storage is full Inspect actual filesystem capacity and node ephemeral-storage pressure; free or increase capacity
30 (EROFS) A required output path is mounted read-only Restore the provider-owned writable service mount

Use the stage to distinguish directory preparation, output-file opening, process start, stderr capture, local summary and XCom publication. A start marker records an attempted launch, not proof that the child started. If a child ran before the error, inspect its evidence and hook side effects before manual retry. Resource declarations and actual disk availability are separate checks; see workload resources.

Retry uses a new task Pod in normal strict delivery. Direct Python callers that reuse a run directory must not run two commands concurrently in it; the wrapper invalidates previous attempt summaries before execution. Run-volume files are ephemeral: kubelet can remove them after all containers stop, even when the Pod object is retained. Configure platform collection during execution; retaining a completed Pod alone does not guarantee that its service files remain available.

dpone airflow runtime-pack-exec is the provider's internal entry point. Running it without the injected verified plan fails with exit 2 and DPONE_INIT_FETCH_PLAN_INVALID; it is not a command to repair a failed Pod. Restore the configuration/image and rebuild through the documented deployment path. Return to the provider overview.