On Mon, Jul 30, 2012 at 12:40 PM, Philip Martin
<philip.mar...@wandisco.com>wrote:

> When the commit process finds a representation in the rep-cache the only
> sanity check that happens is that the revision must be less than or
> equal to HEAD.  We don't check that the offset is valid:
>
>  echo foo > foo
>  svnadmin create repo
>  svn import -mm foo file://`pwd`/repo/A/f
>  sqlite3 repo/db/rep-cache.db "update rep_cache set offset = 4"
>  svn import -mm foo file://`pwd`/repo/A/g
>
> or that the checksum at that offset matches:
>
>  echo foo > foo
>  echo bar > bar
>  svnadmin create repo
>  svn import -mm foo file://`pwd`/repo/A/f
>  sqlite3 repo/db/rep-cache.db "update rep_cache set
> hash='e242ed3bffccdf271b7fbaf34ed72d089537b42f'"
>  svn import -mm bar file://`pwd`/repo/A/g
>
> In both cases corruption in the rep-cache leads to corruption in the
> revision files but that corruption is not detected by commit process
> even though subsequent checkouts will fail.
>

Has that kind of corruption been observed in the wild?


> Should we do more sanity checking?  We are using rep-cache to discard
> data supplied by the client on the basis that it is already present in
> the repository.  Should we check that the offset really is a representation
> with the expected checksum?
>

The full verification would look like this:
* recursively enumerate all noderevs in the rep's revision
* check that at least one uses the rep
* read the rep and verify the checksum

This seems quite costly to do during commit - in particular during
imports and similar mass commit operations.

A side issue: "svnadmin verify" doesn't detect the corruption in the
> second case even though checkout will fail.
>

We should fix that, i.e. detect this kind of corruption.
We could add a revision index to rep-cache.db, enumerate
all reps in the revision file and compare them to the db content.

-- Stefan^2.

-- 
*Join us this October for Subversion Live
2012<http://www.wandisco.com/svn-live-2012>– 2 full days of training,
networking, live demos and more! 25%
off before Aug. 10th with discount code “earlybird.”

*Certified & Supported Apache Subversion Downloads:
http://www.wandisco.com/subversion/download

Reply via email to