Skip to content

Add RocksDB-backed persistence#17

Open
piotrbar250 wants to merge 47 commits into
Unoperate:mainfrom
glowacz:main
Open

Add RocksDB-backed persistence#17
piotrbar250 wants to merge 47 commits into
Unoperate:mainfrom
glowacz:main

Conversation

@piotrbar250

@piotrbar250 piotrbar250 commented Feb 10, 2026

Copy link
Copy Markdown

This PR adds persistence to the emulator by using RocksDB to store table data and emulator metadata.

Implementation details and design notes are documented in persistence.md.

Authors:
Piotr Głowacki
Piotr Baranowski
Dominik Seredyn


This change is Reviewable

glowacz and others added 30 commits January 17, 2026 15:52
also, added the instructions.md for setup instructions
Database schema correctly saving and retrieving
Co-authored-by: Piotr Baranowski <piotr.baranowski250@gmail.com>
when there are many column families in a table, all the data  in this table gets multiplicated as many times as there are CFs in this table
…llStream::Next

though only kCell/default mode is used
…amily

this aligns with the logic of per-cf stream in the emulator code;
now readrows works well, without duplicated values
(TODO:  delete column families;
for that, we probably need to embed table name in cf name)
this required putting the table id in the CF id and adapting some places where we still need the bare cf name
previously it seemingly worked, because the new schema without the deleted column family was saved;
but the data from this cf still stayed in RocksDB

this commit fixes that
also, fixed stuff in normal script
(from a single row, as in the original emulator)
maybe will be useful
created it, because it was supposed to be able to delete cfs from specific rows
this is tested by the python client (there is no cbt command that does this)

returning errors properly if a CF/row doesn't exist, written functions in Storage for that
glowacz and others added 17 commits February 8, 2026 14:24
feat: Implement filters for persistent filtered column family stream
It tests:
- Table Create() persists schema and manifest entry.
- Prefixed column-family IDs are normalized to bare IDs in persisted schema.
- ModifyColumnFamilies create operation is persisted.
- Update() with field mask persists deletion_protection.
- Repeated Create() for same table does not duplicate manifest entry.
Mirror DeleteValue rollback into RocksDB by deleting the specific persisted cell. Carry family name through undo entries and add a regression test for failed MutateRow rollback persistence.
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.

3 participants