Skip to content

Bump langchain-oceanbase to pick up non-blocking async checkpointer (upstream PR #150) #46

Description

@webup

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)

  • Bump langchain-oceanbase==0.5.2 to the new version in pyproject.tomltwo places: the base dependency and the [pyseekdb] extra.
  • Add best-effort cleanup for the new executor: DatabaseManager.close() (src/agentseek_api/core/database.py) disposes engines but does nothing for self._langgraph_checkpointer. After upgrade, call its close() if present to avoid leaking worker threads.
  • Re-run the checkpoint/e2e suite against real SeekDB/OceanBase to confirm no regression.

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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions