Skip to content

fix(db): persist delete-only writing segment records#618

Open
egolearner wants to merge 1 commit into
alibaba:mainfrom
egolearner:fix/delete-only-segment-persistence
Open

fix(db): persist delete-only writing segment records#618
egolearner wants to merge 1 commit into
alibaba:mainfrom
egolearner:fix/delete-only-segment-persistence

Conversation

@egolearner

Copy link
Copy Markdown
Collaborator

Problem

A writing segment can contain delete WAL records while its document count remains zero. Schema and index changes previously used the document count to decide whether to switch the writing segment, so a delete-only WAL could be destroyed before its delete snapshot was persisted. This could make collection recovery fail or allow deleted documents to reappear.

Fix

  • Add Segment::has_record() to account for both documents and WAL records.
  • Use has_record() for schema, index, and optimize switch decisions.
  • Flush delete-only writing segments without creating empty persisted segments.
  • Add a reopen regression test covering column DDL after a delete-only write.

Tests

  • ninja -C build.release unittest.collection_test
  • 83 tests passed.

A writing segment can contain delete WAL records while its document count remains zero. Schema changes previously skipped the switch in this state and could destroy the WAL before the delete snapshot was persisted, causing recovery failures or deleted documents to reappear.

Add Segment::has_record to account for both documents and WAL records, use it for schema and optimize switch decisions, and make the delete-only switch path flush without creating an empty persisted segment. Add a reopen regression test for the column DDL path.
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