shikhar
09/21/2025, 1:15 PMairhorns
09/21/2025, 1:39 PMcriccomini
09/22/2025, 9:33 PMcriccomini
09/23/2025, 9:09 PM2025-09-23T21:08:48.074723Z INFO slatedb::mem_table_flush: memtable flush thread exiting [result=Ok(())]
2025-09-23T21:08:48.074732Z INFO slatedb::mem_table_flush: notifying in-memory memtable of shutdown [result=Ok(())]
2025-09-23T21:08:48.074909Z INFO slatedb::db: compactor task exited [result=Ok(())]
2025-09-23T21:08:48.074919Z INFO slatedb::db: write task exited [result=Ok(())]
2025-09-23T21:08:48.074948Z INFO slatedb::db: wal buffer task exited [result=Ok(())]
2025-09-23T21:08:48.074956Z INFO slatedb::db: mem table flush task exited [result=Ok(())]
2025-09-23T21:08:48.074961Z INFO slatedb::db: db closed
It's beautiful.. 🥹criccomini
09/23/2025, 9:10 PMcriccomini
09/23/2025, 9:33 PMcriccomini
09/23/2025, 9:33 PMcriccomini
09/23/2025, 9:34 PMcriccomini
09/23/2025, 9:34 PMcriccomini
09/23/2025, 9:37 PMairhorns
09/24/2025, 9:16 PMcriccomini
09/25/2025, 4:49 PMcriccomini
09/25/2025, 4:50 PMcriccomini
09/25/2025, 5:37 PMcriccomini
09/25/2025, 6:09 PMcriccomini
09/25/2025, 9:24 PMcriccomini
09/25/2025, 9:24 PMtest_should_tombstones_in_l0
more than 7000 times without failure on my laptop. Ran it with the script and it failed in < 10 iterations lolcriccomini
09/26/2025, 12:25 AMcriccomini
09/26/2025, 10:45 PMdirty
to false. Is this something you were planning on changing with the txn work?criccomini
09/26/2025, 11:23 PMdirty
and DurabilityFilter
confused. 😛flaneur233
09/27/2025, 2:46 AMflaneur233
09/27/2025, 2:52 AMflaneur233
09/27/2025, 2:57 AMdirty: true
allows users to read uncommitted data from other transactions, which is usually unrelated to "read-your-write consistency" imo.criccomini
09/27/2025, 5:55 AMcriccomini
09/29/2025, 4:46 PMstate.error
, which basically totally halts the DB.
4. We handle backpressure internally right now by blocking the put() calls and waiting internally (maybe_apply_backpressure). This feels right to me (from a user perspective), but it further muddies the retry concept since one could imagine throwing a "Backoff" error that is retryable (transient). The ergonomics around that are uglier, though. Or perhaps we want to support both? 🤔
5. I'm starting to think we should use the state.error
variable only for permanent errors (i.e. those that require the DB to be closed, data to be repaired, etc). This raises the question about how we get non-fatal errors to users. We probably just want to throw the error once (i.e. mutable take it out of the variable).
6. Clone
on the SlateDBError is really annoying (it makes the code more complex). But since we are currently returning the state.error
on every user-facing API call, it has to be clone. I am thinking we might be able to get around this somehow, but not sure the best approach . (this feels like it ties in with 5)Sujeet
09/30/2025, 4:13 PMvalidate_compaction
method to the scheduler's interface. This would serve as a dedicated hook for compaction schedulers to verify compaction scheduled by them.
Here are a couple of implementation ideas:
1. Provide a default implementation within the current compaction_scheduler trait. This would be easy to adopt and wouldn't require changes to existing compaction schedulers.
Rust
// Default implementation returns Ok
pub trait CompactionScheduler: Send + Sync {
fn maybe_schedule_compaction(&self, state: &CompactorState) -> Vec<Compaction>;
fn validate_compaction(...) -> Result<(), SlateDBError> { Ok(()) }
}
2. Use a separate CompactionValidator trait. This would cleanly separate the validation concern from scheduling logic.
Thoughts on the above☝️ . Curious to hear other perspectives.Pierre
09/30/2025, 4:21 PMPierre
09/30/2025, 4:22 PMSujeet
09/30/2025, 4:30 PMPierre
09/30/2025, 4:52 PM