Keith and Wietse,
the latest Berkeley DB 4.1.24 causes big trouble for some applications
like Postfix, Sendmail, etc. We encountered this recently when we
upgraded the OpenPKG (http://www.openpkg.org/) package for Berkeley
DB from 4.0.14 to 4.1.24. First, the API changes to DB->open() are
harmless. A little bit of patching (adding a zero for the extra
argument) made the applications building against DB 4.1.24 just fine.
But there is a more subtle second problem:
As it looks, DB 4.1.24 does no longer accept empty database files,
i.e., if an application touches the xx.db file before opening it, DB
complains. In older versions this just worked fine. Unfortunately many
applications out there (including Postfix and Sendmail) create the
zero-size xx.db file theirself. Postfix for instance in order to do
own exclusive locking on this file, etc. And we've not found any way
to force DB 4.1.24 to not complain in this situation. Have we missed
something?
Sure, one can argue that DB 4.1.24 is free to complain here and that
applications should not do own locking or other fiddling with the .db
files. OTOH applications do it for various reasons: locking, forcing
permissions or ownerships, etc. And fact is that the latest DB 4.1.24
breaks all those applications. So my recommendation to you two is
two-fold:
1. Keith, please make this "complain on empty pre-created .db file"
_optional_. You can still make the default to complain, but please
provide at least an option to force DB to overwrite zero-size .db
files. This way the transition/patching of existing applications get
easier and you still support the fiddling with .db files if really
wished by the application.
2. Wietse, please try to cleanup the src/global/mkmap* and
src/util/dict_db.c code. Especially the locking logic is spread
over the whole code and it is currently not easy to get Postfix to
work-around the problem. I even would try to allow Berkeley DB to the
locking itself (at least in latest versions). My hack today to get
Postfix 1.1.11 "just working" with DB 4.1.24 without having to axe
out many things in Postfix was to just lock the source ("xx") instead
of the target ("xx.db") files. Else "postmap" would never be able to
create .db files at all. But, yes, I do not post you a patch, because
this is just a kludge to get it "just working". The real solution for
Postfix is to either explicitly support dedicated lockfiles (e.g.
"xx.lock") or at least perform the zero-size pre-generated of .db
files not or DB 4.1 and higher. Or wait for Keith introduce a new
flag for DB->open to force DB to accept the empty .db files ;)
Hopefully you are open minded to these suggestions. At least please
recognize that currently DB 4.1.24 fully breaks many popular
applications and that some them (like Postfix) are not easily fixable
(because for various reasons require or wish some direct .db fiddling in
their internal logic).
Thanks for listening and keep up your good work!
Yours,
Ralf S. Engelschall
[EMAIL PROTECTED]
www.engelschall.com
______________________________________________________________________
The OpenPKG Project www.openpkg.org
Developer Communication List [EMAIL PROTECTED]