Add C API for WaitForCompact (#11737)

Summary:
Add a bunch of C API functions to expose new `WaitForCompact` function and related options.

Pull Request resolved: https://github.com/facebook/rocksdb/pull/11737

Test Plan: unit tests

Reviewed By: jaykorean

Differential Revision: D48568239

Pulled By: abulimov

fbshipit-source-id: 1ff35972d7abacd7e1e17fe2ada1e20cdc88d8de
This commit is contained in:
Alexander Bulimov 2023-08-22 14:32:35 -07:00 committed by Facebook GitHub Bot
parent 1303573589
commit 2b6bcfe590
3 changed files with 135 additions and 0 deletions

59
db/c.cc
View File

@ -120,6 +120,7 @@ using ROCKSDB_NAMESPACE::TransactionDB;
using ROCKSDB_NAMESPACE::TransactionDBOptions;
using ROCKSDB_NAMESPACE::TransactionLogIterator;
using ROCKSDB_NAMESPACE::TransactionOptions;
using ROCKSDB_NAMESPACE::WaitForCompactOptions;
using ROCKSDB_NAMESPACE::WALRecoveryMode;
using ROCKSDB_NAMESPACE::WritableFile;
using ROCKSDB_NAMESPACE::WriteBatch;
@ -275,6 +276,9 @@ struct rocksdb_optimistictransactiondb_t {
struct rocksdb_optimistictransaction_options_t {
OptimisticTransactionOptions rep;
};
struct rocksdb_wait_for_compact_options_t {
WaitForCompactOptions rep;
};
struct rocksdb_compactionfiltercontext_t {
CompactionFilter::Context rep;
@ -6719,4 +6723,59 @@ double rocksdb_statistics_histogram_data_get_min(
return data->rep.min;
}
void rocksdb_wait_for_compact(rocksdb_t* db,
rocksdb_wait_for_compact_options_t* options,
char** errptr) {
SaveError(errptr, db->rep->WaitForCompact(options->rep));
}
rocksdb_wait_for_compact_options_t* rocksdb_wait_for_compact_options_create() {
return new rocksdb_wait_for_compact_options_t;
}
void rocksdb_wait_for_compact_options_destroy(
rocksdb_wait_for_compact_options_t* opt) {
delete opt;
}
void rocksdb_wait_for_compact_options_set_abort_on_pause(
rocksdb_wait_for_compact_options_t* opt, unsigned char v) {
opt->rep.abort_on_pause = v;
}
unsigned char rocksdb_wait_for_compact_options_get_abort_on_pause(
rocksdb_wait_for_compact_options_t* opt) {
return opt->rep.abort_on_pause;
}
void rocksdb_wait_for_compact_options_set_flush(
rocksdb_wait_for_compact_options_t* opt, unsigned char v) {
opt->rep.flush = v;
}
unsigned char rocksdb_wait_for_compact_options_get_flush(
rocksdb_wait_for_compact_options_t* opt) {
return opt->rep.flush;
}
void rocksdb_wait_for_compact_options_set_close_db(
rocksdb_wait_for_compact_options_t* opt, unsigned char v) {
opt->rep.close_db = v;
}
unsigned char rocksdb_wait_for_compact_options_get_close_db(
rocksdb_wait_for_compact_options_t* opt) {
return opt->rep.close_db;
}
void rocksdb_wait_for_compact_options_set_timeout(
rocksdb_wait_for_compact_options_t* opt, uint64_t microseconds) {
opt->rep.timeout = std::chrono::microseconds(microseconds);
}
uint64_t rocksdb_wait_for_compact_options_get_timeout(
rocksdb_wait_for_compact_options_t* opt) {
return opt->rep.timeout.count();
}
} // end extern "C"

View File

@ -375,6 +375,11 @@ static rocksdb_t* CheckCompaction(rocksdb_t* db, rocksdb_options_t* options,
// Force compaction
rocksdb_compact_range(db, NULL, 0, NULL, 0);
rocksdb_wait_for_compact_options_t* wco;
wco = rocksdb_wait_for_compact_options_create();
rocksdb_wait_for_compact(db, wco, &err);
CheckNoError(err);
rocksdb_wait_for_compact_options_destroy(wco);
// should have filtered bar, but not foo
CheckGet(db, roptions, "foo", "foovalue");
CheckGet(db, roptions, "bar", NULL);
@ -3687,6 +3692,37 @@ int main(int argc, char** argv) {
rocksdb_statistics_histogram_data_destroy(hist);
}
StartPhase("wait_for_compact_options");
{
rocksdb_wait_for_compact_options_t* wco;
wco = rocksdb_wait_for_compact_options_create();
rocksdb_wait_for_compact_options_set_abort_on_pause(wco, 1);
CheckCondition(1 ==
rocksdb_wait_for_compact_options_get_abort_on_pause(wco));
rocksdb_wait_for_compact_options_set_flush(wco, 1);
CheckCondition(1 == rocksdb_wait_for_compact_options_get_flush(wco));
rocksdb_wait_for_compact_options_set_close_db(wco, 1);
CheckCondition(1 == rocksdb_wait_for_compact_options_get_close_db(wco));
rocksdb_wait_for_compact_options_set_timeout(wco, 342);
CheckCondition(342 == rocksdb_wait_for_compact_options_get_timeout(wco));
rocksdb_wait_for_compact_options_destroy(wco);
}
StartPhase("wait_for_compact");
{
rocksdb_wait_for_compact_options_t* wco;
wco = rocksdb_wait_for_compact_options_create();
rocksdb_wait_for_compact_options_set_flush(wco, 1);
rocksdb_wait_for_compact(db, wco, &err);
CheckNoError(err);
rocksdb_wait_for_compact_options_destroy(wco);
}
StartPhase("cancel_all_background_work");
rocksdb_cancel_all_background_work(db, 1);

View File

@ -138,6 +138,8 @@ typedef struct rocksdb_memory_consumers_t rocksdb_memory_consumers_t;
typedef struct rocksdb_memory_usage_t rocksdb_memory_usage_t;
typedef struct rocksdb_statistics_histogram_data_t
rocksdb_statistics_histogram_data_t;
typedef struct rocksdb_wait_for_compact_options_t
rocksdb_wait_for_compact_options_t;
/* DB operations */
@ -2927,6 +2929,44 @@ extern ROCKSDB_LIBRARY_API uint64_t rocksdb_statistics_histogram_data_get_sum(
extern ROCKSDB_LIBRARY_API double rocksdb_statistics_histogram_data_get_min(
rocksdb_statistics_histogram_data_t* data);
extern ROCKSDB_LIBRARY_API void rocksdb_wait_for_compact(
rocksdb_t* db, rocksdb_wait_for_compact_options_t* options, char** errptr);
extern ROCKSDB_LIBRARY_API rocksdb_wait_for_compact_options_t*
rocksdb_wait_for_compact_options_create(void);
extern ROCKSDB_LIBRARY_API void rocksdb_wait_for_compact_options_destroy(
rocksdb_wait_for_compact_options_t* opt);
extern ROCKSDB_LIBRARY_API void
rocksdb_wait_for_compact_options_set_abort_on_pause(
rocksdb_wait_for_compact_options_t* opt, unsigned char v);
extern ROCKSDB_LIBRARY_API unsigned char
rocksdb_wait_for_compact_options_get_abort_on_pause(
rocksdb_wait_for_compact_options_t* opt);
extern ROCKSDB_LIBRARY_API void rocksdb_wait_for_compact_options_set_flush(
rocksdb_wait_for_compact_options_t* opt, unsigned char v);
extern ROCKSDB_LIBRARY_API unsigned char
rocksdb_wait_for_compact_options_get_flush(
rocksdb_wait_for_compact_options_t* opt);
extern ROCKSDB_LIBRARY_API void rocksdb_wait_for_compact_options_set_close_db(
rocksdb_wait_for_compact_options_t* opt, unsigned char v);
extern ROCKSDB_LIBRARY_API unsigned char
rocksdb_wait_for_compact_options_get_close_db(
rocksdb_wait_for_compact_options_t* opt);
extern ROCKSDB_LIBRARY_API void rocksdb_wait_for_compact_options_set_timeout(
rocksdb_wait_for_compact_options_t* opt, uint64_t microseconds);
extern ROCKSDB_LIBRARY_API uint64_t
rocksdb_wait_for_compact_options_get_timeout(
rocksdb_wait_for_compact_options_t* opt);
#ifdef __cplusplus
} /* end extern "C" */
#endif