assets: hardlink/copy fallbacks for shared assets are not cleaned up when the source vanishes
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 18/100
Línea de trabajo
The stale-cleanup logic is remove_stale_external_asset_symlinks, and the fallback artifacts are produced in the rx.asset(shared=True) path where asset() raises FileNotFoundError. Read how the external assets directory mirrors the module path, then decide how a hardlink or copy could be recognised as stale. The issue explicitly asks a maintainer to choose between three designs, so it is not ready for a first-time fix; done means a recorded decision, not a patch.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Follow-up from #7703 (Windows fallback for rx.asset(shared=True)).
remove_stale_external_asset_symlinks can identify stale shared assets for free because a symlink whose target is gone is detectable from the destination alone. The new fallbacks lose that property:
- A hardlink whose partner file was deleted still holds the content (the inode survives), and nothing on the destination reveals that the source module is gone.
- A copy is a plain regular file; whether its source still exists is unknowable without provenance.
Consequence: if a library that exposed shared assets is uninstalled (or an asset file is deleted/renamed), the fallback artifact remains in assets/external and keeps being served/symlinked into fresh builds, where the symlink path would have been pruned. Note the compile itself still fails loudly while the module exists but the asset file is missing (FileNotFoundError in asset()), so the gap only shows for uninstalled modules.
Options, roughly in increasing cost:
- Leave as-is: stale files are cruft, not corruption.
- Provenance sidecar (e.g. a parallel non-served metadata tree) — doubles the tree and needs its own sync/cleanup.
- Derive the source location from the destination path (external dir mirrors
module_path/asset), import the module to locate the caller file, and check existence — avoids metadata but imports arbitrary modules during cleanup.
Marking this up for a maintainer call rather than picking one inside the fallback PR.
- Lenguaje dominante
- Python
- Estrellas
- 29k
- Forks
- 1.8k
- Merge medio
- 2 d 22 h
- PR fusionados (30 d)
- 143
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de reflex-dev/reflex
-
Operations on a list[T] | None var throw when the value is NonePosiblemente ocupada @masenf la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
reflex-dev/reflex#7826 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
A dev run stopped before its backend loads leaves .web/nocompile, so the next run or export skips the compilePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
reflex-dev/reflex#7825 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
PropsBase nested serialization applies parent include/exclude filters to child fieldsPosiblemente ocupada @harsh21234i la tomó hace 1 día. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
reflex-dev/reflex#7787 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
OTel: add trace_flags to JSON log records so unsampled trace ids are recognizablePosiblemente ocupada @ShaanGS la tomó hace 7 días. Abiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
reflex-dev/reflex#7729 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
0.9.12 changelog follow-ups: the #7132 "_get_was_touched" entry describes unreachable behaviour, #7115's hasattr/getattr change is undocumented, #7131's wordingQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
reflex-dev/reflex#7260 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de reflex-dev/reflex
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
UKGovernmentBEIS/inspect_ai#6512 ·
Los mantenedores suelen responder en 1 día
-
area/c++ area/core kind/bug-report
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
tensorflow/quantum#1140 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
Kav-K/GPTDiscord#501 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
UKGovernmentBEIS/inspect_evals#2863 · 1 comentario ·
Los mantenedores suelen responder en 1 día