windmill-labs/windmill · error

Problem by joining handle

Error message

Problem by joining handle

What it means

Raised by handle_python_reqs when joining the tokio task that finalizes the venv (writing the .valid.windmill marker after a successful install) fails — the future panicked or was cancelled. Without joining, the code cannot know whether the cache-validity marker was written, so the install is treated as failed rather than silently publishing an unverifiable cache entry.

Source

Thrown at backend/windmill-worker/src/python_executor.rs:3185

            let valid_path = venv_p.clone() + "/.valid.windmill";
            // This is atomic operation, meaning, that it either completes and wheel is valid,
            // or it does not and wheel is invalid and will be reinstalled next run
            if let Err(e) = File::create(&valid_path).await{
                tracing::error!(
                workspace_id = %w_id,
                job_id = %job_id,
                    "Failed to create {}!\n{e}\n
                    This file needed for python jobs to function", valid_path)
            };
            Ok(())
        }));
    }

    let (mut failed, mut oom_killed) = (false, false);
    for (handle, (_, venv_p)) in handles.into_iter().zip(req_with_penv.into_iter()) {
        if let Err(e) = handle
            .await
            .unwrap_or(Err(Error::from(anyhow!("Problem by joining handle"))))
        {
            failed = true;

            // OOM code is 9 or 137
            if matches!(e, Error::ExitStatus(_, 9 | 137)) {
                oom_killed = true;
            }

            append_logs(
                &job_id,
                w_id,
                format!("\nEnv installation failed: {:?}", e),
                conn,
            )
            .await;
            tracing::warn!(
                workspace_id = %w_id,
                "Env installation failed: {:?}",

View on GitHub (pinned to e474e8803c)

Solutions

  1. Retry the dependency installation — the venv will be rebuilt without a valid marker
  2. Inspect worker logs for a panic inside the install-finalization task
  3. Check worker resource limits (memory, task cancellation) if it recurs
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at backend/windmill-worker/src/python_executor.rs:3185 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/8ff84f01abcba148. Report an issue: GitHub.