You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/10/14 22:44:47 UTC
svn commit: r1532084 -
/subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c
Author: stefan2
Date: Mon Oct 14 20:44:47 2013
New Revision: 1532084
URL: http://svn.apache.org/r1532084
Log:
On the log-addressing branch: Finalize the pack concurrency work.
All read code should now work fine in parallel to a background pack run.
This patch makes lets the index verification code retry a shard when
it got packed while being verified.
* subversion/libsvn_fs_fs/verify.c
(verify_index_consistency): retry upon error if the pack size changed
Modified:
subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c
Modified: subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c
URL: http://svn.apache.org/viewvc/subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c?rev=1532084&r1=1532083&r2=1532084&view=diff
==============================================================================
--- subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c (original)
+++ subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c Mon Oct 14 20:44:47 2013
@@ -621,21 +621,37 @@ verify_index_consistency(svn_fs_t *fs,
for (revision = start; revision <= end; revision = pack_end)
{
+ svn_error_t *err = SVN_NO_ERROR;
+
+ svn_revnum_t count = pack_size(fs, revision);
pack_start = packed_base_rev(fs, revision);
- pack_end = pack_start + pack_size(fs, revision);
+ pack_end = pack_start + count;
if (notify_func && (pack_start % ffd->max_files_per_dir == 0))
notify_func(pack_start, notify_baton, iterpool);
/* two-way index check */
- SVN_ERR(compare_l2p_to_p2l_index(fs, pack_start, pack_end - pack_start,
- cancel_func, cancel_baton, iterpool));
- SVN_ERR(compare_p2l_to_l2p_index(fs, pack_start, pack_end - pack_start,
- cancel_func, cancel_baton, iterpool));
+ err = compare_l2p_to_p2l_index(fs, pack_start, pack_end - pack_start,
+ cancel_func, cancel_baton, iterpool);
+ if (!err)
+ err = compare_p2l_to_l2p_index(fs, pack_start, pack_end - pack_start,
+ cancel_func, cancel_baton, iterpool);
/* verify in-index checksums and types vs. actual rev / pack files */
- SVN_ERR(compare_p2l_to_rev(fs, pack_start, pack_end - pack_start,
- cancel_func, cancel_baton, iterpool));
+ if (!err)
+ err = compare_p2l_to_rev(fs, pack_start, pack_end - pack_start,
+ cancel_func, cancel_baton, iterpool);
+
+ /* retry the whole shard if it got packed in the meantime */
+ if (err && count != pack_size(fs, revision))
+ {
+ svn_error_clear(err);
+ pack_end = pack_start;
+ }
+ else
+ {
+ SVN_ERR(err);
+ }
svn_pool_clear(iterpool);
}