Commit f8870b44 authored by DorianZheng's avatar DorianZheng

Fix event listener bug (#267)

(cherry picked from commit dc16c9b1)
parent c912ea07
......@@ -1821,6 +1821,11 @@ bool crocksdb_flushjobinfo_triggered_writes_stop(const crocksdb_flushjobinfo_t*
/* CompactionJobInfo */
void crocksdb_compactionjobinfo_status(const crocksdb_compactionjobinfo_t* info,
char** errptr) {
SaveError(errptr, info->rep.status);
}
const char* crocksdb_compactionjobinfo_cf_name(
const crocksdb_compactionjobinfo_t* info, size_t* size) {
*size = info->rep.cf_name.size();
......@@ -4086,8 +4091,12 @@ const char* crocksdb_table_properties_collection_iter_key(
const crocksdb_table_properties_t*
crocksdb_table_properties_collection_iter_value(
const crocksdb_table_properties_collection_iterator_t* it) {
return reinterpret_cast<const crocksdb_table_properties_t*>(
it->cur_->second.get());
if (it->cur_->second) {
return reinterpret_cast<const crocksdb_table_properties_t*>(
it->cur_->second.get());
} else {
return nullptr;
}
}
/* Table Properties Collector */
......
......@@ -1507,6 +1507,10 @@ extern "C" {
pub fn crocksdb_flushjobinfo_triggered_writes_slowdown(info: *const DBFlushJobInfo) -> bool;
pub fn crocksdb_flushjobinfo_triggered_writes_stop(info: *const DBFlushJobInfo) -> bool;
pub fn crocksdb_compactionjobinfo_status(
info: *const DBCompactionJobInfo,
errptr: *mut *mut c_char,
);
pub fn crocksdb_compactionjobinfo_cf_name(
info: *const DBCompactionJobInfo,
size: *mut size_t,
......
......@@ -60,6 +60,11 @@ impl FlushJobInfo {
pub struct CompactionJobInfo(DBCompactionJobInfo);
impl CompactionJobInfo {
pub fn status(&self) -> Result<(), String> {
unsafe { ffi_try!(crocksdb_compactionjobinfo_status(&self.0)) }
Ok(())
}
pub fn cf_name(&self) -> &str {
unsafe { fetch_str!(crocksdb_compactionjobinfo_cf_name(&self.0)) }
}
......
......@@ -81,19 +81,25 @@ impl<'a> Iterator for TablePropertiesCollectionIter<'a> {
fn next(&mut self) -> Option<(&'a str, &'a TableProperties)> {
unsafe {
if !crocksdb_ffi::crocksdb_table_properties_collection_iter_valid(self.inner) {
return None;
loop {
if !crocksdb_ffi::crocksdb_table_properties_collection_iter_valid(self.inner) {
return None;
}
let mut klen: size_t = 0;
let k = crocksdb_ffi::crocksdb_table_properties_collection_iter_key(
self.inner, &mut klen,
);
let bytes = slice::from_raw_parts(k, klen);
let key = str::from_utf8(bytes).unwrap();
let props =
crocksdb_ffi::crocksdb_table_properties_collection_iter_value(self.inner);
crocksdb_ffi::crocksdb_table_properties_collection_iter_next(self.inner);
if !props.is_null() {
let val = TableProperties::from_ptr(props);
return Some((key, val));
}
}
let mut klen: size_t = 0;
let k =
crocksdb_ffi::crocksdb_table_properties_collection_iter_key(self.inner, &mut klen);
let bytes = slice::from_raw_parts(k, klen);
let key = str::from_utf8(bytes).unwrap();
let props = crocksdb_ffi::crocksdb_table_properties_collection_iter_value(self.inner);
let val = TableProperties::from_ptr(props);
crocksdb_ffi::crocksdb_table_properties_collection_iter_next(self.inner);
Some((key, val))
}
}
}
......
......@@ -45,6 +45,7 @@ impl EventListener for EventCounter {
}
fn on_compaction_completed(&self, info: &CompactionJobInfo) {
info.status().unwrap();
assert!(!info.cf_name().is_empty());
let input_file_count = info.input_file_count();
assert_ne!(input_file_count, 0);
......
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