From 34112aeffde7f8d63450c0647f16382c2f6b8836 Mon Sep 17 00:00:00 2001 From: kapitan-k Date: Mon, 24 Jul 2017 11:47:34 -0700 Subject: [PATCH] Added db paths to c Summary: Closes https://github.com/facebook/rocksdb/pull/2613 Differential Revision: D5476064 Pulled By: sagar0 fbshipit-source-id: 6b30a9eacb93a945bbe499eafb90565fa9f1798b --- db/c.cc | 26 ++++++++++++++++++++++++++ db/c_test.c | 21 +++++++++++++++++++++ include/rocksdb/c.h | 9 +++++++++ 3 files changed, 56 insertions(+) diff --git a/db/c.cc b/db/c.cc index 441ffade3..e1af3836e 100644 --- a/db/c.cc +++ b/db/c.cc @@ -52,6 +52,7 @@ using rocksdb::CompressionType; using rocksdb::WALRecoveryMode; using rocksdb::DB; using rocksdb::DBOptions; +using rocksdb::DbPath; using rocksdb::Env; using rocksdb::EnvOptions; using rocksdb::InfoLogLevel; @@ -382,6 +383,10 @@ struct rocksdb_mergeoperator_t : public MergeOperator { } }; +struct rocksdb_dbpath_t { + DbPath rep; +}; + struct rocksdb_env_t { Env* rep; bool is_default; @@ -2009,6 +2014,16 @@ void rocksdb_options_set_paranoid_checks( opt->rep.paranoid_checks = v; } +void rocksdb_options_set_db_paths(rocksdb_options_t* opt, + const rocksdb_dbpath_t** dbpath_values, + size_t num_paths) { + std::vector db_paths(num_paths); + for (size_t i = 0; i < num_paths; ++i) { + db_paths[i] = dbpath_values[i]->rep; + } + opt->rep.db_paths = db_paths; +} + void rocksdb_options_set_env(rocksdb_options_t* opt, rocksdb_env_t* env) { opt->rep.env = (env ? env->rep : nullptr); } @@ -2789,6 +2804,17 @@ size_t rocksdb_cache_get_pinned_usage(rocksdb_cache_t* cache) { return cache->rep->GetPinnedUsage(); } +rocksdb_dbpath_t* rocksdb_dbpath_create(const char* path, uint64_t target_size) { + rocksdb_dbpath_t* result = new rocksdb_dbpath_t; + result->rep.path = std::string(path); + result->rep.target_size = target_size; + return result; +} + +void rocksdb_dbpath_destroy(rocksdb_dbpath_t* dbpath) { + delete dbpath; +} + rocksdb_env_t* rocksdb_create_default_env() { rocksdb_env_t* result = new rocksdb_env_t; result->rep = Env::Default(); diff --git a/db/c_test.c b/db/c_test.c index 57f19aa96..4bdf89bee 100644 --- a/db/c_test.c +++ b/db/c_test.c @@ -41,6 +41,7 @@ static char dbname[200]; static char sstfilename[200]; static char dbbackupname[200]; static char dbcheckpointname[200]; +static char dbpathname[200]; static void StartPhase(const char* name) { fprintf(stderr, "=== Test %s\n", name); @@ -351,6 +352,7 @@ int main(int argc, char** argv) { rocksdb_t* db; rocksdb_comparator_t* cmp; rocksdb_cache_t* cache; + rocksdb_dbpath_t *dbpath; rocksdb_env_t* env; rocksdb_options_t* options; rocksdb_compactoptions_t* coptions; @@ -385,8 +387,14 @@ int main(int argc, char** argv) { GetTempDir(), ((int)geteuid())); + snprintf(dbpathname, sizeof(dbpathname), + "%s/rocksdb_c_test-%d-dbpath", + GetTempDir(), + ((int) geteuid())); + StartPhase("create_objects"); cmp = rocksdb_comparator_create(NULL, CmpDestroy, CmpCompare, CmpName); + dbpath = rocksdb_dbpath_create(dbpathname, 1024 * 1024); env = rocksdb_create_default_env(); cache = rocksdb_cache_create_lru(100000); @@ -1440,6 +1448,18 @@ int main(int argc, char** argv) { CheckNoError(err); } + // Simple sanity check that options setting db_paths work. + StartPhase("open_db_paths"); + { + rocksdb_close(db); + rocksdb_destroy_db(options, dbname, &err); + + const rocksdb_dbpath_t* paths[1] = {dbpath}; + rocksdb_options_set_db_paths(options, paths, 1); + db = rocksdb_open(options, dbname, &err); + CheckNoError(err); + } + StartPhase("cleanup"); rocksdb_close(db); rocksdb_options_destroy(options); @@ -1449,6 +1469,7 @@ int main(int argc, char** argv) { rocksdb_compactoptions_destroy(coptions); rocksdb_cache_destroy(cache); rocksdb_comparator_destroy(cmp); + rocksdb_dbpath_destroy(dbpath); rocksdb_env_destroy(env); fprintf(stderr, "PASS\n"); diff --git a/include/rocksdb/c.h b/include/rocksdb/c.h index 34364deac..2d3356039 100644 --- a/include/rocksdb/c.h +++ b/include/rocksdb/c.h @@ -82,6 +82,7 @@ typedef struct rocksdb_compactionfiltercontext_t typedef struct rocksdb_compactionfilterfactory_t rocksdb_compactionfilterfactory_t; typedef struct rocksdb_comparator_t rocksdb_comparator_t; +typedef struct rocksdb_dbpath_t rocksdb_dbpath_t; typedef struct rocksdb_env_t rocksdb_env_t; typedef struct rocksdb_fifo_compaction_options_t rocksdb_fifo_compaction_options_t; typedef struct rocksdb_filelock_t rocksdb_filelock_t; @@ -713,6 +714,9 @@ extern ROCKSDB_LIBRARY_API void rocksdb_options_set_error_if_exists( rocksdb_options_t*, unsigned char); extern ROCKSDB_LIBRARY_API void rocksdb_options_set_paranoid_checks( rocksdb_options_t*, unsigned char); +extern ROCKSDB_LIBRARY_API void rocksdb_options_set_db_paths(rocksdb_options_t*, + const rocksdb_dbpath_t** path_values, + size_t num_paths); extern ROCKSDB_LIBRARY_API void rocksdb_options_set_env(rocksdb_options_t*, rocksdb_env_t*); extern ROCKSDB_LIBRARY_API void rocksdb_options_set_info_log(rocksdb_options_t*, @@ -1089,6 +1093,11 @@ rocksdb_cache_get_usage(rocksdb_cache_t* cache); extern ROCKSDB_LIBRARY_API size_t rocksdb_cache_get_pinned_usage(rocksdb_cache_t* cache); +/* DBPath */ + +extern ROCKSDB_LIBRARY_API rocksdb_dbpath_t* rocksdb_dbpath_create(const char* path, uint64_t target_size); +extern ROCKSDB_LIBRARY_API void rocksdb_dbpath_destroy(rocksdb_dbpath_t*); + /* Env */ extern ROCKSDB_LIBRARY_API rocksdb_env_t* rocksdb_create_default_env();