Rewrite vldb_check -fix
authorRod Widdowson <rdw@steadingsoftware.com>
Thu, 20 May 2010 17:27:11 +0000 (18:27 +0100)
committerRuss Allbery <rra@stanford.edu>
Sun, 30 May 2010 20:11:12 +0000 (13:11 -0700)
commit67f1a94234e122a7dfef9808171285e456af5da8
tree70bb33e557229cf8712cedb6e6a3a7011e2b79a0
parent16c4b6e6c06ef2e7cfe77bca0811af9001665805
Rewrite vldb_check -fix

vldb_check -fix was very 'topical' in nature.  It showed signs that
each sucessive corruption had been treated as a one off needing a
specific fix.  This made the code difficult to understand and
incomplete: for instance a single volume on the wrong hash only was
not corrected.  Further there was some rather unfortunately code which
would under certain circumstances stamp the last volume at various
places across the file.

This checkin removes all the old code and replaces it with a
'systematic' fix.  During the last scan across all the volumes, all
four of the hash chains are rebuild from the ground up.  We can then
get rid of the outer 'Mung Until Now Good' iteration and further we
benefit from a linear run time.

Tested by building several different forms of broken-ness in all three
chains and then fixing it.

Now with improved logging and correct non insertion of nonexistant elements
and clean compiled with extra warning.

Change-Id: Id39d806c9c90f67c6967bd99460ba9842a043158
Reviewed-on: http://gerrit.openafs.org/1991
Reviewed-by: Russ Allbery <rra@stanford.edu>
Tested-by: Russ Allbery <rra@stanford.edu>
src/vlserver/vldb_check.c