Skip to content

Commit 31b33ff

Browse files
authored
build: exclude pylibseekdb 1.3.0.post1 (hangs embedded checkpointer) (#159)
pylibseekdb 1.3.0.post1 (with pyseekdb 1.3.0) adds a close() interface, but pyobvector's embedded engine wires _SeekdbConnection.close() -> _client._cleanup() and runs under poolclass=NullPool, which closes the DBAPI connection after every checkout. Because the embedded backend is a process-wide singleton, this tears down the shared SeekDB connection after each query; the checkpointer then hangs indefinitely on the repeated open/cleanup cycle (reproduced: conformance suite ~3s on 1.3.0, >4min hang on 1.3.0.post1). Constrain to >=1.3.0,!=1.3.0.post1,<2 so a fresh resolve can't silently pull the broken post-release. Re-allow once pyobvector exposes a one-shot disposal seam that doesn't fire per-connection (upstream issue filed). Lock regenerated with Poetry 2.1.3 (matches CI); resolved versions unchanged.
1 parent f0ef212 commit 31b33ff

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

poetry.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,12 @@ langgraph-checkpoint = ">=3.0.1,<5.0.0"
2727
# >=1.2: unified SeekDB client. Constrain pylibseekdb so the lock resolves to 1.1+ (manylinux + macOS arm64 wheels);
2828
# 1.0.0.post1 is Linux-wheel-only metadata and breaks Poetry on macOS arm64 / some CI installers.
2929
pyseekdb = { version = ">=1.2.0.post1,<3", optional = true }
30-
# >=1.3: fixes segfault in embedded mode when data dirs are reused (oceanbase/seekdb#870)
31-
pylibseekdb = { version = ">=1.3.0,<2", optional = true, markers = "sys_platform == 'linux' or (sys_platform == 'darwin' and platform_machine == 'arm64')" }
30+
# >=1.3: fixes segfault in embedded mode when data dirs are reused (oceanbase/seekdb#870).
31+
# !=1.3.0.post1: that post-release wires a per-connection close()->_cleanup() into
32+
# pyobvector's NullPool embedded engine, tearing down the shared process-wide SeekDB
33+
# singleton after every query and hanging the checkpointer (see oceanbase/pyobvector
34+
# tracking issue). Re-allow once pyobvector exposes a one-shot disposal seam.
35+
pylibseekdb = { version = ">=1.3.0,!=1.3.0.post1,<2", optional = true, markers = "sys_platform == 'linux' or (sys_platform == 'darwin' and platform_machine == 'arm64')" }
3236
pyobvector = [
3337
{ version = ">=0.2.25" },
3438
{ version = ">=0.2.25", extras = ["pyseekdb"], markers = "extra == 'pyseekdb'" },

0 commit comments

Comments
 (0)