Commit 7ad71128 authored by Cholerae Hu's avatar Cholerae Hu Committed by zhangjinpeng1987

rocksdb: add supported_compression function (#88)

parent 40b2408f
......@@ -2947,6 +2947,18 @@ const char* crocksdb_pinnableslice_value(const crocksdb_pinnableslice_t* v,
return v->rep.data();
}
size_t crocksdb_get_supported_compression_number() {
return rocksdb::GetSupportedCompressions().size();
}
void crocksdb_get_supported_compression(int* v, size_t l) {
auto compressions = rocksdb::GetSupportedCompressions();
assert(compressions.size() == l);
for (size_t i = 0; i < compressions.size(); i++) {
v[i] = static_cast<int>(compressions[i]);
}
}
/* Table Properties */
struct crocksdb_user_collected_properties_t {
......
......@@ -1218,6 +1218,9 @@ extern C_ROCKSDB_LIBRARY_API void crocksdb_pinnableslice_destroy(
extern C_ROCKSDB_LIBRARY_API const char* crocksdb_pinnableslice_value(
const crocksdb_pinnableslice_t* t, size_t* vlen);
extern C_ROCKSDB_LIBRARY_API size_t crocksdb_get_supported_compression_number();
extern C_ROCKSDB_LIBRARY_API void crocksdb_get_supported_compression(int *, size_t);
/* Table Properties */
extern C_ROCKSDB_LIBRARY_API crocksdb_table_properties_t*
......
......@@ -82,6 +82,7 @@ pub enum DBCompressionType {
DBLz4hc = 5,
// DBXpress = 6, not support currently.
DBZstd = 7,
DBZstdNotFinal = 0x40,
}
#[repr(C)]
......@@ -852,6 +853,8 @@ extern "C" {
valLen: *mut size_t)
-> *const u8;
pub fn crocksdb_pinnableslice_destroy(v: *mut DBPinnableSlice);
pub fn crocksdb_get_supported_compression_number() -> size_t;
pub fn crocksdb_get_supported_compression(v: *mut DBCompressionType, l: size_t);
pub fn crocksdb_user_collected_properties_add(props: *mut DBUserCollectedProperties,
key: *const uint8_t,
......
......@@ -14,7 +14,8 @@
//
use crocksdb_ffi::{self, DBWriteBatch, DBCFHandle, DBInstance, DBBackupEngine,
DBStatisticsTickerType, DBStatisticsHistogramType, DBPinnableSlice};
DBStatisticsTickerType, DBStatisticsHistogramType, DBPinnableSlice,
DBCompressionType};
use libc::{self, c_int, c_void, size_t};
use rocksdb_options::{Options, ReadOptions, UnsafeSnap, WriteOptions, FlushOptions, EnvOptions,
RestoreOptions, IngestExternalFileOptions, HistogramData, CompactOptions};
......@@ -1459,6 +1460,17 @@ impl Drop for SstFileWriter {
}
}
pub fn supported_compression() -> Vec<DBCompressionType> {
unsafe {
let size = crocksdb_ffi::crocksdb_get_supported_compression_number() as usize;
let mut v: Vec<DBCompressionType> = Vec::with_capacity(size);
let pv = v.as_mut_ptr();
crocksdb_ffi::crocksdb_get_supported_compression(pv, size as size_t);
v.set_len(size);
v
}
}
#[cfg(test)]
mod test {
use std::fs;
......@@ -1889,4 +1901,21 @@ mod test {
.unwrap();
assert!(total_sst_files_size > 0);
}
#[test]
fn test_supported_compression() {
let mut com = supported_compression();
let len_before = com.len();
assert!(com.len() != 0);
com.dedup();
assert_eq!(len_before, com.len());
for c in com {
println!("{:?}", c);
println!("{}", c as u32);
match c as u32 {
0...5 | 7 | 0x40 => assert!(true),
_ => assert!(false),
}
}
}
}
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