Tuesday, June 06, 2006

CVS History Size Limit

When I came to work this morning some colleagues complained about the CVS server not working properly. I tried myself and got a

Terminated with signal 25

error, no matter what I did. I could neither check out files nor commit modifications or new files.

Update: raghukumar.c _@_ tavant.com seems to have got a slightly different message (CVS Terminated with fatal signal 25) which I include here to improve search engine hits.

I had a look at the server and could not find anything, neither in the logs nor the usual suspects like exceeded quotas, full partitions or permissions. I suspected some sort of automatic update by RedHat's up2date, but that was not the case, either.

It took me a while until the CVSROOT/history file' size in the repository in question caught my eye with a size of precisely 2GB. Searching the net did not give me any hints about a limitation of that file's size, but apparently it is there. I could easily resolve the issue though, because I saw that when setting up the server months ago I had accidentally forgotten to reduce the LogHistory setting in CVSROOT/config. It had tracked each and every checkout, local delete, merges, conflicts etc.

With a little help from grep I managed to reduce the file size from 2GB to about 50MB. I just ran the following on the server's shell after I had disabled the CVS access by stopping xinetd:

egrep -v "^[TMAR].*$" > history.new
mv history history.full
mv history.new history

I kept the original file just for sure. After restarting xinetd people could not check in files, because there were some stale locks left. So I had to do a

find /var/lock/cvs -iname #cvs.rfl* -exec rm {} \;

to get rid of those. After that all problems vanished.

I think I will still file a bug report, because even though we are very unlikely to hit the limit again considering the growth rate, but maybe someone depends on a finer logging. At least it should be documented.

No comments: