Python: FileSessionStore.set fails on Windows for long session IDs because its temp file name is 38 characters longer than the snapshot
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
Piste de recherche
Lisez FileSessionStore.set() et _session_file_path() dans le stockage de sessions Python, puis examinez tests/core/test_sessions.py, en particulier TestFileSessionStore::test_opaque_session_id_round_trips_through_safe_filename. Reproduisez l’échec lié aux chemins longs sous Windows décrit dans l’issue et comparez le nommage du fichier temporaire utilisé par FileCheckpointStorage et _filesystem._atomic_write_text. Le travail est terminé lorsqu’un test de régression confirme que le nom temporaire est indépendant de l’ID de session et que la session est enregistrée lorsque les chemins longs sont désactivés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Python
- Étoiles
- 14.3k
- Forks
- 2.5k
- Merge moyen
- 2 j 15 h
- PR mergées (30 j)
- 370
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/agent-framework
-
needs-maintainer-triage python triage
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
microsoft/agent-framework#9742 ·
Les mainteneurs répondent en général sous 1 jour
-
.NET triage
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
microsoft/agent-framework#9704 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Python: foundry-hosting drops request `metadata` from the stored response — `_create_response_event_stream` never passes `request` to `ResponseEventStream`Peut-être pris @its-amann l’a pris il y a 1 jour. Ouvertepython triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
microsoft/agent-framework#9529 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
.NET: Proposal: add an llms.txtOuverte.NET python triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
microsoft/agent-framework#9092 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Python: raw-data content mappings lose annotations and attachment metadataPeut-être pris @moonbox3 l’a pris il y a 27 jours. Ouvertepython triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
microsoft/agent-framework#8632 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de microsoft/agent-framework
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
pydot/pydot#601 · 4 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
letsencrypt/cp-cps#361 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
CI: startup_failure because callers grant fewer permissions than ledger-app-workflows@v1 declaresPeut-être pris @maykonmichel l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
LedgerHQ/app-boilerplate-rust#227 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
linuxmint/mintupdate#1107 ·