diff --git a/db/c.cc b/db/c.cc index 7b3dee3ea60d..e3e6f1c04c6d 100644 --- a/db/c.cc +++ b/db/c.cc @@ -4242,6 +4242,15 @@ void rocksdb_set_options(rocksdb_t* db, int count, const char* const keys[], SaveError(errptr, db->rep->SetOptions(options_map)); } +void rocksdb_set_db_options(rocksdb_t* db, int count, const char* const keys[], + const char* const values[], char** errptr) { + std::unordered_map options_map; + for (int i = 0; i < count; i++) { + options_map[keys[i]] = values[i]; + } + SaveError(errptr, db->rep->SetDBOptions(options_map)); +} + void rocksdb_set_options_cf(rocksdb_t* db, rocksdb_column_family_handle_t* handle, int count, const char* const keys[], diff --git a/db/c_test.c b/db/c_test.c index 76a88666253b..d9b3fcc7b3be 100644 --- a/db/c_test.c +++ b/db/c_test.c @@ -948,6 +948,19 @@ int main(int argc, char** argv) { CheckNoError(err); CheckGet(db, roptions, "foo", "hello"); + StartPhase("set_db_options"); + { + const char* keys[] = {"stats_dump_period_sec"}; + const char* values[] = {"10"}; + rocksdb_set_db_options(db, 1, keys, values, &err); + CheckNoError(err); + + keys[0] = "not_a_db_option"; + rocksdb_set_db_options(db, 1, keys, values, &err); + CheckCondition(err != NULL); + Free(&err); + } + StartPhase("backup_and_restore"); { rocksdb_destroy_db(options, dbbackupname, &err); diff --git a/include/rocksdb/c.h b/include/rocksdb/c.h index 39e53f2056f2..098bc87ef3f4 100644 --- a/include/rocksdb/c.h +++ b/include/rocksdb/c.h @@ -1426,6 +1426,10 @@ extern ROCKSDB_LIBRARY_API void rocksdb_set_options(rocksdb_t* db, int count, const char* const values[], char** errptr); +extern ROCKSDB_LIBRARY_API void rocksdb_set_db_options( + rocksdb_t* db, int count, const char* const keys[], + const char* const values[], char** errptr); + extern ROCKSDB_LIBRARY_API void rocksdb_set_options_cf( rocksdb_t* db, rocksdb_column_family_handle_t* handle, int count, const char* const keys[], const char* const values[], char** errptr);