Bug #78808 [PATCH]: [LMDB] MDB_MAP_FULL: Environment mapsize limit reached
| From: | cmb@php.net | Date: | Thu, 14 Nov 2019 10:33:46 +0000 |
| Subject: | Bug #78808 [PATCH]: [LMDB] MDB_MAP_FULL: Environment mapsize limit reached | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-223709@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78808&edit=1
ID: 78808
Patch added by: cmb@php.net
Reported by: progr-d at yandex dot ru
Summary: [LMDB] MDB_MAP_FULL: Environment mapsize limit
reached
Status: Open
Type: Bug
Package: DBM/DBA related
Operating System: macOS 10.13.6
PHP Version: 7.3.11
Block user comment: N
Private report: N
New Comment:
The following pull request has been associated:
Patch Name: Fix #78808: [LMDB] MDB_MAP_FULL: Environment mapsize limit reached
On GitHub: https://github.com/php/php-src/pull/4910
Patch: https://github.com/php/php-src/pull/4910.patch
Previous Comments:
------------------------------------------------------------------------
[2019-11-13 19:58:32] nikic@php.net
Deleted comments by "henry dot paradiz at gmail dot com". A bunch of spam has recently
been submitted under this email.
------------------------------------------------------------------------
[2019-11-13 19:07:20] progr-d at yandex dot ru
I havenât written anywhere that I need to do this right now and forget about other problems. I
just talked about what I met myself and shared solution methods.
If you have such a toxic community here that because of every bug you will write such offensive
words - I probably will not send anything else.
------------------------------------------------------------------------
[2019-11-13 17:38:42] progr-d at yandex dot ru
I can send a patch that will add mdb_env_set_mapsize() at the specified location, but with a fixed
size (e.g. 1GB). But as far as I understand it is much more correct to give users the opportunity to
change this behavior themselves (through the fourth argument). And for this, you already need to
write tests (in which I am not strong for PHP tests).
For macOS homebrew users I made hotfix (hacker-way style), which increases the size of the database
in the library itself (by the way, there is an error - it really is 1MB in size, and the
documentation says 10MB): https://gist.github.com/saippuakauppias/95b6f7b139b3d117b7dac4aeead9f5b4
------------------------------------------------------------------------
[2019-11-13 13:34:50] cmb@php.net
> contains the fourth argument, but nowhere is there a description
> of how to use it
Arguments following the $handler are converted to string and are
passed to the individual DBA drivers, and are driver dependent.
This is indeed not yet documented; let alone which drivers support
which parameters.
> It turns out that this needs to be done here:
Yes. info->argc and info->argv provide the driver specific
arguments which have been passed to dba_open().
------------------------------------------------------------------------
[2019-11-13 11:46:03] progr-d at yandex dot ru
Yes, I found a description about this:
> The size should be a multiple of the OS page size. The default is 10485760 bytes. The size of
> the memory map is also the maximum size of the database. The value should be chosen as large as
> possible, to accommodate future growth of the database. This function should be called after
> mdb_env_create() and before mdb_env_open(). It may be called at later times if no transactions are
> active in this process. Note that the library does not check for this condition, the caller must
> ensure it explicitly.
(from http://www.lmdb.tech/doc/group__mdb.html#gaa2506ec8dab3d969b0e609cd82e619e5
)
It turns out that this needs to be done here: https://github.com/php/php-src/blob/PHP-7.2.0/ext/dba/dba_lmdb.c#L61
---------------
Strange thing: 10485760 bytes is 10MB, but my Test script create file only with 1MB size (you can
check it).
---------------
> there likely should be some dba_open() argument
dba_open ( string $path , string $mode [, string $handler [, mixed $... ]] )
contains the fourth argument, but nowhere is there a description of how to use it: https://www.php.net/manual/en/function.dba-open.php
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=78808
--
Edit this bug report at https://bugs.php.net/bug.php?id=78808&edit=1