Commit 4e4edb7f authored by Clément Renault's avatar Clément Renault Committed by Huachao Huang

Introduce SstFileWriter::delete_range (#234)

parent 77575fa7
......@@ -3335,6 +3335,14 @@ void crocksdb_sstfilewriter_delete(crocksdb_sstfilewriter_t *writer,
SaveError(errptr, writer->rep->Delete(Slice(key, keylen)));
}
void crocksdb_sstfilewriter_delete_range(crocksdb_sstfilewriter_t *writer,
const char *begin_key, size_t begin_keylen,
const char *end_key, size_t end_keylen,
char **errptr) {
SaveError(errptr, writer->rep->DeleteRange(Slice(begin_key, begin_keylen),
Slice(end_key, end_keylen)));
}
void crocksdb_sstfilewriter_finish(crocksdb_sstfilewriter_t* writer,
crocksdb_externalsstfileinfo_t* info,
char** errptr) {
......
......@@ -1353,6 +1353,10 @@ crocksdb_sstfilewriter_merge(crocksdb_sstfilewriter_t *writer, const char *key,
extern C_ROCKSDB_LIBRARY_API void
crocksdb_sstfilewriter_delete(crocksdb_sstfilewriter_t *writer, const char *key,
size_t keylen, char **errptr);
extern C_ROCKSDB_LIBRARY_API void
crocksdb_sstfilewriter_delete_range(crocksdb_sstfilewriter_t *writer, const char *begin_key,
size_t begin_keylen, const char *end_key, size_t end_keylen,
char **errptr);
extern C_ROCKSDB_LIBRARY_API void crocksdb_sstfilewriter_finish(
crocksdb_sstfilewriter_t* writer, crocksdb_externalsstfileinfo_t* info, char** errptr);
extern C_ROCKSDB_LIBRARY_API uint64_t crocksdb_sstfilewriter_file_size(
......
......@@ -1144,14 +1144,6 @@ extern "C" {
name: *const c_char,
err: *mut *mut c_char,
);
pub fn crocksdb_sstfilewriter_add(
writer: *mut SstFileWriter,
key: *const u8,
key_len: size_t,
val: *const u8,
val_len: size_t,
err: *mut *mut c_char,
);
pub fn crocksdb_sstfilewriter_put(
writer: *mut SstFileWriter,
key: *const u8,
......@@ -1174,6 +1166,14 @@ extern "C" {
key_len: size_t,
err: *mut *mut c_char,
);
pub fn crocksdb_sstfilewriter_delete_range(
writer: *mut SstFileWriter,
begin_key: *const u8,
begin_key_len: size_t,
end_key: *const u8,
end_key_len: size_t,
err: *mut *mut c_char,
);
pub fn crocksdb_sstfilewriter_finish(
writer: *mut SstFileWriter,
info: *mut ExternalSstFileInfo,
......@@ -1740,12 +1740,13 @@ mod test {
assert_eq!(sizes.len(), 1);
assert!(sizes[0] > 0);
crocksdb_delete_file_in_range(
crocksdb_delete_files_in_range(
db,
b"\x00\x00".as_ptr(),
2,
b"\xff\x00".as_ptr(),
2,
true,
&mut err,
);
assert!(err.is_null(), error_message(err));
......@@ -1819,13 +1820,13 @@ mod test {
crocksdb_sstfilewriter_open(writer, c_sst_path_ptr, &mut err);
assert!(err.is_null(), error_message(err));
crocksdb_sstfilewriter_add(writer, b"sstk1".as_ptr(), 5, b"v1".as_ptr(), 2, &mut err);
crocksdb_sstfilewriter_put(writer, b"sstk1".as_ptr(), 5, b"v1".as_ptr(), 2, &mut err);
assert!(err.is_null(), error_message(err));
crocksdb_sstfilewriter_put(writer, b"sstk2".as_ptr(), 5, b"v2".as_ptr(), 2, &mut err);
assert!(err.is_null(), error_message(err));
crocksdb_sstfilewriter_put(writer, b"sstk3".as_ptr(), 5, b"v3".as_ptr(), 2, &mut err);
assert!(err.is_null(), error_message(err));
crocksdb_sstfilewriter_finish(writer, &mut err);
crocksdb_sstfilewriter_finish(writer, ptr::null_mut(), &mut err);
assert!(err.is_null(), error_message(err));
assert!(crocksdb_sstfilewriter_file_size(writer) > 0);
......@@ -1843,13 +1844,13 @@ mod test {
fs::remove_file(sst_path).unwrap();
crocksdb_sstfilewriter_open(writer, c_sst_path_ptr, &mut err);
assert!(err.is_null(), error_message(err));
crocksdb_sstfilewriter_add(writer, "sstk2".as_ptr(), 5, "v4".as_ptr(), 2, &mut err);
crocksdb_sstfilewriter_put(writer, "sstk2".as_ptr(), 5, "v4".as_ptr(), 2, &mut err);
assert!(err.is_null(), error_message(err));
crocksdb_sstfilewriter_put(writer, "sstk22".as_ptr(), 6, "v5".as_ptr(), 2, &mut err);
assert!(err.is_null(), error_message(err));
crocksdb_sstfilewriter_put(writer, "sstk3".as_ptr(), 5, "v6".as_ptr(), 2, &mut err);
assert!(err.is_null(), error_message(err));
crocksdb_sstfilewriter_finish(writer, &mut err);
crocksdb_sstfilewriter_finish(writer, ptr::null_mut(), &mut err);
assert!(err.is_null(), error_message(err));
assert!(crocksdb_sstfilewriter_file_size(writer) > 0);
......
......@@ -1946,6 +1946,19 @@ impl SstFileWriter {
}
}
pub fn delete_range(&mut self, begin_key: &[u8], end_key: &[u8]) -> Result<(), String> {
unsafe {
ffi_try!(crocksdb_sstfilewriter_delete_range(
self.inner,
begin_key.as_ptr(),
begin_key.len(),
end_key.as_ptr(),
end_key.len()
));
Ok(())
}
}
/// Finalize writing to sst file and close file.
pub fn finish(&mut self) -> Result<ExternalSstFileInfo, String> {
let info = ExternalSstFileInfo::new();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment