mirror of
https://github.com/qdrant/qdrant.git
synced 2026-09-21 21:47:39 -05:00
* feat: immutable field index live_reload * feat: read-only segment live_reload * fix: linter * fix: linter * fix: review comments * fix: linter * feat: ReadOnlyVectorData::live_reload covering all components Extract the per-vector reload into a dedicated method that destructures `ReadOnlyVectorData` so storage, index and quantized vectors are all covered. Adding a field without reloading it won't compile, which guards against silently skipping a component. The segment orchestrator now just delegates per named vector. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: keep id-tracker delta pending until all reloads succeed ReadOnlySegment::live_reload drained the id-tracker delta (which advances tracker state and cannot be replayed) and only then ran the fallible payload/vector reloads. On error the delta was lost, so un-updated components drifted out of sync permanently. Accumulate the delta into a new `pending_reload` field and clear it only once every component has reloaded successfully. On a later reload the tracker's fresh delta is folded in via `LiveReloadResult::merge` and the union is replayed, so a partial failure self-heals. Offsets are monotonic, so the only merge conflict is an inserted-but-unapplied offset later deleted: it is dropped from `inserted` and kept in `deleted` so a partially-applied component drops it on replay. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: generall <andrey@vasnetsov.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>