compaction instead of flushing

main
Ziyang Hu 2 years ago
parent 5f3d2442a1
commit dd0054a539

@ -386,6 +386,13 @@ struct TransactionBridge {
write_status(raw_db->Flush(options, const_cast<ColumnFamilyHandle *>(&cf)), status);
}
inline void compact_all_raw(const ColumnFamilyHandle &cf, BridgeStatus &status) const {
auto options = CompactRangeOptions();
options.change_level = true;
options.target_level = 0;
options.exclusive_manual_compaction = false;
write_status(raw_db->CompactRange(options, nullptr, nullptr), status);
}
inline std::unique_ptr<IteratorBridge> iterator_txn(
const ColumnFamilyHandle &cf) const {

@ -148,6 +148,7 @@ mod ffi {
fn del_range_raw(self: &TransactionBridge, cf: &ColumnFamilyHandle,
start_key: &[u8], end_key: &[u8], status: &mut BridgeStatus);
fn flush_raw(self: &TransactionBridge, cf: &ColumnFamilyHandle, options: &FlushOptions, status: &mut BridgeStatus);
fn compact_all_raw(self: &TransactionBridge, cf: &ColumnFamilyHandle, status: &mut BridgeStatus);
fn iterator_txn(self: &TransactionBridge, cf: &ColumnFamilyHandle) -> UniquePtr<IteratorBridge>;
fn iterator_raw(self: &TransactionBridge, cf: &ColumnFamilyHandle) -> UniquePtr<IteratorBridge>;
fn multiget_txn(self: &TransactionBridge, cf: &ColumnFamilyHandle,

@ -569,6 +569,12 @@ impl TransactionPtr {
status.check_err(())
}
#[inline]
pub fn compact_all(&self, cf: &ColumnFamilyHandle) -> Result<()> {
let mut status = BridgeStatus::default();
self.compact_all_raw(cf, &mut status);
status.check_err(())
}
#[inline]
pub fn put(&self, transact: bool, cf: &ColumnFamilyHandle, key: impl AsRef<[u8]>, val: impl AsRef<[u8]>) -> Result<()> {
let mut status = BridgeStatus::default();
if transact {

@ -162,9 +162,10 @@ impl<'a> Session<'a> {
}
pub fn finish_work(&mut self) -> Result<()> {
self.txn.del_range(&self.temp_cf, Tuple::with_null_prefix(), Tuple::max_tuple())?;
let mut options = FlushOptionsPtr::default();
options.set_allow_write_stall(true).set_flush_wait(true);
self.txn.flush(&self.temp_cf, options)?;
self.txn.compact_all(&self.temp_cf)?;
// let mut options = FlushOptionsPtr::default();
// options.set_allow_write_stall(true).set_flush_wait(true);
// self.txn.flush(&self.temp_cf, options)?;
Ok(())
}
}

Loading…
Cancel
Save