mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-21 07:09:34 -05:00
Partially revert 65d40eb5d2
Allow both increasing and decreasing the environment size. But don't allow decreasing below the currently occupied space.
This commit is contained in:
parent
282be11654
commit
e74d70e88e
2 changed files with 17 additions and 3 deletions
|
|
@ -574,6 +574,9 @@ int mdb_env_get_path(MDB_env *env, const char **path);
|
||||||
* of the database. The value should be chosen as large as possible,
|
* of the database. The value should be chosen as large as possible,
|
||||||
* to accommodate future growth of the database.
|
* to accommodate future growth of the database.
|
||||||
* This function may only be called after #mdb_env_create() and before #mdb_env_open().
|
* This function may only be called after #mdb_env_create() and before #mdb_env_open().
|
||||||
|
* The size may be changed by closing and reopening the environment.
|
||||||
|
* Any attempt to set a size smaller than the space already consumed
|
||||||
|
* by the environment will be silently changed to the current size of the used space.
|
||||||
* @param[in] env An environment handle returned by #mdb_env_create()
|
* @param[in] env An environment handle returned by #mdb_env_create()
|
||||||
* @param[in] size The size in bytes
|
* @param[in] size The size in bytes
|
||||||
* @return A non-zero error value on failure and 0 on success. Some possible
|
* @return A non-zero error value on failure and 0 on success. Some possible
|
||||||
|
|
|
||||||
|
|
@ -2722,11 +2722,22 @@ mdb_env_open2(MDB_env *env)
|
||||||
return i;
|
return i;
|
||||||
DPUTS("new mdbenv");
|
DPUTS("new mdbenv");
|
||||||
newenv = 1;
|
newenv = 1;
|
||||||
meta.mm_mapsize = env->me_mapsize > DEFAULT_MAPSIZE ? env->me_mapsize : DEFAULT_MAPSIZE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (env->me_mapsize < meta.mm_mapsize)
|
/* Was a mapsize configured? */
|
||||||
env->me_mapsize = meta.mm_mapsize;
|
if (!env->me_mapsize) {
|
||||||
|
/* If this is a new environment, take the default,
|
||||||
|
* else use the size recorded in the existing env.
|
||||||
|
*/
|
||||||
|
env->me_mapsize = newenv ? DEFAULT_MAPSIZE : meta.mm_mapsize;
|
||||||
|
} else if (env->me_mapsize < meta.mm_mapsize) {
|
||||||
|
/* If the configured size is smaller, make sure it's
|
||||||
|
* still big enough. Silently round up to minimum if not.
|
||||||
|
*/
|
||||||
|
size_t minsize = (meta.mm_last_pg + 1) * meta.mm_psize;
|
||||||
|
if (env->me_mapsize < minsize)
|
||||||
|
env->me_mapsize = minsize;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue