fix(session): serialize canonical file access (#5383)
This commit is contained in:
+13
-16
@@ -769,28 +769,25 @@ class MemoryStore:
|
||||
return f"{prefix}\n\n{diff_body}"
|
||||
|
||||
@staticmethod
|
||||
def prune_dream_sessions(sessions_dir: Path, *, keep: int = 10) -> None:
|
||||
def prune_dream_sessions(sessions: SessionManager, *, keep: int = 10) -> None:
|
||||
"""Remove the oldest Dream session files, keeping only the N most recent.
|
||||
|
||||
Only current base64url-encoded Dream session keys are considered.
|
||||
Non-dream session files are never touched.
|
||||
"""
|
||||
dream_files: list[Path] = []
|
||||
for path in sessions_dir.glob("*.jsonl"):
|
||||
decoded_key = SessionManager.decode_storage_key(path.stem)
|
||||
if decoded_key is not None and decoded_key.startswith("dream:"):
|
||||
dream_files.append(path)
|
||||
dream_files.sort(key=lambda p: p.stat().st_mtime)
|
||||
if len(dream_files) <= keep:
|
||||
return
|
||||
with sessions.locked_session_files() as sessions_dir:
|
||||
dream_files: list[tuple[Path, str]] = []
|
||||
for path in sessions_dir.glob("*.jsonl"):
|
||||
decoded_key = SessionManager.decode_storage_key(path.stem)
|
||||
if decoded_key is not None and decoded_key.startswith("dream:"):
|
||||
dream_files.append((path, decoded_key))
|
||||
dream_files.sort(key=lambda item: item[0].stat().st_mtime)
|
||||
|
||||
to_remove = dream_files[: len(dream_files) - keep]
|
||||
for path in to_remove:
|
||||
try:
|
||||
path.unlink()
|
||||
logger.debug("Pruned old dream session: {}", path.stem)
|
||||
except OSError:
|
||||
logger.warning("Failed to prune dream session {}", path)
|
||||
for path, key in dream_files[: max(0, len(dream_files) - keep)]:
|
||||
if sessions.delete_session(key):
|
||||
logger.debug("Pruned old dream session: {}", path.stem)
|
||||
else:
|
||||
logger.warning("Failed to prune dream session {}", path)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user