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/06/21 21:57:30 UTC
svn commit: r1495566 - /subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
Author: stefan2
Date: Fri Jun 21 19:57:29 2013
New Revision: 1495566
URL: http://svn.apache.org/r1495566
Log:
Compensate for the possibility that cancelling and 'svnadmin upgrade'
may leave redundant non-packed revprop shards. Since they are always
the latest ones, we can easily detect and clean them up when packing
the next shard.
* subversion/libsvn_fs_fs/fs_fs.c
(pack_shard): clean up left-over previous revprop shards as well
Modified:
subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
Modified: subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c?rev=1495566&r1=1495565&r2=1495566&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c Fri Jun 21 19:57:29 2013
@@ -10297,13 +10297,31 @@ pack_shard(const char *revs_dir,
(svn_revnum_t)((shard + 1) * max_files_per_dir),
pool));
- /* Finally, remove the existing shard directories. */
+ /* Finally, remove the existing shard directories.
+ * For revprops, clean up older obsolete shards as well as they might
+ * have been left over from an interrupted FS upgrade. */
SVN_ERR(svn_io_remove_dir2(rev_shard_path, TRUE,
cancel_func, cancel_baton, pool));
if (revsprops_dir)
- SVN_ERR(delete_revprops_shard(revprops_shard_path,
- shard, max_files_per_dir,
- cancel_func, cancel_baton, pool));
+ {
+ svn_node_kind_t kind = svn_node_dir;
+ apr_int64_t to_cleanup = shard;
+ do
+ {
+ SVN_ERR(delete_revprops_shard(revprops_shard_path,
+ to_cleanup, max_files_per_dir,
+ cancel_func, cancel_baton, pool));
+
+ /* If the previous shard exists, clean it up as well.
+ Don't try to clean up shard 0 as it we can't tell quickly
+ whether it actually needs cleaning up. */
+ revprops_shard_path = svn_dirent_join(revsprops_dir,
+ apr_psprintf(pool, "%" APR_INT64_T_FMT, --to_cleanup),
+ pool);
+ SVN_ERR(svn_io_check_path(revprops_shard_path, &kind, pool));
+ }
+ while (kind == svn_node_dir && to_cleanup > 0);
+ }
/* Notify caller we're starting to pack this shard. */
if (notify_func)