mirror of
https://github.com/isar/libmdbx.git
synced 2025-03-04 17:18:13 +08:00
mdbx: рефакторинг обработки установки опций в значения по-умолчанию.
This commit is contained in:
parent
54b15d7e41
commit
b959e217b1
63
src/core.c
63
src/core.c
@ -24359,14 +24359,14 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||
bool should_unlock = false;
|
||||
switch (option) {
|
||||
case MDBX_opt_sync_bytes:
|
||||
if (value == UINT64_MAX)
|
||||
value = SIZE_MAX - 65536;
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = MAX_WRITE;
|
||||
if (unlikely(env->me_flags & MDBX_RDONLY))
|
||||
return MDBX_EACCESS;
|
||||
if (unlikely(!(env->me_flags & MDBX_ENV_ACTIVE)))
|
||||
return MDBX_EPERM;
|
||||
if (unlikely(value > SIZE_MAX - 65536))
|
||||
return MDBX_TOO_LARGE;
|
||||
return MDBX_EINVAL;
|
||||
value = bytes2pgno(env, (size_t)value + env->me_psize - 1);
|
||||
if ((uint32_t)value != atomic_load32(&env->me_lck->mti_autosync_threshold,
|
||||
mo_AcquireRelease) &&
|
||||
@ -24382,14 +24382,14 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||
break;
|
||||
|
||||
case MDBX_opt_sync_period:
|
||||
if (value == UINT64_MAX)
|
||||
value = UINT32_MAX;
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = 2780315 /* 42.42424 секунды */;
|
||||
if (unlikely(env->me_flags & MDBX_RDONLY))
|
||||
return MDBX_EACCESS;
|
||||
if (unlikely(!(env->me_flags & MDBX_ENV_ACTIVE)))
|
||||
return MDBX_EPERM;
|
||||
if (unlikely(value > UINT32_MAX))
|
||||
return MDBX_TOO_LARGE;
|
||||
return MDBX_EINVAL;
|
||||
value = osal_16dot16_to_monotime((uint32_t)value);
|
||||
if (value != atomic_load64(&env->me_lck->mti_autosync_period,
|
||||
mo_AcquireRelease) &&
|
||||
@ -24404,8 +24404,8 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||
break;
|
||||
|
||||
case MDBX_opt_max_db:
|
||||
if (value == UINT64_MAX)
|
||||
value = MDBX_MAX_DBI;
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = 42;
|
||||
if (unlikely(value > MDBX_MAX_DBI))
|
||||
return MDBX_EINVAL;
|
||||
if (unlikely(env->me_map))
|
||||
@ -24414,7 +24414,7 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||
break;
|
||||
|
||||
case MDBX_opt_max_readers:
|
||||
if (value == UINT64_MAX)
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = MDBX_READERS_LIMIT;
|
||||
if (unlikely(value < 1 || value > MDBX_READERS_LIMIT))
|
||||
return MDBX_EINVAL;
|
||||
@ -24424,7 +24424,7 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||
break;
|
||||
|
||||
case MDBX_opt_dp_reserve_limit:
|
||||
if (value == UINT64_MAX)
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = INT_MAX;
|
||||
if (unlikely(value > INT_MAX))
|
||||
return MDBX_EINVAL;
|
||||
@ -24450,7 +24450,7 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||
break;
|
||||
|
||||
case MDBX_opt_rp_augment_limit:
|
||||
if (value == UINT64_MAX) {
|
||||
if (value == /* default */ UINT64_MAX) {
|
||||
env->me_options.flags.non_auto.rp_augment_limit = 0;
|
||||
env->me_options.rp_augment_limit = default_rp_augment_limit(env);
|
||||
} else if (unlikely(value > MDBX_PGL_LIMIT))
|
||||
@ -24463,7 +24463,7 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||
|
||||
case MDBX_opt_txn_dp_limit:
|
||||
case MDBX_opt_txn_dp_initial:
|
||||
if (value == UINT64_MAX)
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = MDBX_PGL_LIMIT;
|
||||
if (unlikely(value > MDBX_PGL_LIMIT || value < CURSOR_STACK * 4))
|
||||
return MDBX_EINVAL;
|
||||
@ -24498,34 +24498,38 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||
break;
|
||||
|
||||
case MDBX_opt_spill_max_denominator:
|
||||
if (value == UINT64_MAX)
|
||||
value = 255;
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = 8;
|
||||
if (unlikely(value > 255))
|
||||
return MDBX_EINVAL;
|
||||
env->me_options.spill_max_denominator = (uint8_t)value;
|
||||
break;
|
||||
case MDBX_opt_spill_min_denominator:
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = 8;
|
||||
if (unlikely(value > 255))
|
||||
return MDBX_EINVAL;
|
||||
env->me_options.spill_min_denominator = (uint8_t)value;
|
||||
break;
|
||||
case MDBX_opt_spill_parent4child_denominator:
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = 0;
|
||||
if (unlikely(value > 255))
|
||||
return MDBX_EINVAL;
|
||||
env->me_options.spill_parent4child_denominator = (uint8_t)value;
|
||||
break;
|
||||
|
||||
case MDBX_opt_loose_limit:
|
||||
if (value == UINT64_MAX)
|
||||
value = 255;
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = 64;
|
||||
if (unlikely(value > 255))
|
||||
return MDBX_EINVAL;
|
||||
env->me_options.dp_loose_limit = (uint8_t)value;
|
||||
break;
|
||||
|
||||
case MDBX_opt_merge_threshold_16dot16_percent:
|
||||
if (value == UINT64_MAX)
|
||||
value = 32768;
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = 65536 / 4 /* 25% */;
|
||||
if (unlikely(value < 8192 || value > 32768))
|
||||
return MDBX_EINVAL;
|
||||
env->me_options.merge_threshold_16dot16_percent = (unsigned)value;
|
||||
@ -24533,23 +24537,22 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
||||
break;
|
||||
|
||||
case MDBX_opt_writethrough_threshold:
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
/* позволяем "установить" значение по-умолчанию и совпадающее
|
||||
* с поведением соответствующим текущей установке MDBX_NOMETASYNC */
|
||||
if (value == /* default */ UINT64_MAX &&
|
||||
value != ((env->me_flags & MDBX_NOMETASYNC) ? 0 : UINT_MAX))
|
||||
err = MDBX_EINVAL;
|
||||
#else
|
||||
if (value == /* default */ UINT64_MAX)
|
||||
value = MDBX_WRITETHROUGH_THRESHOLD_DEFAULT;
|
||||
if (value != (unsigned)value)
|
||||
err = MDBX_EINVAL;
|
||||
else
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
/* позволяем "установить" значение по-умолчанию и совпадающее
|
||||
* с поведением соответствующим текущей установке MDBX_NOMETASYNC */
|
||||
if ((unsigned)-1 != (unsigned)value &&
|
||||
value != ((env->me_flags & MDBX_NOMETASYNC) ? 0 : INT_MAX))
|
||||
err = MDBX_EINVAL;
|
||||
#else
|
||||
env->me_options.writethrough_threshold =
|
||||
((unsigned)-1 == (unsigned)value)
|
||||
? MDBX_WRITETHROUGH_THRESHOLD_DEFAULT
|
||||
: (unsigned)value;
|
||||
env->me_options.writethrough_threshold = (unsigned)value;
|
||||
#endif
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
return MDBX_EINVAL;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user