Skip to content

Fix VectorSet index keys not deleted after MIGRATE KEYS#1758

Draft
tiagonapoli wants to merge 2 commits intomainfrom
tiagonapoli/fix-vectorset-migrate-keys
Draft

Fix VectorSet index keys not deleted after MIGRATE KEYS#1758
tiagonapoli wants to merge 2 commits intomainfrom
tiagonapoli/fix-vectorset-migrate-keys

Conversation

@tiagonapoli
Copy link
Copy Markdown
Collaborator

Summary

After transmitting VectorSet indexes in the KEYS migration path, mark the VectorSet keys in the sketch as transmitted (\Item2 = true) so that the existing \DeleteKeys()\ flow deletes them during the DELETING phase.

Previously, \TransmitKeys()\ skipped VectorSet keys (they are in the ignore set for out-of-band transmission), leaving \Item2 = false, which caused \DeleteKeys()\ to skip them as well. This resulted in VectorSet keys remaining on the source node after migration.

Changes

  • Fix MIGRATE KEYS deletion: Mark VectorSet keys as transmitted in the sketch after out-of-band transmission, so \DeleteKeys()\ properly removes them.
  • Add DEBUG EXISTS subcommand: Raw store existence check bypassing cluster routing/EPSM, used to verify key deletion in tests.
  • Add eviction leak test: Documents a known limitation where DEL after eviction below HeadAddress leaks the DiskANN native index (blind tombstone path skips \TryDeleteVectorSet).
  • Add VectorManager.InUseContextCount: Internal accessor for test introspection of context metadata bitmap.

Tiago Napoli and others added 2 commits April 27, 2026 18:37
Documents a known limitation: when a VectorSet key is evicted below
HeadAddress and then deleted via DEL, the InPlaceDeleter gate (the only
path that redirects to TryDeleteVectorSet) never fires because the
record is not in memory. Tsavorite writes a blind tombstone, leaving
the DiskANN native index unreleased and the context permanently marked
as in-use.

The test creates a VectorSet, forces eviction via ShiftHeadAddress,
then DELs the key and asserts that InUseContextCount remains unchanged
(proving DropIndex was never called).

Also adds VectorManager.InUseContextCount internal accessor for test
introspection of the context metadata bitmap.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
After transmitting VectorSet indexes in the KEYS migration path, mark
the VectorSet keys in the sketch as transmitted (Item2 = true) so that
the existing DeleteKeys() flow deletes them during the DELETING phase.

Previously, TransmitKeys() skipped VectorSet keys (they are in the
ignore set for out-of-band transmission), leaving Item2 = false, which
caused DeleteKeys() to skip them as well. This resulted in VectorSet
keys remaining on the source node after migration.

Also adds a DEBUG EXISTS subcommand for raw store existence checks
bypassing cluster routing/EPSM, and uses it to verify key deletion
in the VectorSetMigrateByKeys test.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant