summaryrefslogtreecommitdiff
path: root/libs/libmdbx/src/test/jitter.cc
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2020-01-07 22:56:32 +0300
committerGeorge Hazan <ghazan@miranda.im>2020-01-07 22:56:39 +0300
commit7524acda0a8778572262429f27b359d7ee91fc90 (patch)
tree6443228a439b83c5bc6d15923a9ccd91fa4718e3 /libs/libmdbx/src/test/jitter.cc
parent62c842df372abe0349f025ac4cbbc8426526ac8b (diff)
libmdbx: update to 0.5.0
Diffstat (limited to 'libs/libmdbx/src/test/jitter.cc')
-rw-r--r--libs/libmdbx/src/test/jitter.cc42
1 files changed, 37 insertions, 5 deletions
diff --git a/libs/libmdbx/src/test/jitter.cc b/libs/libmdbx/src/test/jitter.cc
index 82d1d764ff..c7b8bccb51 100644
--- a/libs/libmdbx/src/test/jitter.cc
+++ b/libs/libmdbx/src/test/jitter.cc
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2017-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
@@ -15,10 +15,26 @@
#include "test.h"
bool testcase_jitter::run() {
+ int err;
+ size_t upper_limit = config.params.size_upper;
+ if (upper_limit < 1)
+ upper_limit = config.params.size_now * 2;
+
while (should_continue()) {
jitter_delay();
db_open();
+ if (upper_limit < 1) {
+ MDBX_envinfo info;
+ err = mdbx_env_info_ex(db_guard.get(), txn_guard.get(), &info,
+ sizeof(info));
+ if (err)
+ failure_perror("mdbx_env_info_ex()", err);
+ upper_limit = (info.mi_geo.upper < INTPTR_MAX)
+ ? (intptr_t)info.mi_geo.upper
+ : INTPTR_MAX;
+ }
+
if (flipcoin()) {
jitter_delay();
txn_begin(true);
@@ -27,19 +43,29 @@ bool testcase_jitter::run() {
txn_end(flipcoin());
}
+ const bool coin4size = flipcoin();
jitter_delay();
txn_begin(mode_readonly());
jitter_delay();
if (!mode_readonly()) {
fetch_canary();
update_canary(1);
- /* TODO:
- * - db_setsize()
- * ...
- */
+ err = mdbx_env_set_geometry(
+ db_guard.get(), -1, -1,
+ coin4size ? upper_limit * 2 / 3 : upper_limit * 3 / 2, -1, -1, -1);
+ if (err != MDBX_SUCCESS && err != MDBX_RESULT_TRUE &&
+ err != MDBX_MAP_FULL && err != MDBX_TOO_LARGE)
+ failure_perror("mdbx_env_set_geometry-1", err);
}
txn_end(flipcoin());
+ err = mdbx_env_set_geometry(
+ db_guard.get(), -1, -1,
+ !coin4size ? upper_limit * 2 / 3 : upper_limit * 3 / 2, -1, -1, -1);
+ if (err != MDBX_SUCCESS && err != MDBX_RESULT_TRUE &&
+ err != MDBX_MAP_FULL && err != MDBX_TOO_LARGE)
+ failure_perror("mdbx_env_set_geometry-2", err);
+
if (flipcoin()) {
jitter_delay();
txn_begin(true);
@@ -48,6 +74,12 @@ bool testcase_jitter::run() {
}
jitter_delay();
+ err =
+ mdbx_env_set_geometry(db_guard.get(), -1, -1, upper_limit, -1, -1, -1);
+ if (err != MDBX_SUCCESS && err != MDBX_RESULT_TRUE &&
+ err != MDBX_MAP_FULL && err != MDBX_TOO_LARGE)
+ failure_perror("mdbx_env_set_geometry-3", err);
+
db_close();
/* just 'align' nops with other tests with batching */