[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#7505) liblmdb can fail with MDB_PAGE_FULL on a delete



Full_Name: Howard Chu
Version: RE24/master
OS: 
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (78.155.233.73)
Submitted by: hyc


This is the last remaining FIXME in liblmdb/mdb.c...

mdb_rebalance() is always called after a delete operation. If the tree needs
balancing and it needs to move a node from one page to its sibling, the parent
page's separator keys will need updating. If the new separator key is larger
than the old one, it may not fit into the parent page, and mdb_update_key() will
return MDB_PAGE_FULL.

Instead of giving up, mdb_update_key() should invoke mdb_page_split() to make
room for the new key.