mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2026-11-13 06:00:47 +08:00
* fix(storage): decouple details probe from request context and isolate refresh/lifecycle state - Run storage capacity probes with context.WithoutCancel bounded by storage_details_timeout_seconds (default 15s, clamped to 1..600s) so a 1s listing wait or 3s admin wait cancellation no longer aborts the shared probe before it can populate the cache; convert driver panics to errors and return at the deadline even if a driver ignores ctx. - Keep at most one active probe per mount until GetDetails actually exits, publishing the result and releasing the slot atomically. Forced refresh invalidates cached details and joins any in-flight probe without spawning duplicate remote requests. - Track failed probes in private detailsState.failed without polluting detailCache with nil: ordinary refreshes skip re-probing failed mounts immediately (preventing repeated 1s stalls), while forced refreshes or storage lifecycle changes reset the failure state. - Guard init, update, disable, and delete with per-mount generations and changing barriers so stale or retired driver instances cannot publish outdated capacity into the cache, without mutating storage status. - Key details cache entries by full cleaned mount path so balanced storages (/a, /a.balance1) do not overwrite each other's capacity. Closes #1815 Relates to #2633, #2635 Co-Authored-By: Codex <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Gemini <noreply@google.com> * fix(storage): release details task slot on lifecycle invalidation --------- Co-authored-by: Vurliy <ulermi@outlook.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Gemini <noreply@google.com> Co-authored-by: Codex <codex@localhost>