Hi OpenLDAP-Technical,

First post, thanks in advance for any assistance.

I am trying to manage database size for an application in which a fixed DB size 
is necessary (user-specified and these users are ornery). My preferred strategy 
is:

- write to the DB until it's (nearly?) full
- at that point, prune entries matching a certain criteria (either deleting 
them or backing them up to an auxiliary DB of some sort).

I have all of this working, in fact, except that once I hit MDB_MAP_FULL on 
mdb_put(), I can no longer do anything with the DB, including deleting records. 
mdb_cursor_del() also returns MDB_MAP_FULL at that point.

If I had some idea of when the DB was nearly full, I could do my pruning 
prophylactically, I guess. Resizing the database upward isn't really a 
solution, given the constraints of this particular application.

Some other observations:
- on OSX (BSD?), if I do not set MDB_WRITEMAP in mdb_env_open(), MDB_MAP_FULL 
is _never_ returned, even when the DB is full. Setting MDB_WRITEMAP disables DB 
sparseness, though (so my 64MB-mapsize db with one record is 64MB on disk). Bug 
or feature?

- on Windows, the database size is always the same as the mapsize. Possibly 
there's simply no support for sparse MM files on Windows, but I thought it's 
worth checking.

OK, that's enough for the first post, thanks once again for any insight.

Jeremy Bernstein

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to