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));