Skip to content

kuzu: Add version 0.11.3 - #2334

Open
luhenry wants to merge 2 commits into
mainfrom
kuzu
Open

luhenry wants to merge 2 commits into
mainfrom
kuzu

Conversation

@luhenry

@luhenry luhenry commented Sep 25, 2026 •

Copy link
Copy Markdown
Member

Compiles Kuzu's C++ graph database core, four bundled extensions and the pybind11 module. Upstream publishes no riscv64 wheel.

Mirrors upstream's package-python-sdist job and linux-wheel-workflow.yml.

Differs from upstream

  • Wheel built with cibuildwheel from the sdist - upstream's build script lives on their runners, not in the repo
  • Vendored libraries' licence files added to the wheel

Testing

  • pyarrow 25 instead of ~=20 - only riscv64 build
  • cp314t: no pandas/polars, so the tests importing them are skipped
  • test_extension.py skipped - downloads prebuilt extensions from upstream's server, none for riscv64

License: Wheel statically links ~20 vendored libraries (MIT, BSD, Apache-2.0, Zlib); upstream ships no licence text for them, so the build adds it.

Patches

  • 0001-storage-shrink-the-VMRegion-reservation-until-it-fits.patch - To upstream (kuzudb/kuzu is archived). The default 8TB mmap does not fit the 256GB Sv39 address space, so every Database() fails. Reproduces on x86 under ulimit -v.

Rehearsed on x86 with the PyPI wheel; 212 passed.

Mirrors upstream's package-python-sdist job (scripts/pip-package/
package_tar.py on ubuntu-latest) and the manylinux wheel build it feeds,
narrowed to manylinux_riscv64 and cp312/cp313/cp314/cp314t. The wheel
is built from that sdist; the tag's dataset/ and tools/python_api/test
are checked out beside it for upstream's pytest suite.

- 0001 halves the buffer manager's mmap reservation on ENOMEM. The
  Python API defaults max_db_size to 8TB, which does not fit in the
  256GB user address space of riscv64 Sv39, so every default Database()
  throws "Mmap for size 8796093022208 failed." (reproduced on x86-64
  with the PyPI wheel under `ulimit -v 268435456`). kuzudb/kuzu is
  archived, so it cannot be sent upstream.
- The wheel statically links ~20 vendored third_party libraries but
  upstream ships only kuzu's own LICENSE; their licence files are
  copied to the sdist root as LICENSE.<dep> and asserted in the wheel.
- Tests: upstream's requirements_dev.txt deps, except pyarrow (25 is
  the only riscv64 build) and pandas/polars on cp314t (no wheels);
  test_extension.py is skipped as it downloads prebuilt extensions
  from upstream's server, which has none for riscv64.

Rehearsed on x86-64 with the PyPI 0.11.3 wheel and exactly this test
layout and dependency set: 212 passed (107 with the cp314t set).
luhenry added a commit that referenced this pull request Sep 25, 2026
@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor
PR Preview Action v1.8.1

QR code for preview link

🚀 View preview at
https://riseproject-dev.github.io/python-wheels/pr-preview/pr-2334/

Built to branch gh-pages at 2026-09-25 20:44 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

cp312 and cp313 both failed only test_connection_interrupt (211 other
tests passed, so the VMRegion patch from gotcha 572 works; this is not
another address-space reservation). The test interrupts a
RANGE(1,1000000) x RANGE(1,1000000) query once, 5s after starting it.
Binding constant-folds each RANGE into a million-element list literal,
and on the riscv64 runners compiling the query takes longer than 5s.
executeNoLock() then calls resetActiveQuery(), which clears the
interrupted flag, so the interrupt is lost and the query runs to
completion: the assertion fails after 100s, and the interpreter waits
~1h55m at exit for the non-daemon query thread. That wait is why the
jobs ran 4+ hours.

This is gotcha 38 (a slow runner turns a latent test race into a hard
failure). Patch the test to repeat the interrupt every second within
the same 100s budget, and apply test patches to the checkout
CIBW_TEST_SOURCES copies the tests from as well as to the sdist.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant