On Mon, Jun 16, 2014 at 03:53:16PM +0200, Stefan Sperling wrote:
> Stefan2 pointed out that format 7 is less efficient if packing is disabled.
> So to fully benefit from format 7 in the default configuration, users must
> currently run 'svnadmin pack' or edit fsfs.conf to enable packing after 
> commit.
> Since format 7 adds locking support to pack, so it should be safe to trigger
> packing at any time.
> 
> It looks like it makes sense to enable packing after commit by default
> for format 7 repositories. Any objections?

And here's a more complete patch, fixing test fallout.

[[[
Enable packing by default in format 7 FSFS repositories.

* subversion/libsvn_fs_fs/fs.h
  (CONFIG_SECTION_DEBUG): Remove.
  (CONFIG_SECTION_PACKED_REVS): New configuration section "packed-revisions",
   which contains options controlling revision packing behaviour. (Perhaps this
   should be called "packing" and merged with the "packed-revprops" section in
   a backwards-compatible way.)

* subversion/libsvn_fs_fs/fs_fs.c
  (read_config): If the file format supports the pack lock, default to
   pack-after-commit.

* subversion/tests/cmdline/svnadmin_tests.py
  (disable_pack_after_commit): New helper function.
  (hotcopy_incremental_packed, verify_packed): Disable pack-after-commit
   for these tests to keep them passing.
]]]


Index: subversion/libsvn_fs_fs/fs.h
===================================================================
--- subversion/libsvn_fs_fs/fs.h        (revision 1602871)
+++ subversion/libsvn_fs_fs/fs.h        (working copy)
@@ -117,7 +117,7 @@ extern "C" {
 #define CONFIG_OPTION_BLOCK_SIZE         "block-size"
 #define CONFIG_OPTION_L2P_PAGE_SIZE      "l2p-page-size"
 #define CONFIG_OPTION_P2L_PAGE_SIZE      "p2l-page-size"
-#define CONFIG_SECTION_DEBUG             "debug"
+#define CONFIG_SECTION_PACKED_REVS       "packed-revisions"
 #define CONFIG_OPTION_PACK_AFTER_COMMIT  "pack-after-commit"
 
 /* The format number of this filesystem.
Index: subversion/libsvn_fs_fs/fs_fs.c
===================================================================
--- subversion/libsvn_fs_fs/fs_fs.c     (revision 1602871)
+++ subversion/libsvn_fs_fs/fs_fs.c     (working copy)
@@ -767,9 +767,10 @@ read_config(fs_fs_data_t *ffd,
   if (ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
     {
       SVN_ERR(svn_config_get_bool(config, &ffd->pack_after_commit,
-                                  CONFIG_SECTION_DEBUG,
+                                  CONFIG_SECTION_PACKED_REVS,
                                   CONFIG_OPTION_PACK_AFTER_COMMIT,
-                                  FALSE));
+                                  ffd->format < SVN_FS_FS__MIN_PACK_LOCK_FORMAT
+                                    ? FALSE : TRUE));
     }
   else
     {
@@ -987,6 +988,11 @@ write_config(svn_fs_t *fs,
 "### Must be a power of 2."                                                  NL
 "### p2l-page-size is 1024 kBytes by default."                               NL
 "# " CONFIG_OPTION_P2L_PAGE_SIZE " = 1024"                                   NL
+""                                                                           NL
+"[" CONFIG_SECTION_PACKED_REVS "]"                                           NL
+"### This option controls whether to pack revisions after commit."           NL
+"### The default is 'yes' for FSFS format 7 repositories, otherwise 'no'."   NL
+"# " CONFIG_OPTION_PACK_AFTER_COMMIT " = no"                                 NL
 ;
 #undef NL
   return svn_io_file_create(svn_dirent_join(fs->path, PATH_CONFIG, pool),
Index: subversion/tests/cmdline/svnadmin_tests.py
===================================================================
--- subversion/tests/cmdline/svnadmin_tests.py  (revision 1602871)
+++ subversion/tests/cmdline/svnadmin_tests.py  (working copy)
@@ -41,6 +41,7 @@ from svntest.verify import SVNExpectedStdout, SVNE
 from svntest.verify import SVNUnexpectedStderr
 from svntest.verify import UnorderedOutput
 from svntest.main import SVN_PROP_MERGEINFO
+from svntest.main import get_fsfs_conf_file_path
 
 # (abbreviation)
 Skip = svntest.testcase.Skip_deco
@@ -342,6 +343,21 @@ def set_changed_path_list(sbox, revision, changes)
   fp.truncate()
   fp.close()
 
+def disable_pack_after_commit(repo_dir):
+  """ Disable pack-after-commit option in FSFS repositories. """
+  fsfsconf = open(get_fsfs_conf_file_path(repo_dir), 'r')
+  tweaked_config = []
+  for line in fsfsconf.readlines():
+    if line.startswith('# pack-after-commit'):
+        tweaked_config.append('pack-after-commit = no\n')
+    else:
+        tweaked_config.append(line)
+  fsfsconf.close()
+  fsfsconf = open(get_fsfs_conf_file_path(repo_dir), 'w')
+  for line in tweaked_config:
+    fsfsconf.write(line)
+  fsfsconf.close()
+
 ######################################################################
 # Tests
 
@@ -1795,6 +1811,8 @@ def hotcopy_incremental_packed(sbox):
     format_file.write("6\nlayout sharded 2\n")
   format_file.close()
 
+  disable_pack_after_commit(sbox.repo_dir)
+
   # Pack revisions 0 and 1.
   svntest.actions.run_and_verify_svnadmin(
     None, ['Packing revisions in shard 0...done.\n'], [], "pack",
@@ -2352,6 +2370,8 @@ def verify_packed(sbox):
   "verify packed with small shards"
   sbox.build()
 
+  disable_pack_after_commit(sbox.repo_dir)
+
   # Configure two files per shard to trigger packing.
   if svntest.main.is_fs_type_fsx():
     format = "1\nlayout sharded 2\n"

Reply via email to