On Mon, Sep 25, 2023 at 05:37:00PM +0200, Branko Čibej wrote:
> IIRC, Berkeley DB multi-process concurrency is managed through an on-disk
> "register" file external to the actual key/value store. The key/value store
> format is not affected by the presence of this file. The DB_REGISTER
> mechanism was introduced in BDB 4.4 (now long defunct) and can be used for
> both concurrency control and automatic database recovery. The client-side
> code for this can be lifted from Subversion.
> 
> (I was involved in designing this mechanism for BDB and implementing its use
> in Subversion, but that was ages ago -- back in 2005. There may be better
> ways do do this in newer versions of Berkeley DB).
> 
> TL;DR: all upstream supported versions of BDB should have this mechanism
> available and APR can detect if it's being used without changing the API,
> and even "upgrade" existing databases with the register file on the fly
> without affecting the actual database.

Thanks a lot for the response Branko, this is helpful.

I spent a lot more time playing with this and I can get apr_dbm to use a 
DB_ENV in the way you suggest with locking. However, the path handling 
becomes very complicated/impossible - with a DB_ENV the database is 
assumed to be inside the "db_home" directory but we want to load/save a 
database by absolute path name.

Using BDB in this way also appears incompatible with apr_dbm since the 
_usednames API assumes that at most two state files are used and with a 
full BDB environment the state is a whole directory. (mod_dav relies on 
this feature working correctly)

So I don't want to appear like I'm shrugging this off but *at best* it 
might be possible to fix BDB for some versions (possibly, in theory, 
with compat concerns), and that leaves older BDB releases plus NDBM 
still broken.

As an httpd developer I really don't care about database internals, I 
just want this to work. I also know that Berkeley DB is deprecated and 
will be removed from my Linux distribution of choice, so I don't want to 
invest too much time in it. :(

Regards, Joe

Reply via email to