Unverified Commit 88e55e94 authored by qupeng's avatar qupeng Committed by GitHub

add range for compaction filter context (#560)

parent c7c76b31
...@@ -3297,6 +3297,19 @@ unsigned char crocksdb_compactionfiltercontext_is_bottommost_level( ...@@ -3297,6 +3297,19 @@ unsigned char crocksdb_compactionfiltercontext_is_bottommost_level(
return context->rep.is_bottommost_level; return context->rep.is_bottommost_level;
} }
void crocksdb_compactionfiltercontext_file_numbers(
crocksdb_compactionfiltercontext_t* context, const uint64_t** buffer,
size_t* len) {
*buffer = context->rep.file_numbers.data();
*len = context->rep.file_numbers.size();
}
crocksdb_table_properties_t* crocksdb_compactionfiltercontext_table_properties(
crocksdb_compactionfiltercontext_t* context, size_t offset) {
return (crocksdb_table_properties_t*)context->rep.table_properties[offset]
.get();
}
crocksdb_compactionfilterfactory_t* crocksdb_compactionfilterfactory_create( crocksdb_compactionfilterfactory_t* crocksdb_compactionfilterfactory_create(
void* state, void (*destructor)(void*), void* state, void (*destructor)(void*),
crocksdb_compactionfilter_t* (*create_compaction_filter)( crocksdb_compactionfilter_t* (*create_compaction_filter)(
......
...@@ -1341,6 +1341,14 @@ extern C_ROCKSDB_LIBRARY_API unsigned char ...@@ -1341,6 +1341,14 @@ extern C_ROCKSDB_LIBRARY_API unsigned char
crocksdb_compactionfiltercontext_is_bottommost_level( crocksdb_compactionfiltercontext_is_bottommost_level(
crocksdb_compactionfiltercontext_t* context); crocksdb_compactionfiltercontext_t* context);
extern C_ROCKSDB_LIBRARY_API void crocksdb_compactionfiltercontext_file_numbers(
crocksdb_compactionfiltercontext_t* context, const uint64_t** buffer,
size_t* len);
extern C_ROCKSDB_LIBRARY_API crocksdb_table_properties_t*
crocksdb_compactionfiltercontext_table_properties(
crocksdb_compactionfiltercontext_t* context, size_t offset);
/* Compaction Filter Factory */ /* Compaction Filter Factory */
extern C_ROCKSDB_LIBRARY_API crocksdb_compactionfilterfactory_t* extern C_ROCKSDB_LIBRARY_API crocksdb_compactionfilterfactory_t*
......
...@@ -1531,6 +1531,15 @@ extern "C" { ...@@ -1531,6 +1531,15 @@ extern "C" {
pub fn crocksdb_compactionfiltercontext_is_bottommost_level( pub fn crocksdb_compactionfiltercontext_is_bottommost_level(
context: *const DBCompactionFilterContext, context: *const DBCompactionFilterContext,
) -> bool; ) -> bool;
pub fn crocksdb_compactionfiltercontext_file_numbers(
context: *const DBCompactionFilterContext,
buffer: *mut *const u64,
len: *mut usize,
);
pub fn crocksdb_compactionfiltercontext_table_properties(
context: *const DBCompactionFilterContext,
offset: usize,
) -> *const DBTableProperties;
// Compaction filter factory // Compaction filter factory
pub fn crocksdb_compactionfilterfactory_create( pub fn crocksdb_compactionfilterfactory_create(
......
use std::ffi::CString; use std::ffi::CString;
use std::{mem, ptr, slice}; use std::{mem, ptr, slice};
use crate::table_properties::TableProperties;
pub use crocksdb_ffi::DBCompactionFilter; pub use crocksdb_ffi::DBCompactionFilter;
use crocksdb_ffi::{self, DBCompactionFilterContext, DBCompactionFilterFactory}; use crocksdb_ffi::{self, DBCompactionFilterContext, DBCompactionFilterFactory};
use libc::{c_char, c_int, c_void, malloc, memcpy, size_t}; use libc::{c_char, c_int, c_void, malloc, memcpy, size_t};
...@@ -132,6 +133,27 @@ impl CompactionFilterContext { ...@@ -132,6 +133,27 @@ impl CompactionFilterContext {
let ctx = &self.0 as *const DBCompactionFilterContext; let ctx = &self.0 as *const DBCompactionFilterContext;
unsafe { crocksdb_ffi::crocksdb_compactionfiltercontext_is_bottommost_level(ctx) } unsafe { crocksdb_ffi::crocksdb_compactionfiltercontext_is_bottommost_level(ctx) }
} }
pub fn file_numbers(&self) -> &[u64] {
let ctx = &self.0 as *const DBCompactionFilterContext;
let (mut buffer, mut len): (*const u64, usize) = (ptr::null_mut(), 0);
unsafe {
crocksdb_ffi::crocksdb_compactionfiltercontext_file_numbers(
ctx,
&mut buffer as *mut *const u64,
&mut len as *mut usize,
);
slice::from_raw_parts(buffer, len)
}
}
pub fn table_properties(&self, offset: usize) -> &TableProperties {
let ctx = &self.0 as *const DBCompactionFilterContext;
unsafe {
let raw = crocksdb_ffi::crocksdb_compactionfiltercontext_table_properties(ctx, offset);
TableProperties::from_ptr(raw)
}
}
} }
pub trait CompactionFilterFactory { pub trait CompactionFilterFactory {
......
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