Conversation
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
Contributor
|
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
kuzu0.11.3Compiles Kuzu's C++ graph database core, four bundled extensions and the pybind11 module. Upstream publishes no riscv64 wheel.
Mirrors upstream's
package-python-sdistjob andlinux-wheel-workflow.yml.Differs from upstream
Testing
test_extension.pyskipped - downloads prebuilt extensions from upstream's server, none for riscv64License: 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 everyDatabase()fails. Reproduces on x86 underulimit -v.Rehearsed on x86 with the PyPI wheel; 212 passed.