mirror of
https://github.com/isar/libmdbx.git
synced 2025-10-06 01:02:20 +08:00
mdbx: use enums & bool in the C API.
Change-Id: I952f578cceb7d02ade16f545d47245d4d9106441
This commit is contained in:
@@ -24,9 +24,9 @@ bool testcase_append::run() {
|
||||
keyvalue_maker.setup(config.params, config.actor_id, 0 /* thread_number */);
|
||||
/* LY: тест наполнения таблиц в append-режиме,
|
||||
* при котором записи добавляются строго в конец (в порядке сортировки) */
|
||||
const unsigned flags = (config.params.table_flags & MDBX_DUPSORT)
|
||||
? MDBX_APPEND | MDBX_APPENDDUP
|
||||
: MDBX_APPEND;
|
||||
const MDBX_put_flags_t flags = (config.params.table_flags & MDBX_DUPSORT)
|
||||
? MDBX_APPEND | MDBX_APPENDDUP
|
||||
: MDBX_APPEND;
|
||||
keyvalue_maker.make_ordered();
|
||||
|
||||
key = keygen::alloc(config.params.keylen_max);
|
||||
|
@@ -6,7 +6,7 @@ void testcase_copy::copy_db(const bool with_compaction) {
|
||||
failure_perror("mdbx_removefile()", err);
|
||||
|
||||
err = mdbx_env_copy(db_guard.get(), copy_pathname.c_str(),
|
||||
with_compaction ? MDBX_CP_COMPACT : 0);
|
||||
with_compaction ? MDBX_CP_COMPACT : MDBX_CP_DEFAULTS);
|
||||
if (unlikely(err != MDBX_SUCCESS))
|
||||
failure_perror(with_compaction ? "mdbx_env_copy(MDBX_CP_COMPACT)"
|
||||
: "mdbx_env_copy(MDBX_CP_ASIS)",
|
||||
|
@@ -52,10 +52,11 @@ bool testcase_hill::run() {
|
||||
keygen::buffer b_key = keygen::alloc(config.params.keylen_max);
|
||||
keygen::buffer b_data = keygen::alloc(config.params.datalen_max);
|
||||
|
||||
const unsigned insert_flags = (config.params.table_flags & MDBX_DUPSORT)
|
||||
? MDBX_NODUPDATA
|
||||
: MDBX_NODUPDATA | MDBX_NOOVERWRITE;
|
||||
const unsigned update_flags =
|
||||
const MDBX_put_flags_t insert_flags =
|
||||
(config.params.table_flags & MDBX_DUPSORT)
|
||||
? MDBX_NODUPDATA
|
||||
: MDBX_NODUPDATA | MDBX_NOOVERWRITE;
|
||||
const MDBX_put_flags_t update_flags =
|
||||
(config.params.table_flags & MDBX_DUPSORT)
|
||||
? MDBX_CURRENT | MDBX_NODUPDATA | MDBX_NOOVERWRITE
|
||||
: MDBX_NODUPDATA;
|
||||
|
@@ -212,18 +212,20 @@ void maker::setup(const config::actor_params_pod &actor, unsigned actor_id,
|
||||
assert(actor.keylen_min <= UINT16_MAX);
|
||||
key_essentials.minlen = (uint16_t)actor.keylen_min;
|
||||
assert(actor.keylen_max <= UINT32_MAX);
|
||||
key_essentials.maxlen = std::min(
|
||||
(uint32_t)actor.keylen_max,
|
||||
(uint32_t)mdbx_limits_keysize_max(actor.pagesize, key_essentials.flags));
|
||||
key_essentials.maxlen =
|
||||
std::min((uint32_t)actor.keylen_max,
|
||||
(uint32_t)mdbx_limits_keysize_max(
|
||||
actor.pagesize, MDBX_db_flags_t(key_essentials.flags)));
|
||||
|
||||
value_essentials.flags =
|
||||
actor.table_flags & uint16_t(MDBX_INTEGERDUP | MDBX_REVERSEDUP);
|
||||
assert(actor.datalen_min <= UINT16_MAX);
|
||||
value_essentials.minlen = (uint16_t)actor.datalen_min;
|
||||
assert(actor.datalen_max <= UINT32_MAX);
|
||||
value_essentials.maxlen = std::min(
|
||||
(uint32_t)actor.datalen_max,
|
||||
(uint32_t)mdbx_limits_valsize_max(actor.pagesize, key_essentials.flags));
|
||||
value_essentials.maxlen =
|
||||
std::min((uint32_t)actor.datalen_max,
|
||||
(uint32_t)mdbx_limits_valsize_max(
|
||||
actor.pagesize, MDBX_db_flags_t(key_essentials.flags)));
|
||||
|
||||
if (!actor.keygen.zero_fill) {
|
||||
key_essentials.flags |= essentials::prng_fill_flag;
|
||||
|
@@ -77,7 +77,8 @@ bool testcase_nested::teardown() {
|
||||
|
||||
void testcase_nested::push_txn() {
|
||||
MDBX_txn *txn;
|
||||
unsigned flags = prng32() & (MDBX_SAFE_NOSYNC | MDBX_NOMETASYNC);
|
||||
MDBX_txn_flags_t flags =
|
||||
MDBX_txn_flags_t(prng32() & (MDBX_TXN_NOSYNC | MDBX_TXN_NOMETASYNC));
|
||||
int err = mdbx_txn_begin(db_guard.get(), txn_guard.get(), flags, &txn);
|
||||
if (unlikely(err != MDBX_SUCCESS))
|
||||
failure_perror("mdbx_txn_begin(nested)", err);
|
||||
@@ -189,9 +190,10 @@ bool testcase_nested::trim_tail(unsigned window_width) {
|
||||
}
|
||||
|
||||
bool testcase_nested::grow_head(unsigned head_count) {
|
||||
const unsigned insert_flags = (config.params.table_flags & MDBX_DUPSORT)
|
||||
? MDBX_NODUPDATA
|
||||
: MDBX_NODUPDATA | MDBX_NOOVERWRITE;
|
||||
const MDBX_put_flags_t insert_flags =
|
||||
(config.params.table_flags & MDBX_DUPSORT)
|
||||
? MDBX_NODUPDATA
|
||||
: MDBX_NODUPDATA | MDBX_NOOVERWRITE;
|
||||
retry:
|
||||
fifo.push_front(std::make_pair(serial, head_count));
|
||||
for (unsigned n = 0; n < head_count; ++n) {
|
||||
|
@@ -239,7 +239,7 @@ static void get_db_stat(const char *db, int64_t *ms_branch_pages,
|
||||
MDBX_stat stat;
|
||||
MDBX_dbi dbi;
|
||||
|
||||
MDBX_CHECK(mdbx_txn_begin(env, NULL, MDBX_RDONLY, &txn));
|
||||
MDBX_CHECK(mdbx_txn_begin(env, NULL, MDBX_TXN_RDONLY, &txn));
|
||||
MDBX_CHECK(mdbx_dbi_open(txn, db, MDBX_CREATE, &dbi));
|
||||
MDBX_CHECK(mdbx_dbi_stat(txn, dbi, &stat, sizeof(stat)));
|
||||
mdbx_txn_abort(txn);
|
||||
|
21
test/test.cc
21
test/test.cc
@@ -145,11 +145,11 @@ void testcase::db_open() {
|
||||
|
||||
jitter_delay(true);
|
||||
|
||||
unsigned mode = (unsigned)config.params.mode_flags;
|
||||
MDBX_env_flags_t mode = config.params.mode_flags;
|
||||
if (config.params.random_writemap && flipcoin())
|
||||
mode ^= MDBX_WRITEMAP;
|
||||
|
||||
actual_db_mode = mode;
|
||||
actual_env_mode = mode;
|
||||
int rc = mdbx_env_open(db_guard.get(), config.params.pathname_db.c_str(),
|
||||
mode, 0640);
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
@@ -166,15 +166,15 @@ void testcase::db_close() {
|
||||
log_trace("<< db_close");
|
||||
}
|
||||
|
||||
void testcase::txn_begin(bool readonly, unsigned flags) {
|
||||
assert((flags & MDBX_RDONLY) == 0);
|
||||
void testcase::txn_begin(bool readonly, MDBX_txn_flags_t flags) {
|
||||
assert((flags & MDBX_TXN_RDONLY) == 0);
|
||||
log_trace(">> txn_begin(%s, 0x%04X)", readonly ? "read-only" : "read-write",
|
||||
flags);
|
||||
assert(!txn_guard);
|
||||
|
||||
MDBX_txn *txn = nullptr;
|
||||
int rc = mdbx_txn_begin(db_guard.get(), nullptr,
|
||||
readonly ? flags | MDBX_RDONLY : flags, &txn);
|
||||
readonly ? flags | MDBX_TXN_RDONLY : flags, &txn);
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
failure_perror("mdbx_txn_begin()", rc);
|
||||
txn_guard.reset(txn);
|
||||
@@ -272,11 +272,11 @@ int testcase::breakable_restart() {
|
||||
rc = breakable_commit();
|
||||
if (cursor_guard)
|
||||
cursor_close();
|
||||
txn_begin(false, 0);
|
||||
txn_begin(false, MDBX_TXN_READWRITE);
|
||||
return rc;
|
||||
}
|
||||
|
||||
void testcase::txn_restart(bool abort, bool readonly, unsigned flags) {
|
||||
void testcase::txn_restart(bool abort, bool readonly, MDBX_txn_flags_t flags) {
|
||||
if (txn_guard)
|
||||
txn_end(abort);
|
||||
if (cursor_guard)
|
||||
@@ -485,7 +485,8 @@ MDBX_dbi testcase::db_table_open(bool create) {
|
||||
|
||||
MDBX_dbi handle = 0;
|
||||
int rc = mdbx_dbi_open(txn_guard.get(), tablename,
|
||||
(create ? MDBX_CREATE : 0) | config.params.table_flags,
|
||||
(create ? MDBX_CREATE : MDBX_DB_DEFAULTS) |
|
||||
config.params.table_flags,
|
||||
&handle);
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
failure_perror("mdbx_dbi_open()", rc);
|
||||
@@ -625,7 +626,7 @@ bool test_execute(const actor_config &config_const) {
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
int testcase::insert(const keygen::buffer &akey, const keygen::buffer &adata,
|
||||
unsigned flags) {
|
||||
MDBX_put_flags_t flags) {
|
||||
int err = mdbx_put(txn_guard.get(), dbi, &akey->value, &adata->value, flags);
|
||||
if (err == MDBX_SUCCESS && config.params.speculum) {
|
||||
const auto S_key = S(akey);
|
||||
@@ -639,7 +640,7 @@ int testcase::insert(const keygen::buffer &akey, const keygen::buffer &adata,
|
||||
|
||||
int testcase::replace(const keygen::buffer &akey,
|
||||
const keygen::buffer &new_data,
|
||||
const keygen::buffer &old_data, unsigned flags) {
|
||||
const keygen::buffer &old_data, MDBX_put_flags_t flags) {
|
||||
if (config.params.speculum) {
|
||||
const auto S_key = S(akey);
|
||||
const auto S_old = S(old_data);
|
||||
|
13
test/test.h
13
test/test.h
@@ -161,27 +161,28 @@ protected:
|
||||
SET speculum{ItemCompare(this)}, speculum_commited{ItemCompare(this)};
|
||||
bool speculum_verify();
|
||||
int insert(const keygen::buffer &akey, const keygen::buffer &adata,
|
||||
unsigned flags);
|
||||
MDBX_put_flags_t flags);
|
||||
int replace(const keygen::buffer &akey, const keygen::buffer &new_value,
|
||||
const keygen::buffer &old_value, unsigned flags);
|
||||
const keygen::buffer &old_value, MDBX_put_flags_t flags);
|
||||
int remove(const keygen::buffer &akey, const keygen::buffer &adata);
|
||||
|
||||
static int oom_callback(MDBX_env *env, mdbx_pid_t pid, mdbx_tid_t tid,
|
||||
uint64_t txn, unsigned gap, size_t space, int retry);
|
||||
|
||||
unsigned actual_db_mode{0};
|
||||
MDBX_env_flags_t actual_env_mode{MDBX_ENV_DEFAULTS};
|
||||
bool is_nested_txn_available() const {
|
||||
return (actual_db_mode & MDBX_WRITEMAP) == 0;
|
||||
return (actual_env_mode & MDBX_WRITEMAP) == 0;
|
||||
}
|
||||
void kick_progress(bool active) const;
|
||||
void db_prepare();
|
||||
void db_open();
|
||||
void db_close();
|
||||
void txn_begin(bool readonly, unsigned flags = 0);
|
||||
void txn_begin(bool readonly, MDBX_txn_flags_t flags = MDBX_TXN_READWRITE);
|
||||
int breakable_commit();
|
||||
void txn_end(bool abort);
|
||||
int breakable_restart();
|
||||
void txn_restart(bool abort, bool readonly, unsigned flags = 0);
|
||||
void txn_restart(bool abort, bool readonly,
|
||||
MDBX_txn_flags_t flags = MDBX_TXN_READWRITE);
|
||||
void cursor_open(MDBX_dbi handle);
|
||||
void cursor_close();
|
||||
void txn_inject_writefault(void);
|
||||
|
@@ -6,7 +6,7 @@ bool testcase_try::run() {
|
||||
|
||||
MDBX_txn *txn = nullptr;
|
||||
MDBX_txn *txn2 = nullptr;
|
||||
int rc = mdbx_txn_begin(db_guard.get(), nullptr, 0, &txn);
|
||||
int rc = mdbx_txn_begin(db_guard.get(), nullptr, MDBX_TXN_READWRITE, &txn);
|
||||
if (unlikely(rc != MDBX_SUCCESS))
|
||||
failure_perror("mdbx_txn_begin(MDBX_TXN_TRY)", rc);
|
||||
else {
|
||||
|
@@ -121,9 +121,10 @@ bool testcase_ttl::run() {
|
||||
keyvalue_maker.setup(config.params, config.actor_id, 0 /* thread_number */);
|
||||
key = keygen::alloc(config.params.keylen_max);
|
||||
data = keygen::alloc(config.params.datalen_max);
|
||||
const unsigned insert_flags = (config.params.table_flags & MDBX_DUPSORT)
|
||||
? MDBX_NODUPDATA
|
||||
: MDBX_NODUPDATA | MDBX_NOOVERWRITE;
|
||||
const MDBX_put_flags_t insert_flags =
|
||||
(config.params.table_flags & MDBX_DUPSORT)
|
||||
? MDBX_NODUPDATA
|
||||
: MDBX_NODUPDATA | MDBX_NOOVERWRITE;
|
||||
|
||||
std::deque<std::pair<uint64_t, unsigned>> fifo;
|
||||
uint64_t serial = 0;
|
||||
|
Reference in New Issue
Block a user