Denis Kovalchuk wrote on Thu, 30 Apr 2020 20:07 +0300:
> I think I've found a problem with the rep-cache.db verification. If a commit
> occurs during the rep-cache.db verification, this can lead to a post-commit
> error "database is locked" and new representations will not be added in the
> rep-cache.db. The problem occurs because during the verification all cache
> entries are retrieved using one large query with holding a sqlite lock, that
> prevents adding new cache entries.
> 

So the failure mode is that rep-cache.db entries are not able to be
added while rep-cache.db is being verified.  I am not convinced that
this is a problem.

The obvious workaround, in case someone runs into that, is for the
admin to run build-repcache afterwards.  (Incidentally, we might want
have the "post-commit FS processing failed" error message namedrop
«svnadmin build-repcache» when the underlying error code indicates an
SQLite error.)

> The problem can occur for other cases where rep-cache.db is changed, such as
> during 'svnadmin build rep-cache'.
> 

Yes, build-repcache will error out in this situation.  Why is that a problem?

> I propose to retrieve cache entries in batches and process them without 
> holding
> a sqlite lock. I checked that the new approach does not affect the verify
> performance and assume that it should work correctly in the case of concurrent
> working with the rep-cache.db.
> 

What effect does the patch have on _correctness_ of verification?  What
kinds of corruptions can be detected by the incumbent code but not with
your patch?

> Please see the attached patch. More technical details can be found in the log
> message.

Isn't there an alternative approach that does not affect the correctness
of verification as much as this approach?

Cheers,

Daniel

Reply via email to