PropertyLengthTracker is never flushed on single-object delete
The single-object delete path (deleteObject → cleanupInvertedIndexOnDelete → subtractPropLengths) mutates the PropertyLengthTracker — an mmap-backed structure outside the LSM store, not covered by WriteWALs — but never flushes it. The batch delete path flushes it explicitly once per batch (flushWALs → GetPropertyLengthTracker().Flush()); the single path has no equivalent, so a crash after a single delete can lose the subtraction and skew BM25 length normalization.
Found during the docID-reuse delete-durability audit. Independent of docID reuse; deliberately excluded from the crash-safe delete PR (#12886) to keep it isolated.
A pinning test (skipped, linking this issue) is being added on the integration/docid-reuse branch.
Generated with Claude Code
Source: weaviate/weaviate