assets: hardlink/copy fallbacks for shared assets are not cleaned up when the source vanishes
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 18/100
Rechercherichtung
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.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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.
- Vorherrschende Sprache
- Python
- Sterne
- 29k
- Forks
- 1.8k
- Ø Merge
- 2 T. 22 Std.
- Gemergte PRs (30 T.)
- 143
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus reflex-dev/reflex
-
Operations on a list[T] | None var throw when the value is NoneEvtl. vergeben @masenf hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
reflex-dev/reflex#7826 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
A dev run stopped before its backend loads leaves .web/nocompile, so the next run or export skips the compileEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
reflex-dev/reflex#7825 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
PropsBase nested serialization applies parent include/exclude filters to child fieldsEvtl. vergeben @harsh21234i hat das vor 1 Tag übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
reflex-dev/reflex#7787 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
OTel: add trace_flags to JSON log records so unsampled trace ids are recognizableEvtl. vergeben @ShaanGS hat das vor 7 Tagen übernommen. Offenenhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
reflex-dev/reflex#7729 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
0.9.12 changelog follow-ups: the #7132 "_get_was_touched" entry describes unreachable behaviour, #7115's hasattr/getattr change is undocumented, #7131's wordingEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
reflex-dev/reflex#7260 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in reflex-dev/reflex
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
UKGovernmentBEIS/inspect_ai#6512 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area/c++ area/core kind/bug-report
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
tensorflow/quantum#1140 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 68/100
Kav-K/GPTDiscord#501 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
UKGovernmentBEIS/inspect_evals#2863 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag