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 2014/06/27 17:43:07 UTC

svn commit: r1606132 - in /subversion/trunk: subversion/libsvn_fs_fs/ tools/server-side/svnfsfs/

Author: stefan2
Date: Fri Jun 27 15:43:06 2014
New Revision: 1606132

URL: http://svn.apache.org/r1606132
Log:
Switch the FSFS's internal revision file API to the two-pool paradigm.

* subversion/libsvn_fs_fs/rev_file.h
  (svn_fs_fs__open_pack_or_rev_file,
   svn_fs_fs__open_proto_rev_file): Switch to two-pool paradigm.

* subversion/libsvn_fs_fs/rev_file.c
  (open_pack_or_rev_file,
   svn_fs_fs__open_pack_or_rev_file,
   svn_fs_fs__open_proto_rev_file): Switch implementations to two-pool
                                    paradigm.

* subversion/libsvn_fs_fs/cached_data.c
  (open_and_seek_revision,
   open_and_seek_transaction,
   svn_fs_fs__rev_get_root,
   auto_open_shared_file,
   svn_fs_fs__check_rep,
   svn_fs_fs__get_changes): Update callers, none using separate pools.

* subversion/libsvn_fs_fs/index.c
  (svn_fs_fs__l2p_get_max_ids): Same.

* subversion/libsvn_fs_fs/recovery.c
  (recover_get_largest_revision): Same.
  (recover_body): Update caller, using an actual temporary pool.

* subversion/libsvn_fs_fs/pack.c
  (pack_range,
   append_revision): Update callers, using actual temporary pools.

* subversion/libsvn_fs_fs/verify.c
  (compare_l2p_to_p2l_index,
   compare_p2l_to_l2p_index,
   compare_p2l_to_rev): Same.

* tools/server-side/svnfsfs/dump-index-cmd.c
  (dump_index): Same.

* tools/server-side/svnfsfs/load-index-cmd.c
  (load_index): Update caller, does not use a separate pool.

* tools/server-side/svnfsfs/stats-cmd.c
  (open_rev_or_pack_file,
   read_log_rev_or_packfile): Ditto.

Modified:
    subversion/trunk/subversion/libsvn_fs_fs/cached_data.c
    subversion/trunk/subversion/libsvn_fs_fs/index.c
    subversion/trunk/subversion/libsvn_fs_fs/pack.c
    subversion/trunk/subversion/libsvn_fs_fs/recovery.c
    subversion/trunk/subversion/libsvn_fs_fs/rev_file.c
    subversion/trunk/subversion/libsvn_fs_fs/rev_file.h
    subversion/trunk/subversion/libsvn_fs_fs/verify.c
    subversion/trunk/tools/server-side/svnfsfs/dump-index-cmd.c
    subversion/trunk/tools/server-side/svnfsfs/load-index-cmd.c
    subversion/trunk/tools/server-side/svnfsfs/stats-cmd.c

Modified: subversion/trunk/subversion/libsvn_fs_fs/cached_data.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/cached_data.c?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/cached_data.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/cached_data.c Fri Jun 27 15:43:06 2014
@@ -218,7 +218,7 @@ open_and_seek_revision(svn_fs_fs__revisi
 
   SVN_ERR(svn_fs_fs__ensure_revision_exists(rev, fs, pool));
 
-  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, rev, pool));
+  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, rev, pool, pool));
   SVN_ERR(svn_fs_fs__item_offset(&offset, fs, rev_file, rev, NULL, item,
                                  pool));
 
@@ -240,7 +240,7 @@ open_and_seek_transaction(svn_fs_fs__rev
 {
   apr_off_t offset;
 
-  SVN_ERR(svn_fs_fs__open_proto_rev_file(file, fs, &rep->txn_id, pool));
+  SVN_ERR(svn_fs_fs__open_proto_rev_file(file, fs, &rep->txn_id, pool, pool));
 
   SVN_ERR(svn_fs_fs__item_offset(&offset, fs, NULL, SVN_INVALID_REVNUM,
                                  &rep->txn_id, rep->item_index, pool));
@@ -567,7 +567,7 @@ svn_fs_fs__rev_get_root(svn_fs_id_t **ro
         return SVN_NO_ERROR;
 
       SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&revision_file, fs, rev,
-                                               scratch_pool));
+                                               scratch_pool, scratch_pool));
       SVN_ERR(get_root_changes_offset(&root_offset, NULL,
                                       revision_file->file, fs, rev,
                                       scratch_pool));
@@ -667,7 +667,8 @@ auto_open_shared_file(shared_file_t *fil
 {
   if (file->rfile == NULL)
     SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&file->rfile, file->fs,
-                                             file->revision, file->pool));
+                                             file->revision, file->pool,
+                                             file->pool));
 
   return SVN_NO_ERROR;
 }
@@ -927,7 +928,7 @@ svn_fs_fs__check_rep(representation_t *r
 
       svn_fs_fs__revision_file_t *rev_file;
       SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, rep->revision,
-                                               scratch_pool));
+                                               scratch_pool, scratch_pool));
 
       /* This will auto-retry if there was a background pack. */
       SVN_ERR(svn_fs_fs__item_offset(&offset, fs, rev_file, rep->revision,
@@ -2715,7 +2716,7 @@ svn_fs_fs__get_changes(apr_array_header_
 
       SVN_ERR(svn_fs_fs__ensure_revision_exists(rev, fs, scratch_pool));
       SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&revision_file, fs, rev,
-                                               scratch_pool));
+                                               scratch_pool, scratch_pool));
 
       if (svn_fs_fs__use_log_addressing(fs, rev))
         {

Modified: subversion/trunk/subversion/libsvn_fs_fs/index.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/index.c?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/index.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/index.c Fri Jun 27 15:43:06 2014
@@ -1432,7 +1432,7 @@ svn_fs_fs__l2p_get_max_ids(apr_array_hea
 
   /* read index master data structure for the index covering START_REV */
   SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, start_rev,
-                                           header_pool));
+                                           header_pool, header_pool));
   SVN_ERR(get_l2p_header(&header, rev_file, fs, start_rev, header_pool));
   SVN_ERR(svn_fs_fs__close_revision_file(rev_file));
 
@@ -1453,7 +1453,7 @@ svn_fs_fs__l2p_get_max_ids(apr_array_hea
            * issue here. */
           svn_pool_clear(header_pool);
           SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, revision,
-                                                  header_pool));
+                                                  header_pool, header_pool));
           SVN_ERR(get_l2p_header(&header, rev_file, fs, revision,
                                  header_pool));
           SVN_ERR(svn_fs_fs__close_revision_file(rev_file));

Modified: subversion/trunk/subversion/libsvn_fs_fs/pack.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/pack.c?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/pack.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/pack.c Fri Jun 27 15:43:06 2014
@@ -1293,7 +1293,7 @@ pack_range(pack_context_t *context,
 
       /* Get the rev file dimensions (mainly index locations). */
       SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, context->fs,
-                                               revision, revpool));
+                                               revision, revpool, iterpool));
       SVN_ERR(svn_fs_fs__auto_read_footer(rev_file));
 
       /* store the indirect array index */
@@ -1425,7 +1425,8 @@ append_revision(pack_context_t *context,
 
   /* Copy all the bits from the rev file to the end of the pack file. */
   SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, context->fs,
-                                           context->start_rev, pool));
+                                           context->start_rev, pool,
+                                           iterpool));
   SVN_ERR(copy_file_data(context, context->pack_file, rev_file->file,
                          finfo.size, iterpool));
 

Modified: subversion/trunk/subversion/libsvn_fs_fs/recovery.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/recovery.c?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/recovery.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/recovery.c Fri Jun 27 15:43:06 2014
@@ -57,7 +57,8 @@ recover_get_largest_revision(svn_fs_t *f
       svn_fs_fs__revision_file_t *file;
       svn_pool_clear(iterpool);
 
-      err = svn_fs_fs__open_pack_or_rev_file(&file, fs, right, iterpool);
+      err = svn_fs_fs__open_pack_or_rev_file(&file, fs, right, iterpool,
+                                             iterpool);
       if (err && err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION)
         {
           svn_error_clear(err);
@@ -80,7 +81,8 @@ recover_get_largest_revision(svn_fs_t *f
       svn_fs_fs__revision_file_t *file;
       svn_pool_clear(iterpool);
 
-      err = svn_fs_fs__open_pack_or_rev_file(&file, fs, probe, iterpool);
+      err = svn_fs_fs__open_pack_or_rev_file(&file, fs, probe, iterpool,
+                                             iterpool);
       if (err && err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION)
         {
           svn_error_clear(err);
@@ -410,7 +412,8 @@ recover_body(void *baton, apr_pool_t *po
           if (b->cancel_func)
             SVN_ERR(b->cancel_func(b->cancel_baton));
 
-          SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, rev, pool));
+          SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, rev, pool,
+                                                   iterpool));
           SVN_ERR(recover_get_root_offset(&root_offset, rev, rev_file, pool));
           SVN_ERR(recover_find_max_ids(fs, rev, rev_file, root_offset,
                                        &next_node_id, &next_copy_id, pool));

Modified: subversion/trunk/subversion/libsvn_fs_fs/rev_file.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/rev_file.c?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/rev_file.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/rev_file.c Fri Jun 27 15:43:06 2014
@@ -61,7 +61,8 @@ static svn_error_t *
 open_pack_or_rev_file(svn_fs_fs__revision_file_t *file,
                       svn_fs_t *fs,
                       svn_revnum_t rev,
-                      apr_pool_t *pool)
+                      apr_pool_t *result_pool,
+                      apr_pool_t *scratch_pool)
 {
   fs_fs_data_t *ffd = fs->fsap_data;
   svn_error_t *err;
@@ -69,16 +70,18 @@ open_pack_or_rev_file(svn_fs_fs__revisio
 
   do
     {
-      const char *path = svn_fs_fs__path_rev_absolute(fs, rev, pool);
+      const char *path = svn_fs_fs__path_rev_absolute(fs, rev, scratch_pool);
       apr_file_t *apr_file;
 
       /* open the revision file in buffered r/o mode */
       err = svn_io_file_open(&apr_file, path,
-                             APR_READ | APR_BUFFERED, APR_OS_DEFAULT, pool);
+                             APR_READ | APR_BUFFERED, APR_OS_DEFAULT,
+                             result_pool);
       if (!err)
         {
           file->file = apr_file;
-          file->stream = svn_stream_from_aprfile2(apr_file, TRUE, pool);
+          file->stream = svn_stream_from_aprfile2(apr_file, TRUE,
+                                                  result_pool);
           file->is_packed = svn_fs_fs__is_packed_rev(fs, rev);
 
           return SVN_NO_ERROR;
@@ -98,7 +101,7 @@ open_pack_or_rev_file(svn_fs_fs__revisio
                                          _("No such revision %ld"), rev);
 
               /* We failed for the first time. Refresh cache & retry. */
-              SVN_ERR(svn_fs_fs__update_min_unpacked_rev(fs, pool));
+              SVN_ERR(svn_fs_fs__update_min_unpacked_rev(fs, scratch_pool));
 
               retry = TRUE;
             }
@@ -123,12 +126,14 @@ svn_error_t *
 svn_fs_fs__open_pack_or_rev_file(svn_fs_fs__revision_file_t **file,
                                  svn_fs_t *fs,
                                  svn_revnum_t rev,
-                                 apr_pool_t *pool)
+                                 apr_pool_t *result_pool,
+                                 apr_pool_t *scratch_pool)
 {
-  *file = apr_palloc(pool, sizeof(**file));
-  init_revision_file(*file, fs, rev, pool);
+  *file = apr_palloc(result_pool, sizeof(**file));
+  init_revision_file(*file, fs, rev, result_pool);
 
-  return svn_error_trace(open_pack_or_rev_file(*file, fs, rev, pool));
+  return svn_error_trace(open_pack_or_rev_file(*file, fs, rev,
+                                               result_pool, scratch_pool));
 }
 
 svn_error_t *
@@ -172,18 +177,21 @@ svn_error_t *
 svn_fs_fs__open_proto_rev_file(svn_fs_fs__revision_file_t **file,
                                svn_fs_t *fs,
                                const svn_fs_fs__id_part_t *txn_id,
-                               apr_pool_t *pool)
+                               apr_pool_t* result_pool,
+                               apr_pool_t *scratch_pool)
 {
   apr_file_t *apr_file;
   SVN_ERR(svn_io_file_open(&apr_file,
-                           svn_fs_fs__path_txn_proto_rev(fs, txn_id, pool),
-                           APR_READ | APR_BUFFERED, APR_OS_DEFAULT, pool));
+                           svn_fs_fs__path_txn_proto_rev(fs, txn_id,
+                                                         scratch_pool),
+                           APR_READ | APR_BUFFERED, APR_OS_DEFAULT,
+                           result_pool));
 
-  *file = apr_pcalloc(pool, sizeof(**file));
+  *file = apr_pcalloc(result_pool, sizeof(**file));
   (*file)->file = apr_file;
   (*file)->is_packed = FALSE;
   (*file)->start_revision = SVN_INVALID_REVNUM;
-  (*file)->stream = svn_stream_from_aprfile2(apr_file, TRUE, pool);
+  (*file)->stream = svn_stream_from_aprfile2(apr_file, TRUE, result_pool);
 
   return SVN_NO_ERROR;
 }

Modified: subversion/trunk/subversion/libsvn_fs_fs/rev_file.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/rev_file.h?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/rev_file.h (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/rev_file.h Fri Jun 27 15:43:06 2014
@@ -89,12 +89,14 @@ typedef struct svn_fs_fs__revision_file_
 /* Open the correct revision file for REV.  If the filesystem FS has
  * been packed, *FILE will be set to the packed file; otherwise, set *FILE
  * to the revision file for REV.  Return SVN_ERR_FS_NO_SUCH_REVISION if the
- * file doesn't exist.  Use POOL for allocations. */
+ * file doesn't exist.  Allocate *FILE in RESULT_POOL and use SCRATCH_POOL
+ * for temporaries. */
 svn_error_t *
 svn_fs_fs__open_pack_or_rev_file(svn_fs_fs__revision_file_t **file,
                                  svn_fs_t *fs,
                                  svn_revnum_t rev,
-                                 apr_pool_t *pool);
+                                 apr_pool_t *result_pool,
+                                 apr_pool_t *scratch_pool);
 
 /* If the footer data in FILE has not been read, yet, do so now.
  * Index locations will only be read upon request as we assume they get
@@ -105,12 +107,13 @@ svn_error_t *
 svn_fs_fs__auto_read_footer(svn_fs_fs__revision_file_t *file);
 
 /* Open the proto-rev file of transaction TXN_ID in FS and return it in *FILE.
- * Use POOL for allocations. */
+ * Allocate *FILE in RESULT_POOL use and SCRATCH_POOL for temporaries.. */
 svn_error_t *
 svn_fs_fs__open_proto_rev_file(svn_fs_fs__revision_file_t **file,
                                svn_fs_t *fs,
                                const svn_fs_fs__id_part_t *txn_id,
-                               apr_pool_t *pool);
+                               apr_pool_t* result_pool,
+                               apr_pool_t *scratch_pool);
 
 /* Close all files and streams in FILE.
  */

