Added db paths to c

Summary: Closes https://github.com/facebook/rocksdb/pull/2613

Differential Revision: D5476064

Pulled By: sagar0

fbshipit-source-id: 6b30a9eacb93a945bbe499eafb90565fa9f1798b
This commit is contained in:
kapitan-k 2017-07-24 11:47:34 -07:00 committed by Facebook Github Bot
parent 1d8aa2961c
commit 34112aeffd
3 changed files with 56 additions and 0 deletions

26
db/c.cc
View File

@ -52,6 +52,7 @@ using rocksdb::CompressionType;
using rocksdb::WALRecoveryMode; using rocksdb::WALRecoveryMode;
using rocksdb::DB; using rocksdb::DB;
using rocksdb::DBOptions; using rocksdb::DBOptions;
using rocksdb::DbPath;
using rocksdb::Env; using rocksdb::Env;
using rocksdb::EnvOptions; using rocksdb::EnvOptions;
using rocksdb::InfoLogLevel; using rocksdb::InfoLogLevel;
@ -382,6 +383,10 @@ struct rocksdb_mergeoperator_t : public MergeOperator {
} }
}; };
struct rocksdb_dbpath_t {
DbPath rep;
};
struct rocksdb_env_t { struct rocksdb_env_t {
Env* rep; Env* rep;
bool is_default; bool is_default;
@ -2009,6 +2014,16 @@ void rocksdb_options_set_paranoid_checks(
opt->rep.paranoid_checks = v; 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<DbPath> 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) { void rocksdb_options_set_env(rocksdb_options_t* opt, rocksdb_env_t* env) {
opt->rep.env = (env ? env->rep : nullptr); 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(); 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* rocksdb_create_default_env() {
rocksdb_env_t* result = new rocksdb_env_t; rocksdb_env_t* result = new rocksdb_env_t;
result->rep = Env::Default(); result->rep = Env::Default();

View File

@ -41,6 +41,7 @@ static char dbname[200];
static char sstfilename[200]; static char sstfilename[200];
static char dbbackupname[200]; static char dbbackupname[200];
static char dbcheckpointname[200]; static char dbcheckpointname[200];
static char dbpathname[200];
static void StartPhase(const char* name) { static void StartPhase(const char* name) {
fprintf(stderr, "=== Test %s\n", name); fprintf(stderr, "=== Test %s\n", name);
@ -351,6 +352,7 @@ int main(int argc, char** argv) {
rocksdb_t* db; rocksdb_t* db;
rocksdb_comparator_t* cmp; rocksdb_comparator_t* cmp;
rocksdb_cache_t* cache; rocksdb_cache_t* cache;
rocksdb_dbpath_t *dbpath;
rocksdb_env_t* env; rocksdb_env_t* env;
rocksdb_options_t* options; rocksdb_options_t* options;
rocksdb_compactoptions_t* coptions; rocksdb_compactoptions_t* coptions;
@ -385,8 +387,14 @@ int main(int argc, char** argv) {
GetTempDir(), GetTempDir(),
((int)geteuid())); ((int)geteuid()));
snprintf(dbpathname, sizeof(dbpathname),
"%s/rocksdb_c_test-%d-dbpath",
GetTempDir(),
((int) geteuid()));
StartPhase("create_objects"); StartPhase("create_objects");
cmp = rocksdb_comparator_create(NULL, CmpDestroy, CmpCompare, CmpName); cmp = rocksdb_comparator_create(NULL, CmpDestroy, CmpCompare, CmpName);
dbpath = rocksdb_dbpath_create(dbpathname, 1024 * 1024);
env = rocksdb_create_default_env(); env = rocksdb_create_default_env();
cache = rocksdb_cache_create_lru(100000); cache = rocksdb_cache_create_lru(100000);
@ -1440,6 +1448,18 @@ int main(int argc, char** argv) {
CheckNoError(err); 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"); StartPhase("cleanup");
rocksdb_close(db); rocksdb_close(db);
rocksdb_options_destroy(options); rocksdb_options_destroy(options);
@ -1449,6 +1469,7 @@ int main(int argc, char** argv) {
rocksdb_compactoptions_destroy(coptions); rocksdb_compactoptions_destroy(coptions);
rocksdb_cache_destroy(cache); rocksdb_cache_destroy(cache);
rocksdb_comparator_destroy(cmp); rocksdb_comparator_destroy(cmp);
rocksdb_dbpath_destroy(dbpath);
rocksdb_env_destroy(env); rocksdb_env_destroy(env);
fprintf(stderr, "PASS\n"); fprintf(stderr, "PASS\n");

View File

@ -82,6 +82,7 @@ typedef struct rocksdb_compactionfiltercontext_t
typedef struct rocksdb_compactionfilterfactory_t typedef struct rocksdb_compactionfilterfactory_t
rocksdb_compactionfilterfactory_t; rocksdb_compactionfilterfactory_t;
typedef struct rocksdb_comparator_t rocksdb_comparator_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_env_t rocksdb_env_t;
typedef struct rocksdb_fifo_compaction_options_t rocksdb_fifo_compaction_options_t; typedef struct rocksdb_fifo_compaction_options_t rocksdb_fifo_compaction_options_t;
typedef struct rocksdb_filelock_t rocksdb_filelock_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); rocksdb_options_t*, unsigned char);
extern ROCKSDB_LIBRARY_API void rocksdb_options_set_paranoid_checks( extern ROCKSDB_LIBRARY_API void rocksdb_options_set_paranoid_checks(
rocksdb_options_t*, unsigned char); 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*, extern ROCKSDB_LIBRARY_API void rocksdb_options_set_env(rocksdb_options_t*,
rocksdb_env_t*); rocksdb_env_t*);
extern ROCKSDB_LIBRARY_API void rocksdb_options_set_info_log(rocksdb_options_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 extern ROCKSDB_LIBRARY_API size_t
rocksdb_cache_get_pinned_usage(rocksdb_cache_t* cache); 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 */ /* Env */
extern ROCKSDB_LIBRARY_API rocksdb_env_t* rocksdb_create_default_env(); extern ROCKSDB_LIBRARY_API rocksdb_env_t* rocksdb_create_default_env();