[krbdev.mit.edu #6814] Improve kdb5_util load locking and recovery
Greg Hudson via RT
rt-comment at krbdev.mit.edu
Mon Nov 1 13:45:01 EDT 2010
If a kdb5_util load (without -update) operation aborts, it leaves behind
a partially constructed temporary DB. Future load operations will fail
with "kdb5_util load: File exists.", after krb5_db2_create() gets a
successful result from check_openable().
We want kdb5_util load to discard remnant temporary DBs from failed load
operations, but we want to make sure that two load operations don't
happen concurrently. The current locking is inadequate for this; the
temporary DB is locked after it is created and unlocked before it is
promoted.
To fix this, we need atomic DAL operations for create-and-lock-temp-DB
and for promote-and-unlock-temp-DB. Since temporary DB operations are
the sole property of kdb5_util load, we do not need new interfaces; we
can modify the contracts of the existing interfaces (krb5_db_create with
the "temporary" db_arg, and krb5_db_promote).
Only the DB2 back end supports non-update kdb5_util loads, so the scope
of code modifications should be limited to kadmin/db_util/load.c,
plugins/kdb/db2/kdb_db2.c, and include/kdb.h (comments only).
More information about the krb5-bugs
mailing list