Hey all,

I'm getting ready to make two changes, possibly on stable.

The first would be to add file locking for the CVSROOT/history and
CVSROOT/val-tags files.  I have some reports of massively corrupted
history files in large repositories, and I don't see any other likely
cause.  Similarly, I expect locking will also be necessary on val-tags
in such a large repository and the additional code will be minimal after
I add the history locking stuff.

I was thinking that I would make totally separate lock dirs for this
(#cvs.history.lock and #cvs.val-tags.lock or somesuch) to allow
concurrent write access to other CVSROOT files, history, and val-tags.
I don't think deadlock will be an issue - despite the fact that any
given process writing to the history file or val-tags might hold any
number of other locks, the history or val-tags lock will always be
"last" in the chain and only held for the duration of the write of a
single line to the file.  Does anyone see any problems with that design?

Since file corruption is the current consequence of not having these
locks, I thought this would be justified on stable.  Any objections?

The other set of changes I was considering would be to enable a number
of new keywords for the config file to allow CVS to search for config
files in new locations.  I would not be changing the default locations,
but the new setup would enable something like the following to be
specified in CVSROOT/config:

  CheckoutListFile  $CVSROOT/CVSROOT/admin/checkoutlist
  CommitInfoFile    $CVSROOT/CVSROOT/triggers/commitinfo
  CVSIgnoreFile     $CVSROOT/CVSROOT/cvsignore
  CVSWrappersFile   $CVSROOT/CVSROOT/admin/cvswrappers
  EditInfoFile      $CVSROOT/CVSROOT/triggers/editinfo
  HistoryFile       $CVSROOT/CVSROOT/logs/history/%Y%m%d
  HistorySearch     $CVSROOT/CVSROOT/logs/history/*
  LogInfoFile       $CVSROOT/CVSROOT/triggers/loginfo
  ModulesFile       $CVSROOT/CVSROOT/modules
  NotifyFile        $CVSROOT/CVSROOT/triggers/notify
  PasswdFile        $CVSROOT/CVSROOT/admin/passwd
  RCSInfoFile       $CVSROOT/CVSROOT/triggers/rcsinfo
  ReadersFile       $CVSROOT/CVSROOT/admin/readers
  TagInfoFile       $CVSROOT/CVSROOT/triggers/taginfo
  ValTagsFile       $CVSROOT/CVSROOT/admin/val-tags
  VerifyMsgFile     $CVSROOT/CVSROOT/triggers/verifymsg
  WritersFile       $CVSROOT/CVSROOT/admin/writers

Note that HistoryFile has an argument that would basically be run
through strftime, to enable log rotation.  Also see the HistorySearch,
which would be used as a file glob to locate history files to be read
for executions of the `cvs history' command.



Attachment: signature.asc
Description: OpenPGP digital signature

Bug-cvs mailing list

Reply via email to