mirror of
https://github.com/qdrant/qdrant.git
synced 2026-08-04 17:10:59 -05:00
* fix: propagate flush cancellation through payload index flushers When a payload index is deleted, the gridstore backing it is dropped. A concurrent background flush detects this (weak Arc refs fail to upgrade) and returns GridstoreError::FlushCancelled. The From<GridstoreError> impl correctly maps this to OperationError::Cancelled, and entry.rs gracefully handles Cancelled by skipping the flush. However, two intermediate layers unconditionally wrapped all errors as ServiceError, destroying the Cancelled variant before it reached the handler in entry.rs: 1. All 4 mutable index flushers (map, text, numeric, geo) used OperationError::service_error(format!(...)) instead of converting via Into<OperationError> first. 2. struct_payload_index flusher also unconditionally wrapped sub-flusher errors as service_error. This caused the benign FlushCancelled to surface as a fatal "last background flush failed" ServiceError. Fix both layers to propagate Cancelled errors as-is, matching the pattern already used for vector storage, quantization, and id tracker flushers in entry.rs. Made-with: Cursor * simplify error conversion --------- Co-authored-by: Cursor Agent <agent@cursor.com> Co-authored-by: generall <andrey@vasnetsov.com>