Skip to content

Commit 8af7678

Browse files
committed
Add basic SstFileManager functionality
Signed-off-by: Fred Wulff <[email protected]>
1 parent 224bed6 commit 8af7678

File tree

6 files changed

+80
-0
lines changed

6 files changed

+80
-0
lines changed

librocksdb_sys/crocksdb/c.cc

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include "rocksdb/rate_limiter.h"
4141
#include "rocksdb/slice_transform.h"
4242
#include "rocksdb/sst_dump_tool.h"
43+
#include "rocksdb/sst_file_manager.h"
4344
#include "rocksdb/sst_file_reader.h"
4445
#include "rocksdb/sst_partitioner.h"
4546
#include "rocksdb/statistics.h"
@@ -147,6 +148,7 @@ using rocksdb::Slice;
147148
using rocksdb::SliceParts;
148149
using rocksdb::SliceTransform;
149150
using rocksdb::Snapshot;
151+
using rocksdb::SstFileManager;
150152
using rocksdb::SstFileReader;
151153
using rocksdb::SstFileWriter;
152154
using rocksdb::SstPartitioner;
@@ -356,6 +358,9 @@ struct crocksdb_sequential_file_t {
356358
struct crocksdb_ingestexternalfileoptions_t {
357359
IngestExternalFileOptions rep;
358360
};
361+
struct crocksdb_sstfilemanager_t {
362+
shared_ptr<SstFileManager> rep;
363+
};
359364
struct crocksdb_sstfilereader_t {
360365
SstFileReader* rep;
361366
};
@@ -4770,6 +4775,26 @@ crocksdb_env_t* crocksdb_file_system_inspected_env_create(
47704775
return result;
47714776
}
47724777

4778+
crocksdb_sstfilemanager_t* crocksdb_sstfilemanager_create(crocksdb_env_t* env) {
4779+
auto manager = new crocksdb_sstfilemanager_t;
4780+
manager->rep.reset(NewSstFileManager(env->rep));
4781+
return manager;
4782+
}
4783+
4784+
void crocksdb_sstfilemanager_destroy(crocksdb_sstfilemanager_t* file_manager) {
4785+
delete file_manager;
4786+
}
4787+
4788+
uint64_t crocksdb_sstfilemanager_get_total_size(
4789+
crocksdb_sstfilemanager_t* file_manager) {
4790+
return file_manager->rep->GetTotalSize();
4791+
}
4792+
4793+
void crocksdb_options_set_sstfilemanager(
4794+
crocksdb_options_t* opt, crocksdb_sstfilemanager_t* file_manager) {
4795+
opt->rep.sst_file_manager = file_manager->rep;
4796+
}
4797+
47734798
crocksdb_sstfilereader_t* crocksdb_sstfilereader_create(
47744799
const crocksdb_options_t* io_options) {
47754800
auto reader = new crocksdb_sstfilereader_t;

librocksdb_sys/crocksdb/crocksdb/c.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ typedef struct crocksdb_envoptions_t crocksdb_envoptions_t;
119119
typedef struct crocksdb_sequential_file_t crocksdb_sequential_file_t;
120120
typedef struct crocksdb_ingestexternalfileoptions_t
121121
crocksdb_ingestexternalfileoptions_t;
122+
typedef struct crocksdb_sstfilemanager_t crocksdb_sstfilemanager_t;
122123
typedef struct crocksdb_sstfilereader_t crocksdb_sstfilereader_t;
123124
typedef struct crocksdb_sstfilewriter_t crocksdb_sstfilewriter_t;
124125
typedef struct crocksdb_externalsstfileinfo_t crocksdb_externalsstfileinfo_t;
@@ -1894,6 +1895,20 @@ extern C_ROCKSDB_LIBRARY_API crocksdb_env_t*
18941895
crocksdb_file_system_inspected_env_create(crocksdb_env_t*,
18951896
crocksdb_file_system_inspector_t*);
18961897

1898+
/* SstFileManager */
1899+
1900+
extern C_ROCKSDB_LIBRARY_API crocksdb_sstfilemanager_t*
1901+
crocksdb_sstfilemanager_create(crocksdb_env_t* env);
1902+
1903+
extern C_ROCKSDB_LIBRARY_API void crocksdb_sstfilemanager_destroy(
1904+
crocksdb_sstfilemanager_t* file_manager);
1905+
1906+
extern C_ROCKSDB_LIBRARY_API uint64_t
1907+
crocksdb_sstfilemanager_get_total_size(crocksdb_sstfilemanager_t* file_manager);
1908+
1909+
extern C_ROCKSDB_LIBRARY_API void crocksdb_options_set_sst_filemanager(
1910+
crocksdb_options_t* opt, crocksdb_sstfilemanager_t* file_manager);
1911+
18971912
/* SstFile */
18981913

18991914
extern C_ROCKSDB_LIBRARY_API crocksdb_sstfilereader_t*

librocksdb_sys/src/lib.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ pub struct DBCheckpoint(c_void);
9292
#[repr(C)]
9393
pub struct EnvOptions(c_void);
9494
#[repr(C)]
95+
pub struct SstFileManager(c_void);
96+
#[repr(C)]
9597
pub struct SstFileReader(c_void);
9698
#[repr(C)]
9799
pub struct SstFileWriter(c_void);
@@ -2045,6 +2047,15 @@ extern "C" {
20452047
inspector: *mut DBFileSystemInspectorInstance,
20462048
) -> *mut DBEnv;
20472049

2050+
// SstFileManager
2051+
pub fn crocksdb_sstfilemanager_create(env: *const DBEnv) -> *mut SstFileManager;
2052+
pub fn crocksdb_sstfilemanager_destroy(file_manager: *mut SstFileManager);
2053+
pub fn crocksdb_sstfilemanager_get_total_size(file_manager: *const SstFileManager) -> u64;
2054+
pub fn crocksdb_options_set_sstfilemanager(
2055+
options: *mut Options,
2056+
file_manager: *const SstFileManager,
2057+
);
2058+
20482059
// SstFileReader
20492060
pub fn crocksdb_sstfilereader_create(io_options: *const Options) -> *mut SstFileReader;
20502061

src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ pub use rocksdb_options::{
7070
RateLimiter, ReadOptions, RestoreOptions, Statistics, WriteBufferManager, WriteOptions,
7171
};
7272
pub use slice_transform::SliceTransform;
73+
pub use sst_file_manager::SstFileManager;
7374
pub use sst_partitioner::{
7475
SstPartitioner, SstPartitionerContext, SstPartitionerFactory, SstPartitionerRequest,
7576
};
@@ -100,6 +101,7 @@ mod perf_context;
100101
pub mod rocksdb;
101102
pub mod rocksdb_options;
102103
mod slice_transform;
104+
pub mod sst_file_manager;
103105
pub mod sst_partitioner;
104106
mod table_filter;
105107
mod table_properties;

src/rocksdb_options.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ use table_properties_collector_factory::{
4444
new_table_properties_collector_factory, TablePropertiesCollectorFactory,
4545
};
4646
use titan::TitanDBOptions;
47+
use SstFileManager;
4748
use TablePropertiesCollector;
4849

4950
#[derive(Default, Debug)]
@@ -1236,6 +1237,12 @@ impl DBOptions {
12361237
}
12371238
}
12381239

1240+
pub fn set_sst_file_manager(&mut self, file_manager: &SstFileManager) {
1241+
unsafe {
1242+
crocksdb_ffi::crocksdb_options_set_sstfilemanager(self.inner, file_manager.inner);
1243+
}
1244+
}
1245+
12391246
pub fn get_rate_limiter(&self) -> Option<RateLimiter> {
12401247
let limiter = unsafe { crocksdb_ffi::crocksdb_options_get_ratelimiter(self.inner) };
12411248
if limiter.is_null() {

src/sst_file_manager.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
use crocksdb_ffi;
2+
use librocksdb_sys::DBEnv;
3+
4+
pub struct SstFileManager {
5+
pub(crate) inner: *mut crocksdb_ffi::SstFileManager,
6+
}
7+
8+
impl SstFileManager {
9+
pub fn new(env: *const DBEnv) -> SstFileManager {
10+
unsafe {
11+
SstFileManager {
12+
inner: crocksdb_ffi::crocksdb_sstfilemanager_create(env),
13+
}
14+
}
15+
}
16+
17+
pub fn get_total_size(&self) -> u64 {
18+
unsafe { crocksdb_ffi::crocksdb_sstfilemanager_get_total_size(self.inner) }
19+
}
20+
}

0 commit comments

Comments
 (0)