From 7524acda0a8778572262429f27b359d7ee91fc90 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 7 Jan 2020 22:56:32 +0300 Subject: libmdbx: update to 0.5.0 --- libs/libmdbx/src/test/jitter.cc | 42 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) (limited to 'libs/libmdbx/src/test/jitter.cc') 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 * 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 */ -- cgit v1.2.3