mirror of
https://github.com/TauricResearch/TradingAgents.git
synced 2026-09-19 19:25:24 +03:00
fix(graph): remove the database sidecars when clearing checkpoints
- SQLite keeps committed state in -wal and -shm beside the database
This commit is contained in:
@@ -153,3 +153,20 @@ def test_cli_style_usage_saves_then_resumes():
|
|||||||
|
|
||||||
# Cleared on success -> a later run starts fresh.
|
# Cleared on success -> a later run starts fresh.
|
||||||
assert checkpoint_step(tmp, "AAPL", "2026-05-08", sig) is None
|
assert checkpoint_step(tmp, "AAPL", "2026-05-08", sig) is None
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.unit
|
||||||
|
def test_clearing_removes_the_database_sidecars(tmp_path):
|
||||||
|
"""SQLite writes -wal and -shm next to the database; leaving them behind
|
||||||
|
means a cleared checkpoint still has committed state on disk."""
|
||||||
|
from tradingagents.graph.checkpointer import clear_all_checkpoints
|
||||||
|
|
||||||
|
cp = tmp_path / "checkpoints"
|
||||||
|
cp.mkdir(parents=True)
|
||||||
|
for suffix in (".db", ".db-wal", ".db-shm"):
|
||||||
|
(cp / f"NVDA{suffix}").write_text("x")
|
||||||
|
|
||||||
|
cleared = clear_all_checkpoints(str(tmp_path))
|
||||||
|
|
||||||
|
assert cleared == 1
|
||||||
|
assert list(cp.iterdir()) == []
|
||||||
|
|||||||
@@ -71,13 +71,19 @@ def checkpoint_step(data_dir: str | Path, ticker: str, date: str, signature: str
|
|||||||
|
|
||||||
|
|
||||||
def clear_all_checkpoints(data_dir: str | Path) -> int:
|
def clear_all_checkpoints(data_dir: str | Path) -> int:
|
||||||
"""Remove all checkpoint DBs. Returns number of files deleted."""
|
"""Remove all checkpoint databases. Returns the number of databases deleted.
|
||||||
|
|
||||||
|
SQLite keeps committed state in ``-wal`` and ``-shm`` files beside the
|
||||||
|
database, so deleting only the ``.db`` leaves a cleared checkpoint with data
|
||||||
|
still on disk.
|
||||||
|
"""
|
||||||
cp_dir = Path(data_dir) / "checkpoints"
|
cp_dir = Path(data_dir) / "checkpoints"
|
||||||
if not cp_dir.exists():
|
if not cp_dir.exists():
|
||||||
return 0
|
return 0
|
||||||
dbs = list(cp_dir.glob("*.db"))
|
dbs = list(cp_dir.glob("*.db"))
|
||||||
for db in dbs:
|
for db in dbs:
|
||||||
db.unlink()
|
for path in (db, *cp_dir.glob(f"{db.name}-*")):
|
||||||
|
path.unlink(missing_ok=True)
|
||||||
return len(dbs)
|
return len(dbs)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user