Modified: subversion/trunk/subversion/libsvn_fs_fs/verify.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/verify.c?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/verify.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/verify.c Fri Jun 27 15:43:06 2014
@@ -178,7 +178,8 @@ compare_l2p_to_p2l_index(svn_fs_t *fs,
 
   /* common file access structure */
   svn_fs_fs__revision_file_t *rev_file;
-  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, start, pool));
+  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, start, pool,
+                                           iterpool));
 
   /* determine the range of items to check for each revision */
   SVN_ERR(svn_fs_fs__l2p_get_max_ids(&max_ids, fs, start, count, pool));
@@ -261,7 +262,8 @@ compare_p2l_to_l2p_index(svn_fs_t *fs,
 
   /* common file access structure */
   svn_fs_fs__revision_file_t *rev_file;
-  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, start, pool));
+  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, start, pool,
+                                           iterpool));
 
   /* get the size of the rev / pack file as covered by the P2L index */
   SVN_ERR(svn_fs_fs__p2l_get_max_offset(&max_offset, fs, rev_file, start,
@@ -500,7 +502,8 @@ compare_p2l_to_rev(svn_fs_t *fs,
   svn_fs_fs__revision_file_t *rev_file;
 
   /* open the pack / rev file that is covered by the p2l index */
-  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, start, pool));
+  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, start, pool,
+                                           iterpool));
 
   /* check file size vs. range covered by index */
   SVN_ERR(svn_fs_fs__auto_read_footer(rev_file));

Modified: subversion/trunk/tools/server-side/svnfsfs/dump-index-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/server-side/svnfsfs/dump-index-cmd.c?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/tools/server-side/svnfsfs/dump-index-cmd.c (original)
+++ subversion/trunk/tools/server-side/svnfsfs/dump-index-cmd.c Fri Jun 27 15:43:06 2014
@@ -75,7 +75,8 @@ dump_index(const char *path,
     return svn_error_create(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL, NULL);
 
   /* Revision & index file access object. */
-  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, revision, pool));
+  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, revision, pool,
+                                           iterpool));
 
   /* Offset range to cover. */
   SVN_ERR(svn_fs_fs__p2l_get_max_offset(&max_offset, fs, rev_file, revision,

Modified: subversion/trunk/tools/server-side/svnfsfs/load-index-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/server-side/svnfsfs/load-index-cmd.c?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/tools/server-side/svnfsfs/load-index-cmd.c (original)
+++ subversion/trunk/tools/server-side/svnfsfs/load-index-cmd.c Fri Jun 27 15:43:06 2014
@@ -365,7 +365,7 @@ load_index(const char *path,
 
       /* Open rev / pack file & trim indexes + footer off it. */
       SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, revision,
-                                               iterpool));
+                                               iterpool, iterpool));
       SVN_ERR(svn_fs_fs__auto_read_footer(rev_file));
       SVN_ERR(svn_io_file_trunc(rev_file->file, rev_file->l2p_offset,
                                 iterpool));

Modified: subversion/trunk/tools/server-side/svnfsfs/stats-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/server-side/svnfsfs/stats-cmd.c?rev=1606132&r1=1606131&r2=1606132&view=diff
==============================================================================
--- subversion/trunk/tools/server-side/svnfsfs/stats-cmd.c (original)
+++ subversion/trunk/tools/server-side/svnfsfs/stats-cmd.c Fri Jun 27 15:43:06 2014
@@ -290,7 +290,8 @@ open_rev_or_pack_file(apr_file_t **file,
                       apr_pool_t *pool)
 {
   svn_fs_fs__revision_file_t *rev_file;
-  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs->fs, rev, pool));
+  SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs->fs, rev,
+                                           pool, pool));
 
   *file = rev_file->file;
   return SVN_NO_ERROR;
@@ -1399,7 +1400,7 @@ read_log_rev_or_packfile(fs_t *fs,
 
   /* open the pack / rev file that is covered by the p2l index */
   SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs->fs, base,
-                                           localpool));
+                                           iterpool, iterpool));
   SVN_ERR(svn_fs_fs__p2l_get_max_offset(&max_offset, fs->fs, rev_file,
                                         base, localpool));