Background
Upstream oceanbase/langchain-oceanbase#150 (merged 2026-06-15) wraps all async checkpointer methods (aget_tuple, alist, aput, aput_writes, adelete_thread, aprune) in a configurable ThreadPoolExecutor via loop.run_in_executor(), so they no longer block the event loop. It also adds asetup(), close(), and (async) context-manager support.
We currently pin langchain-oceanbase==0.5.2, which predates this PR (latest release v0.5.2 shipped 2026-06-09; PR #150 merged after and is not yet released). Verified: the installed OceanBaseCheckpointSaver has no close/asetup/__aenter__, and aget_tuple does not offload to an executor.
Why it matters
src/agentseek_api/services/thread_checkpoint_store.py calls the upstream checkpointer's async methods (aget_tuple, alist, aprune, adelete_thread) directly on the event loop. Today those run synchronous DB work inline, blocking the loop. The PR makes them non-blocking — a real latency win once we upgrade.
Action items (once a release > 0.5.2 ships, e.g. 0.5.3)
Notes / out of scope
- Our homegrown
OceanBaseCheckpointSaver in src/agentseek_api/core/oceanbase_checkpointer.py is a separate class (only setup/save_checkpoint, all sync, already offloaded via asyncio.to_thread). It is unrelated to upstream PR #150 and needs no change.
- The upstream method signatures are unchanged, so the bump is expected to be backward-compatible.
Background
Upstream oceanbase/langchain-oceanbase#150 (merged 2026-06-15) wraps all async checkpointer methods (
aget_tuple,alist,aput,aput_writes,adelete_thread,aprune) in a configurableThreadPoolExecutorvialoop.run_in_executor(), so they no longer block the event loop. It also addsasetup(),close(), and (async) context-manager support.We currently pin
langchain-oceanbase==0.5.2, which predates this PR (latest releasev0.5.2shipped 2026-06-09; PR #150 merged after and is not yet released). Verified: the installedOceanBaseCheckpointSaverhas noclose/asetup/__aenter__, andaget_tupledoes not offload to an executor.Why it matters
src/agentseek_api/services/thread_checkpoint_store.pycalls the upstream checkpointer's async methods (aget_tuple,alist,aprune,adelete_thread) directly on the event loop. Today those run synchronous DB work inline, blocking the loop. The PR makes them non-blocking — a real latency win once we upgrade.Action items (once a release > 0.5.2 ships, e.g. 0.5.3)
langchain-oceanbase==0.5.2to the new version inpyproject.toml— two places: the base dependency and the[pyseekdb]extra.DatabaseManager.close()(src/agentseek_api/core/database.py) disposes engines but does nothing forself._langgraph_checkpointer. After upgrade, call itsclose()if present to avoid leaking worker threads.Notes / out of scope
OceanBaseCheckpointSaverinsrc/agentseek_api/core/oceanbase_checkpointer.pyis a separate class (onlysetup/save_checkpoint, all sync, already offloaded viaasyncio.to_thread). It is unrelated to upstream PR #150 and needs no change.