Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Python: FileSessionStore.set fails on Windows for long session IDs because its temp file name is 38 characters longer than the snapshot

Đang mở Phù hợp với người mới
#9,682 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
backend, databases, testing

Hướng nghiên cứu

Đọc FileSessionStore.set() và _session_file_path() trong kho lưu trữ phiên Python, sau đó kiểm tra tests/core/test_sessions.py, đặc biệt là TestFileSessionStore::test_opaque_session_id_round_trips_through_safe_filename. Tái hiện lỗi đường dẫn dài trên Windows được mô tả trong issue và so sánh cách đặt tên tệp tạm được dùng bởi FileCheckpointStorage và _filesystem._atomic_write_text. Hoàn tất khi một bài kiểm thử hồi quy xác nhận tên tệp tạm không phụ thuộc vào ID phiên và phiên được lưu khi đường dẫn dài bị tắt.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

python triage

FileSessionStore.set() writes each snapshot through a sibling temp file named .<snapshot name>.<uuid hex>.tmp, which is 38 characters longer than the snapshot file. On Windows with long paths disabled (the default, LongPathsEnabled = 0), a session ID at MAX_SESSION_ID_LENGTH (128) whose snapshot path fits under the 260-character limit can still fail to save, because the temp path does not fit.

This shows up as a failing unit test on my Windows 11 machine: tests/core/test_sessions.py::TestFileSessionStore::test_opaque_session_id_round_trips_through_safe_filename[xxx...x-False] fails with FileNotFoundError on the .tmp path. CI on windows-latest passes, I believe because GitHub's Windows runners enable long paths.

Minimal repro (Windows, long paths off, agent-framework-core at 67ba500):

import asyncio, tempfile
from pathlib import Path
from agent_framework import AgentSession, FileSessionStore

async def main():
    base = Path(tempfile.mkdtemp())
    sid = "x" * FileSessionStore.MAX_SESSION_ID_LENGTH
    storage = base / ("d" * (240 - (len(str(base)) + 1 + len(sid) + 5) - 1))
    store = FileSessionStore(storage)
    print(len(str(store._session_file_path(sid))))  # 240: the snapshot path itself fits
    await store.set(sid, AgentSession(session_id="s"))  # FileNotFoundError on the .tmp path

asyncio.run(main())

Expected: the session saves, since its snapshot path is under the limit. Actual: FileNotFoundError: [Errno 2] No such file or directory: '...\.xxx...x.json.<uuid>.tmp'.

Environment: Windows 11, Python 3.11.9, agent-framework-core 1.23.0 from main.

Proposed fix: name the temp file .maf-session-<uuid hex>.tmp, independent of the session ID, the way FileCheckpointStorage (.maf-ckpt-<uuid>.tmp) and _filesystem._atomic_write_text (.maf-state-<uuid>.tmp) already do, plus a regression test that checks the temp name does not grow with the ID. I have this ready and would like to open the PR if the direction is fine.

AI assistance: an AI coding assistant helped find the cause and draft this issue; the failing test and the repro above were run on my Windows 11 machine.

Ngôn ngữ chính
Python
Star
14.3k
Fork
2.5k
Merge trung bình
2 ngày 8 giờ
Pull request đã merge (30 ngày)
337

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của microsoft/agent-framework

Tất cả issue của microsoft/agent-framework

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.