https://bugs.openldap.org/show_bug.cgi?id=9806
Issue ID: 9806 Summary: MDB_PAGE_FULL on mdb_put Product: LMDB Version: unspecified Hardware: Other OS: Mac OS Status: UNCONFIRMED Keywords: needs_review Severity: normal Priority: --- Component: liblmdb Assignee: bugs@openldap.org Reporter: casey@rodarmor.com Target Milestone: ---
I'm using the using latest lmdb from OpenLDAP, commit e8813b12b6188d5ba5f174ff8726c438c8ca4bfd.
I'm getting an MDB_PAGE_FULL error after calling `mdb_put`. If I delete the database and perform the same sequence of inserts, I get the same error in on the same mdb_put.
If there's any information I can provide to help debug this, let me know.
https://bugs.openldap.org/show_bug.cgi?id=9806
--- Comment #1 from Howard Chu hyc@openldap.org --- (In reply to casey from comment #0)
I'm using the using latest lmdb from OpenLDAP, commit e8813b12b6188d5ba5f174ff8726c438c8ca4bfd.
I'm getting an MDB_PAGE_FULL error after calling `mdb_put`. If I delete the database and perform the same sequence of inserts, I get the same error in on the same mdb_put.
If there's any information I can provide to help debug this, let me know.
Can happen when storing records of widely varying size. You can try to workaround this by patching mdb.c, function mdb_page_split(). Search for the comment "/* Find split point */" and above it, "if (nkeys < 32". Change the 32 to a larger number, and try rebuilding the DB.
https://bugs.openldap.org/show_bug.cgi?id=9806
--- Comment #2 from casey@rodarmor.com --- I set `nkeys` to 48 and rebuilt the database, and that seems to have worked. My records vary in size quite a bit.
https://bugs.openldap.org/show_bug.cgi?id=9806
--- Comment #3 from Howard Chu hyc@openldap.org --- (In reply to casey from comment #2)
I set `nkeys` to 48 and rebuilt the database, and that seems to have worked. My records vary in size quite a bit.
OK. The value of 32 was chosen as close to optimal on x86/ARM systems using 4KB pages. MacOS on ARM uses 16KB pages so this value would certainly be too small when your records are of non-uniform size. I guess we can no longer leave it as a compile-time constant.
https://bugs.openldap.org/show_bug.cgi?id=9806
Howard Chu hyc@openldap.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Hardware|Other |aarch64 Status|UNCONFIRMED |CONFIRMED Ever confirmed|0 |1
https://bugs.openldap.org/show_bug.cgi?id=9806
Quanah Gibson-Mount quanah@openldap.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |1.0.0 Keywords|needs_review |
https://bugs.openldap.org/show_bug.cgi?id=9806
Howard Chu hyc@openldap.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Status|CONFIRMED |RESOLVED
--- Comment #4 from Howard Chu hyc@openldap.org --- Fixed in mdb.master, mdb.master3, mdb.RE/0.9
https://bugs.openldap.org/show_bug.cgi?id=9806
Quanah Gibson-Mount quanah@openldap.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|1.0.0 |0.9.30