Add more C bindings for OptimisticTransactionDB (#8526)

Summary:
* `rocksdb_optimistictransactiondb_checkpoint_object_create`
* `rocksdb_optimistictransactiondb_write`

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

Reviewed By: ajkr

Differential Revision: D30076822

Pulled By: jay-zhuang

fbshipit-source-id: a59956a8d5449e75d39a8087fbb2bad148cf697d
main
Roy Crihfield 3 years ago committed by Facebook GitHub Bot
parent 23ffed9cb7
commit d4b75d295f
  1. 61
      db/c.cc
  2. 22
      include/rocksdb/c.h

@ -4875,6 +4875,27 @@ void rocksdb_optimistictransaction_options_set_set_snapshot(
opt->rep.set_snapshot = v; opt->rep.set_snapshot = v;
} }
char* rocksdb_optimistictransactiondb_property_value(
rocksdb_optimistictransactiondb_t* db, const char* propname) {
std::string tmp;
if (db->rep->GetProperty(Slice(propname), &tmp)) {
// We use strdup() since we expect human readable output.
return strdup(tmp.c_str());
} else {
return nullptr;
}
}
int rocksdb_optimistictransactiondb_property_int(
rocksdb_optimistictransactiondb_t* db, const char* propname,
uint64_t* out_val) {
if (db->rep->GetIntProperty(Slice(propname), out_val)) {
return 0;
} else {
return -1;
}
}
rocksdb_column_family_handle_t* rocksdb_transactiondb_create_column_family( rocksdb_column_family_handle_t* rocksdb_transactiondb_create_column_family(
rocksdb_transactiondb_t* txn_db, rocksdb_transactiondb_t* txn_db,
const rocksdb_options_t* column_family_options, const rocksdb_options_t* column_family_options,
@ -4945,6 +4966,27 @@ void rocksdb_transactiondb_release_snapshot(
delete snapshot; delete snapshot;
} }
char* rocksdb_transactiondb_property_value(rocksdb_transactiondb_t* db,
const char* propname) {
std::string tmp;
if (db->rep->GetProperty(Slice(propname), &tmp)) {
// We use strdup() since we expect human readable output.
return strdup(tmp.c_str());
} else {
return nullptr;
}
}
int rocksdb_transactiondb_property_int(rocksdb_transactiondb_t* db,
const char* propname,
uint64_t* out_val) {
if (db->rep->GetIntProperty(Slice(propname), out_val)) {
return 0;
} else {
return -1;
}
}
rocksdb_transaction_t* rocksdb_transaction_begin( rocksdb_transaction_t* rocksdb_transaction_begin(
rocksdb_transactiondb_t* txn_db, rocksdb_transactiondb_t* txn_db,
const rocksdb_writeoptions_t* write_options, const rocksdb_writeoptions_t* write_options,
@ -5347,12 +5389,31 @@ rocksdb_transaction_t* rocksdb_optimistictransaction_begin(
return old_txn; return old_txn;
} }
// Write batch into OptimisticTransactionDB
void rocksdb_optimistictransactiondb_write(
rocksdb_optimistictransactiondb_t* otxn_db,
const rocksdb_writeoptions_t* options, rocksdb_writebatch_t* batch,
char** errptr) {
SaveError(errptr, otxn_db->rep->Write(options->rep, &batch->rep));
}
void rocksdb_optimistictransactiondb_close( void rocksdb_optimistictransactiondb_close(
rocksdb_optimistictransactiondb_t* otxn_db) { rocksdb_optimistictransactiondb_t* otxn_db) {
delete otxn_db->rep; delete otxn_db->rep;
delete otxn_db; delete otxn_db;
} }
rocksdb_checkpoint_t* rocksdb_optimistictransactiondb_checkpoint_object_create(
rocksdb_optimistictransactiondb_t* otxn_db, char** errptr) {
Checkpoint* checkpoint;
if (SaveError(errptr, Checkpoint::Create(otxn_db->rep, &checkpoint))) {
return nullptr;
}
rocksdb_checkpoint_t* result = new rocksdb_checkpoint_t;
result->rep = checkpoint;
return result;
}
void rocksdb_free(void* ptr) { free(ptr); } void rocksdb_free(void* ptr) { free(ptr); }
rocksdb_pinnableslice_t* rocksdb_get_pinned( rocksdb_pinnableslice_t* rocksdb_get_pinned(

@ -2039,6 +2039,12 @@ rocksdb_transactiondb_create_snapshot(rocksdb_transactiondb_t* txn_db);
extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_release_snapshot( extern ROCKSDB_LIBRARY_API void rocksdb_transactiondb_release_snapshot(
rocksdb_transactiondb_t* txn_db, const rocksdb_snapshot_t* snapshot); rocksdb_transactiondb_t* txn_db, const rocksdb_snapshot_t* snapshot);
extern ROCKSDB_LIBRARY_API char* rocksdb_transactiondb_property_value(
rocksdb_transactiondb_t* db, const char* propname);
extern ROCKSDB_LIBRARY_API int rocksdb_transactiondb_property_int(
rocksdb_transactiondb_t* db, const char* propname, uint64_t* out_val);
extern ROCKSDB_LIBRARY_API rocksdb_transaction_t* rocksdb_transaction_begin( extern ROCKSDB_LIBRARY_API rocksdb_transaction_t* rocksdb_transaction_begin(
rocksdb_transactiondb_t* txn_db, rocksdb_transactiondb_t* txn_db,
const rocksdb_writeoptions_t* write_options, const rocksdb_writeoptions_t* write_options,
@ -2196,9 +2202,18 @@ rocksdb_optimistictransaction_begin(
const rocksdb_optimistictransaction_options_t* otxn_options, const rocksdb_optimistictransaction_options_t* otxn_options,
rocksdb_transaction_t* old_txn); rocksdb_transaction_t* old_txn);
extern ROCKSDB_LIBRARY_API void rocksdb_optimistictransactiondb_write(
rocksdb_optimistictransactiondb_t* otxn_db,
const rocksdb_writeoptions_t* options, rocksdb_writebatch_t* batch,
char** errptr);
extern ROCKSDB_LIBRARY_API void rocksdb_optimistictransactiondb_close( extern ROCKSDB_LIBRARY_API void rocksdb_optimistictransactiondb_close(
rocksdb_optimistictransactiondb_t* otxn_db); rocksdb_optimistictransactiondb_t* otxn_db);
extern ROCKSDB_LIBRARY_API rocksdb_checkpoint_t*
rocksdb_optimistictransactiondb_checkpoint_object_create(
rocksdb_optimistictransactiondb_t* otxn_db, char** errptr);
/* Transaction Options */ /* Transaction Options */
extern ROCKSDB_LIBRARY_API rocksdb_transactiondb_options_t* extern ROCKSDB_LIBRARY_API rocksdb_transactiondb_options_t*
@ -2257,6 +2272,13 @@ extern ROCKSDB_LIBRARY_API void
rocksdb_optimistictransaction_options_set_set_snapshot( rocksdb_optimistictransaction_options_set_set_snapshot(
rocksdb_optimistictransaction_options_t* opt, unsigned char v); rocksdb_optimistictransaction_options_t* opt, unsigned char v);
extern ROCKSDB_LIBRARY_API char* rocksdb_optimistictransactiondb_property_value(
rocksdb_optimistictransactiondb_t* db, const char* propname);
extern ROCKSDB_LIBRARY_API int rocksdb_optimistictransactiondb_property_int(
rocksdb_optimistictransactiondb_t* db, const char* propname,
uint64_t* out_val);
// referring to convention (3), this should be used by client // referring to convention (3), this should be used by client
// to free memory that was malloc()ed // to free memory that was malloc()ed
extern ROCKSDB_LIBRARY_API void rocksdb_free(void* ptr); extern ROCKSDB_LIBRARY_API void rocksdb_free(void* ptr);

Loading…
Cancel
Save