Skip to content

Commit bcda3bd

Browse files
jessonyofacebook-github-bot
authored andcommitted
add SST file manager to C api (facebook#13404)
Summary: we want to limit the maximum disk space used by RocksDB in one of our Go services, as it runs on a highly disk-constrained network switch. Pull Request resolved: facebook#13404 Reviewed By: cbi42 Differential Revision: D73517940 Pulled By: jaykorean fbshipit-source-id: ae91fc7a4992399e20f06cc67dad8130cf19049e
1 parent 9998478 commit bcda3bd

File tree

3 files changed

+129
-0
lines changed

3 files changed

+129
-0
lines changed

db/c.cc

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "rocksdb/perf_context.h"
3131
#include "rocksdb/rate_limiter.h"
3232
#include "rocksdb/slice_transform.h"
33+
#include "rocksdb/sst_file_manager.h"
3334
#include "rocksdb/statistics.h"
3435
#include "rocksdb/status.h"
3536
#include "rocksdb/table.h"
@@ -113,6 +114,7 @@ using ROCKSDB_NAMESPACE::Slice;
113114
using ROCKSDB_NAMESPACE::SliceParts;
114115
using ROCKSDB_NAMESPACE::SliceTransform;
115116
using ROCKSDB_NAMESPACE::Snapshot;
117+
using ROCKSDB_NAMESPACE::SstFileManager;
116118
using ROCKSDB_NAMESPACE::SstFileMetaData;
117119
using ROCKSDB_NAMESPACE::SstFileWriter;
118120
using ROCKSDB_NAMESPACE::Status;
@@ -226,6 +228,9 @@ struct rocksdb_cache_t {
226228
struct rocksdb_write_buffer_manager_t {
227229
std::shared_ptr<WriteBufferManager> rep;
228230
};
231+
struct rocksdb_sst_file_manager_t {
232+
std::shared_ptr<SstFileManager> rep;
233+
};
229234
struct rocksdb_livefiles_t {
230235
std::vector<LiveFileMetaData> rep;
231236
};
@@ -5239,6 +5244,67 @@ ROCKSDB_LIBRARY_API void rocksdb_write_buffer_manager_set_allow_stall(
52395244
wbm->rep->SetAllowStall(new_allow_stall);
52405245
}
52415246

5247+
rocksdb_sst_file_manager_t* rocksdb_sst_file_manager_create(
5248+
rocksdb_env_t* env) {
5249+
rocksdb_sst_file_manager_t* sfm = new rocksdb_sst_file_manager_t;
5250+
sfm->rep.reset(ROCKSDB_NAMESPACE::NewSstFileManager(env->rep));
5251+
return sfm;
5252+
}
5253+
5254+
void rocksdb_sst_file_manager_destroy(rocksdb_sst_file_manager_t* sfm) {
5255+
delete sfm;
5256+
}
5257+
5258+
void rocksdb_sst_file_manager_set_max_allowed_space_usage(
5259+
rocksdb_sst_file_manager_t* sfm, uint64_t max_allowed_space) {
5260+
sfm->rep->SetMaxAllowedSpaceUsage(max_allowed_space);
5261+
}
5262+
5263+
void rocksdb_sst_file_manager_set_compaction_buffer_size(
5264+
rocksdb_sst_file_manager_t* sfm, uint64_t compaction_buffer_size) {
5265+
sfm->rep->SetCompactionBufferSize(compaction_buffer_size);
5266+
}
5267+
5268+
bool rocksdb_sst_file_manager_is_max_allowed_space_reached(
5269+
rocksdb_sst_file_manager_t* sfm) {
5270+
return sfm->rep->IsMaxAllowedSpaceReached();
5271+
}
5272+
5273+
bool rocksdb_sst_file_manager_is_max_allowed_space_reached_including_compactions(
5274+
rocksdb_sst_file_manager_t* sfm) {
5275+
return sfm->rep->IsMaxAllowedSpaceReachedIncludingCompactions();
5276+
}
5277+
5278+
uint64_t rocksdb_sst_file_manager_get_total_size(
5279+
rocksdb_sst_file_manager_t* sfm) {
5280+
return sfm->rep->GetTotalSize();
5281+
}
5282+
5283+
int64_t rocksdb_sst_file_manager_get_delete_rate_bytes_per_second(
5284+
rocksdb_sst_file_manager_t* sfm) {
5285+
return sfm->rep->GetDeleteRateBytesPerSecond();
5286+
}
5287+
5288+
void rocksdb_sst_file_manager_set_delete_rate_bytes_per_second(
5289+
rocksdb_sst_file_manager_t* sfm, int64_t delete_rate) {
5290+
return sfm->rep->SetDeleteRateBytesPerSecond(delete_rate);
5291+
}
5292+
5293+
double rocksdb_sst_file_manager_get_max_trash_db_ratio(
5294+
rocksdb_sst_file_manager_t* sfm) {
5295+
return sfm->rep->GetMaxTrashDBRatio();
5296+
}
5297+
5298+
void rocksdb_sst_file_manager_set_max_trash_db_ratio(
5299+
rocksdb_sst_file_manager_t* sfm, double ratio) {
5300+
return sfm->rep->SetMaxTrashDBRatio(ratio);
5301+
}
5302+
5303+
uint64_t rocksdb_sst_file_manager_get_total_trash_size(
5304+
rocksdb_sst_file_manager_t* sfm) {
5305+
return sfm->rep->GetTotalTrashSize();
5306+
}
5307+
52425308
rocksdb_dbpath_t* rocksdb_dbpath_create(const char* path,
52435309
uint64_t target_size) {
52445310
rocksdb_dbpath_t* result = new rocksdb_dbpath_t;

db/c_test.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4050,6 +4050,23 @@ int main(int argc, char** argv) {
40504050
rocksdb_cache_destroy(lru);
40514051
}
40524052

4053+
StartPhase("sst_file_manager");
4054+
{
4055+
rocksdb_sst_file_manager_t* sst_file_manager;
4056+
sst_file_manager = rocksdb_sst_file_manager_create(env);
4057+
rocksdb_sst_file_manager_set_delete_rate_bytes_per_second(sst_file_manager,
4058+
1);
4059+
rocksdb_sst_file_manager_set_max_trash_db_ratio(sst_file_manager, 0.75);
4060+
4061+
CheckCondition(1 ==
4062+
rocksdb_sst_file_manager_get_delete_rate_bytes_per_second(
4063+
sst_file_manager));
4064+
CheckCondition(0.75 == rocksdb_sst_file_manager_get_max_trash_db_ratio(
4065+
sst_file_manager));
4066+
4067+
rocksdb_sst_file_manager_destroy(sst_file_manager);
4068+
}
4069+
40534070
StartPhase("cancel_all_background_work");
40544071
rocksdb_cancel_all_background_work(db, 1);
40554072

include/rocksdb/c.h

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ typedef struct rocksdb_hyper_clock_cache_options_t
7979
rocksdb_hyper_clock_cache_options_t;
8080
typedef struct rocksdb_cache_t rocksdb_cache_t;
8181
typedef struct rocksdb_write_buffer_manager_t rocksdb_write_buffer_manager_t;
82+
typedef struct rocksdb_sst_file_manager_t rocksdb_sst_file_manager_t;
8283
typedef struct rocksdb_compactionfilter_t rocksdb_compactionfilter_t;
8384
typedef struct rocksdb_compactionfiltercontext_t
8485
rocksdb_compactionfiltercontext_t;
@@ -2225,6 +2226,51 @@ extern ROCKSDB_LIBRARY_API void rocksdb_write_buffer_manager_set_buffer_size(
22252226
extern ROCKSDB_LIBRARY_API void rocksdb_write_buffer_manager_set_allow_stall(
22262227
rocksdb_write_buffer_manager_t* wbm, bool new_allow_stall);
22272228

2229+
/* SstFileManager */
2230+
2231+
extern ROCKSDB_LIBRARY_API rocksdb_sst_file_manager_t*
2232+
rocksdb_sst_file_manager_create(rocksdb_env_t* env);
2233+
2234+
extern ROCKSDB_LIBRARY_API void rocksdb_sst_file_manager_destroy(
2235+
rocksdb_sst_file_manager_t* sfm);
2236+
2237+
extern ROCKSDB_LIBRARY_API void
2238+
rocksdb_sst_file_manager_set_max_allowed_space_usage(
2239+
rocksdb_sst_file_manager_t* sfm, uint64_t max_allowed_space);
2240+
2241+
extern ROCKSDB_LIBRARY_API void
2242+
rocksdb_sst_file_manager_set_compaction_buffer_size(
2243+
rocksdb_sst_file_manager_t* sfm, uint64_t compaction_buffer_size);
2244+
2245+
extern ROCKSDB_LIBRARY_API bool
2246+
rocksdb_sst_file_manager_is_max_allowed_space_reached(
2247+
rocksdb_sst_file_manager_t* sfm);
2248+
2249+
extern ROCKSDB_LIBRARY_API bool
2250+
rocksdb_sst_file_manager_is_max_allowed_space_reached_including_compactions(
2251+
rocksdb_sst_file_manager_t* sfm);
2252+
2253+
extern ROCKSDB_LIBRARY_API uint64_t
2254+
rocksdb_sst_file_manager_get_total_size(rocksdb_sst_file_manager_t* sfm);
2255+
2256+
extern ROCKSDB_LIBRARY_API int64_t
2257+
rocksdb_sst_file_manager_get_delete_rate_bytes_per_second(
2258+
rocksdb_sst_file_manager_t* sfm);
2259+
2260+
extern ROCKSDB_LIBRARY_API void
2261+
rocksdb_sst_file_manager_set_delete_rate_bytes_per_second(
2262+
rocksdb_sst_file_manager_t* sfm, int64_t delete_rate);
2263+
2264+
extern ROCKSDB_LIBRARY_API double
2265+
rocksdb_sst_file_manager_get_max_trash_db_ratio(
2266+
rocksdb_sst_file_manager_t* sfm);
2267+
2268+
extern ROCKSDB_LIBRARY_API void rocksdb_sst_file_manager_set_max_trash_db_ratio(
2269+
rocksdb_sst_file_manager_t* sfm, double ratio);
2270+
2271+
extern ROCKSDB_LIBRARY_API uint64_t
2272+
rocksdb_sst_file_manager_get_total_trash_size(rocksdb_sst_file_manager_t* sfm);
2273+
22282274
/* HyperClockCache */
22292275

22302276
extern ROCKSDB_LIBRARY_API rocksdb_hyper_clock_cache_options_t*

0 commit comments

Comments
 (0)