mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-04 18:04:13 +08:00
mdbx-test: refine key/value min/max handling.
Change-Id: If37e5fc2fe30ce309cb4ff540fe93dd9f87ec87f
This commit is contained in:
parent
102f57dd15
commit
5051603c56
@ -542,3 +542,27 @@ bool actor_config::deserialize(const char *str, actor_config &config) {
|
|||||||
TRACE("<< actor_config::deserialize: OK\n");
|
TRACE("<< actor_config::deserialize: OK\n");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned actor_params::mdbx_keylen_min() const {
|
||||||
|
return (table_flags & MDBX_INTEGERKEY) ? 4 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned actor_params::mdbx_keylen_max() const {
|
||||||
|
return (table_flags & MDBX_INTEGERKEY)
|
||||||
|
? 8
|
||||||
|
: std::min((unsigned)mdbx_limits_keysize_max(pagesize),
|
||||||
|
(unsigned)UINT16_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned actor_params::mdbx_datalen_min() const {
|
||||||
|
return (table_flags & MDBX_INTEGERDUP) ? 4 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned actor_params::mdbx_datalen_max() const {
|
||||||
|
return (table_flags & MDBX_INTEGERDUP)
|
||||||
|
? 8
|
||||||
|
: std::min((table_flags & MDBX_DUPSORT)
|
||||||
|
? (unsigned)mdbx_limits_keysize_max(pagesize)
|
||||||
|
: (unsigned)MDBX_MAXDATASIZE,
|
||||||
|
(unsigned)UINT16_MAX);
|
||||||
|
}
|
||||||
|
@ -264,6 +264,11 @@ struct actor_params : public config::actor_params_pod {
|
|||||||
std::string pathname_log;
|
std::string pathname_log;
|
||||||
std::string pathname_db;
|
std::string pathname_db;
|
||||||
void set_defaults(const std::string &tmpdir);
|
void set_defaults(const std::string &tmpdir);
|
||||||
|
|
||||||
|
unsigned mdbx_keylen_min() const;
|
||||||
|
unsigned mdbx_keylen_max() const;
|
||||||
|
unsigned mdbx_datalen_min() const;
|
||||||
|
unsigned mdbx_datalen_max() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct actor_config : public config::actor_config_pod {
|
struct actor_config : public config::actor_config_pod {
|
||||||
|
51
test/main.cc
51
test/main.cc
@ -56,10 +56,10 @@ void actor_params::set_defaults(const std::string &tmpdir) {
|
|||||||
nrepeat = 1;
|
nrepeat = 1;
|
||||||
nthreads = 1;
|
nthreads = 1;
|
||||||
|
|
||||||
keylen_min = 0;
|
keylen_min = mdbx_keylen_min();
|
||||||
keylen_max = 42;
|
keylen_max = mdbx_keylen_max();
|
||||||
datalen_min = 0;
|
datalen_min = mdbx_datalen_min();
|
||||||
datalen_max = 256;
|
datalen_max = std::min(mdbx_datalen_max(), 256u * 1024 + 42);
|
||||||
|
|
||||||
batch_read = 4;
|
batch_read = 4;
|
||||||
batch_write = 4;
|
batch_write = 4;
|
||||||
@ -159,8 +159,19 @@ int main(int argc, char *const argv[]) {
|
|||||||
|
|
||||||
if (config::parse_option(argc, argv, narg, "pagesize", params.pagesize,
|
if (config::parse_option(argc, argv, narg, "pagesize", params.pagesize,
|
||||||
mdbx_limits_pgsize_min(),
|
mdbx_limits_pgsize_min(),
|
||||||
mdbx_limits_pgsize_max()))
|
mdbx_limits_pgsize_max())) {
|
||||||
|
const unsigned keylen_max = params.mdbx_keylen_max();
|
||||||
|
if (params.keylen_min > keylen_max)
|
||||||
|
params.keylen_min = keylen_max;
|
||||||
|
if (params.keylen_max > keylen_max)
|
||||||
|
params.keylen_max = keylen_max;
|
||||||
|
const unsigned datalen_max = params.mdbx_datalen_max();
|
||||||
|
if (params.datalen_min > datalen_max)
|
||||||
|
params.datalen_min = datalen_max;
|
||||||
|
if (params.datalen_max > datalen_max)
|
||||||
|
params.datalen_max = datalen_max;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (config::parse_option(argc, argv, narg, "size-lower", params.size_lower,
|
if (config::parse_option(argc, argv, narg, "size-lower", params.size_lower,
|
||||||
mdbx_limits_dbsize_min(params.pagesize),
|
mdbx_limits_dbsize_min(params.pagesize),
|
||||||
mdbx_limits_dbsize_max(params.pagesize)))
|
mdbx_limits_dbsize_max(params.pagesize)))
|
||||||
@ -220,30 +231,36 @@ int main(int argc, char *const argv[]) {
|
|||||||
config::duration, 1))
|
config::duration, 1))
|
||||||
continue;
|
continue;
|
||||||
if (config::parse_option(argc, argv, narg, "keylen.min", params.keylen_min,
|
if (config::parse_option(argc, argv, narg, "keylen.min", params.keylen_min,
|
||||||
config::no_scale, 0, UINT8_MAX)) {
|
config::no_scale, params.mdbx_keylen_min(),
|
||||||
if (params.keylen_max < params.keylen_min)
|
params.mdbx_keylen_max())) {
|
||||||
|
if ((params.table_flags & MDBX_INTEGERKEY) ||
|
||||||
|
params.keylen_max < params.keylen_min)
|
||||||
params.keylen_max = params.keylen_min;
|
params.keylen_max = params.keylen_min;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (config::parse_option(argc, argv, narg, "keylen.max", params.keylen_max,
|
if (config::parse_option(argc, argv, narg, "keylen.max", params.keylen_max,
|
||||||
config::no_scale, 0,
|
config::no_scale, params.mdbx_keylen_min(),
|
||||||
std::min((unsigned)mdbx_limits_keysize_max(0),
|
params.mdbx_keylen_max())) {
|
||||||
(unsigned)UINT16_MAX))) {
|
if ((params.table_flags & MDBX_INTEGERKEY) ||
|
||||||
if (params.keylen_min > params.keylen_max)
|
params.keylen_min > params.keylen_max)
|
||||||
params.keylen_min = params.keylen_max;
|
params.keylen_min = params.keylen_max;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (config::parse_option(argc, argv, narg, "datalen.min",
|
if (config::parse_option(argc, argv, narg, "datalen.min",
|
||||||
params.datalen_min, config::no_scale, 0,
|
params.datalen_min, config::no_scale,
|
||||||
UINT8_MAX)) {
|
params.mdbx_datalen_min(),
|
||||||
if (params.datalen_max < params.datalen_min)
|
params.mdbx_datalen_max())) {
|
||||||
|
if ((params.table_flags & MDBX_DUPFIXED) ||
|
||||||
|
params.datalen_max < params.datalen_min)
|
||||||
params.datalen_max = params.datalen_min;
|
params.datalen_max = params.datalen_min;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (config::parse_option(argc, argv, narg, "datalen.max",
|
if (config::parse_option(argc, argv, narg, "datalen.max",
|
||||||
params.datalen_max, config::no_scale, 0,
|
params.datalen_max, config::no_scale,
|
||||||
std::min((int)UINT16_MAX, MDBX_MAXDATASIZE))) {
|
params.mdbx_datalen_min(),
|
||||||
if (params.datalen_min > params.datalen_max)
|
params.mdbx_datalen_max())) {
|
||||||
|
if ((params.table_flags & MDBX_DUPFIXED) ||
|
||||||
|
params.datalen_min > params.datalen_max)
|
||||||
params.datalen_min = params.datalen_max;
|
params.datalen_min = params.datalen_max;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user