GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — DuckDB delta extension install races across parallel tests · Issue #6743 · feast-dev/feast

DuckDB delta extension install races across parallel tests #6743

New issue
Copy link
New issue
Copy link
Closed
#6744
Closed
DuckDB delta extension install races across parallel tests#6743
#6744
Copy link

Description

@larrysingleton007
larrysingleton007
opened on Aug 16, 2026
Issue body actions

Expected Behavior

The DuckDB offline integration suite should run reliably with 8 pytest-xdist workers on a fresh runner.

Current Behavior

DuckDBDelta tests intermittently fail while several workers auto-install the delta extension into the shared ~/.duckdb/extensions directory. The losing worker reports:

_duckdb.IOException: IO Error: Could not set lock on file ".../delta.duckdb_extension.tmp-...duckdb_extension.info": Conflicting lock is held in .../python3.10 (PID ...)

I found the same failure in 3 unrelated Linux CI runs:

  • https://github.com/feast-dev/feast/actions/runs/31946521769
  • https://github.com/feast-dev/feast/actions/runs/30604216643
  • https://github.com/feast-dev/feast/actions/runs/30477658759

The failures affected 2 different DuckDBDelta tests, so this is not tied to one test's behavior.

Steps to reproduce

  1. Start with an empty DuckDB extension cache on Linux.
  2. Install the locked duckdb-tests Pixi environment.
  3. Run pixi run -e duckdb-tests test, which executes the offline integration suite with pytest -n 8.
  4. Several workers may observe that delta is not installed and attempt to install it into the same extension directory.

The race is intermittent. I could not reproduce the lock failure on Apple Silicon macOS, including 80 synchronized cold-cache extension loads, but the 3 GitHub-hosted Linux runs above provide independent positive reproductions.

Specifications

  • Version: current master at f771ea4
  • Platform: GitHub-hosted Linux, linux_amd64
  • Subsystem: DuckDB offline integration tests
  • Locked dependencies: Python 3.10.20, DuckDB 1.5.4, Ibis 12.0.0, pytest-xdist 3.8.0

Possible Solution

Install delta once before starting the parallel test workers. For example, add a serial Pixi task dependency that runs:

python -c "import duckdb; duckdb.connect().install_extension('delta')"

I validated this against a separate cold cache. A fresh Ibis connection reported delta as installed but not loaded, then load_extension("delta") changed only the loaded state. This avoids Ibis's per-worker INSTALL path. The full 8-worker Feast suite then passed with 84 tests passed and 5 skipped.

Worker-specific extension directories would also avoid contention, but would download and install the same extension once per worker.

Activity

  1. larrysingleton007 commented on Aug 16, 2026

    @larrysingleton007
    larrysingleton007
    on Aug 16, 2026
    ContributorAuthor
    More actions

    Implementation plan

    The 8 pytest workers can all decide the DuckDB delta extension is missing and race to install it into the same cache directory.

    I'll add a small Pixi task that installs delta, then make the existing DuckDB integration test task depend on it. Pixi will complete that task before starting pytest, so workers only need to load the installed extension.

    The only source change should be pyproject.toml. I'll verify the task graph, use a separate empty home directory to prove the extension is installed before pytest starts, and run the complete locked DuckDB integration task.

  2. larrysingleton007 commented on Aug 16, 2026

    @larrysingleton007
    larrysingleton007
    on Aug 16, 2026
    ContributorAuthor
    More actions

    Implementation is in #6744.

    The DuckDB test task now depends on a serial delta extension install, so pytest workers start after the shared extension cache is populated.

    Validation used an empty DuckDB cache. Pixi completed the install task before pytest, a fresh connection saw delta as installed and not loaded, and the complete 8-worker suite passed with 84 tests passed and 5 skipped.

  3. ntkathole
    added a commit that references this issue on Aug 18, 2026

    fix: Preinstall DuckDB delta extension for tests

    This issue will close once commit 4805ed6 is merged into the 'master' branch.
    4805ed6
  4. ntkathole
    closed this as completedin fd4d49don Aug 18, 2026
  5. ntkathole
    added a commit that references this issue on Aug 18, 2026

    fix: Preinstall DuckDB delta extension for tests

    This issue will close once commit fd4d49d is merged into the 'master' branch.
    fd4d49d
  6. franciscojavierarceo
    added a commit that references this issue on Aug 21, 2026

    chore(release): release 0.66.0

    1d5be95
  7. Michie-hub
    added 2 commits that reference this issue on Aug 31, 2026

    fix: Preinstall DuckDB delta extension for tests

    This issue will close once commit 018ae42 is merged into the 'master' branch.
    018ae42

    chore(release): release 0.66.0

    This issue will close once commit a29c923 is merged into the 'master' branch.
    a29c923
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      You are visitor 01402503 — GeezerVison does not store the pages you look up.
      Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.