h.b.furuseth@usit.uio.no wrote:
Full_Name: Hallvard B Furuseth Version: LMDB 0.9.17 OS: Linux x86_64 URL: Submission from: (NULL) (129.240.203.186) Submitted by: hallvard
$ mtest_rand -c0 -i10000 -p0x100 -r562822527.3 -w // Options for replay: [-v] -c0 -i10000 -p0x100 -r562822527.3 -w ../mdb.c:5276: Assertion 'NUMKEYS(mp) > 1' failed in mdb_page_search_root() Aborte%2(core dumped)
Broken by 4b01cb3 "ITS#8221 don't merge branch pages needlessly" according to git bisect.
The assert occurs during txn_commit while updating the freeDB. During rebalance, a branch page in the freeDB has been reduced to only 1 key. This page is operated on by another (recursive) rebalance. During page_touch, a new page is needed, which calls page_alloc, which needs to acquire a free page from the freeDB. The resulting search trips this assert because it walks down thru the branch page that is currently being rebalanced.
We could simply remove the assert; if we let things progress then eventually the rebalance will succeed and the branch page will be correct. We could also conditionalize the assert so that it ignores the freeDB. Or we can just ignore the problem entirely, because it only occurs on tiny 256 byte pages.