RocksDB's Checkpoint API currently always materializes a checkpoint that includes every column family. Callers that only need a subset still pay to hard-link or copy the other families' table/blob files, which is wasteful.
Add support for creating a checkpoint that contains only a selected set of column families from the same DB, with these requirements:
- The default column family must always be included in the checkpoint, whether or not the caller listed it.
- An empty selection must mean all column families and behave like the existing whole-DB checkpoint path.
- Reject null handles, handles that do not belong to this DB, and handles for already-dropped column families with InvalidArgument. Coalesce duplicate handles by column-family id.
- Only table/blob files for the included column families may appear in the checkpoint directory; excluded families' SST/blob files must not be linked or copied.
- The resulting checkpoint must open cleanly under default paranoid checks when opened with exactly the included families (plus default). Excluded families must no longer exist there, so opening with the full original CF list should fail.
- Creating the subset checkpoint must not mutate the live DB's MANIFEST or drop column families from the source DB.
- Existing whole-DB CreateCheckpoint behavior must remain unchanged.
Interface contract — the change must expose exactly this surface:
Checkpoint::CreateCheckpoint(const std::string& checkpoint_dir, const std::vector<ColumnFamilyHandle*>& column_families, uint64_t log_size_for_flush = 0, uint64_t* sequence_number_ptr = nullptr)
Work only inside this repository checkout. Make the code change the task
describes, keeping the diff focused — no drive-by refactors.
When you are done, leave your changes committed or in the working tree;
they are collected automatically.
Stay on this snapshot checkout (`task/ycb_rocksdb_cf9df618e4d8f`). Never checkout, pull, or rebase onto `main`. That branch is a README-only orphan.
Stay on this HEAD. Do not fetch another default branch. Push only on the Cursor-created `crazy-cursor/…` side branch from this HEAD.
Some past runs of this task were launched with a different prompt (the prompt template changed since, or those runs predate this benchmark's stored prompt). Each run persists the exact prompt it sent at launch — that per-launch record is the audit trail; this page shows only the current one.
Reference diff
The task commit's diff against its first parent — the judge's comparison target.