Return-Path: X-Original-To: apmail-subversion-commits-archive@minotaur.apache.org Delivered-To: apmail-subversion-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D908F112A5 for ; Thu, 25 Sep 2014 10:08:47 +0000 (UTC) Received: (qmail 68449 invoked by uid 500); 25 Sep 2014 10:08:47 -0000 Delivered-To: apmail-subversion-commits-archive@subversion.apache.org Received: (qmail 68419 invoked by uid 500); 25 Sep 2014 10:08:47 -0000 Mailing-List: contact commits-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@subversion.apache.org Delivered-To: mailing list commits@subversion.apache.org Received: (qmail 68409 invoked by uid 99); 25 Sep 2014 10:08:47 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 25 Sep 2014 10:08:47 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 25 Sep 2014 10:08:45 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 5FD8A23888FE; Thu, 25 Sep 2014 10:08:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1627497 - in /subversion/trunk/subversion: libsvn_fs_fs/cached_data.c libsvn_fs_fs/index.c libsvn_fs_fs/index.h libsvn_fs_fs/pack.c libsvn_fs_fs/verify.c svnfsfs/dump-index-cmd.c svnfsfs/stats-cmd.c Date: Thu, 25 Sep 2014 10:08:25 -0000 To: commits@subversion.apache.org From: stefan2@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140925100825.5FD8A23888FE@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: stefan2 Date: Thu Sep 25 10:08:24 2014 New Revision: 1627497 URL: http://svn.apache.org/r1627497 Log: Switch FSFS index API functions that could actually use two different pool parameters to the two-pool paradigm. Although almost all current callers will pass the same (temporary) pool to both parameters, this patch improves consistency, readability and documentation. * subversion/libsvn_fs_fs/index.h (svn_fs_fs__p2l_index_lookup, svn_fs_fs__p2l_entry_lookup, svn_fs_fs__l2p_get_max_ids): Accept two pools instead of one. * subversion/libsvn_fs_fs/index.c (p2l_index_lookup): The POOL parameter is actually a SCRATCH_POOL. All results are flat data stored in the pre-allocated *ENTRIES result. (svn_fs_fs__l2p_get_max_ids, svn_fs_fs__p2l_index_lookup): Only the result array needs to be allocated in the RESULT_POOL. It contains flat data and no pointers. (svn_fs_fs__p2l_entry_lookup): Use the SCRATCH_POOL with function calls only require a temporary pool. * subversion/libsvn_fs_fs/cached_data.c (svn_fs_fs__check_rep, block_read): Update caller by passing the same pool to both parameters. That pool is already for temporaries only. * subversion/libsvn_fs_fs/pack.c (pack_range, append_revision): Same. (pack_log_addressed): Update caller, actually providing different pools. * subversion/libsvn_fs_fs/verify.c (compare_l2p_to_p2l_index): Same. (compare_p2l_to_l2p_index, compare_p2l_to_rev): Update caller by passing the same temporary pool to both parameters. * subversion/svnfsfs/dump-index-cmd.c (dump_index): Same. * subversion/svnfsfs/stats-cmd.c (read_log_rev_or_packfile): Same. Modified: subversion/trunk/subversion/libsvn_fs_fs/cached_data.c subversion/trunk/subversion/libsvn_fs_fs/index.c subversion/trunk/subversion/libsvn_fs_fs/index.h subversion/trunk/subversion/libsvn_fs_fs/pack.c subversion/trunk/subversion/libsvn_fs_fs/verify.c subversion/trunk/subversion/svnfsfs/dump-index-cmd.c subversion/trunk/subversion/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=1627497&r1=1627496&r2=1627497&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_fs/cached_data.c (original) +++ subversion/trunk/subversion/libsvn_fs_fs/cached_data.c Thu Sep 25 10:08:24 2014 @@ -937,8 +937,9 @@ svn_fs_fs__check_rep(representation_t *r /* This may fail if there is a background pack operation (can't auto- retry because the item offset lookup has to be redone as well). */ - SVN_ERR(svn_fs_fs__p2l_entry_lookup(&entry, fs, rev_file, rep->revision, - offset, scratch_pool)); + SVN_ERR(svn_fs_fs__p2l_entry_lookup(&entry, fs, rev_file, + rep->revision, offset, + scratch_pool, scratch_pool)); if ( entry == NULL || entry->type < SVN_FS_FS__ITEM_TYPE_FILE_REP @@ -3251,7 +3252,8 @@ block_read(void **result, block_start = offset - (offset % ffd->block_size); SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, fs, revision_file, revision, block_start, - ffd->block_size, scratch_pool)); + ffd->block_size, scratch_pool, + scratch_pool)); SVN_ERR(aligned_seek(fs, revision_file->file, &block_start, offset, iterpool)); Modified: subversion/trunk/subversion/libsvn_fs_fs/index.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/index.c?rev=1627497&r1=1627496&r2=1627497&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_fs/index.c (original) +++ subversion/trunk/subversion/libsvn_fs_fs/index.c Thu Sep 25 10:08:24 2014 @@ -1477,13 +1477,14 @@ svn_fs_fs__l2p_get_max_ids(apr_array_hea svn_fs_t *fs, svn_revnum_t start_rev, apr_size_t count, - apr_pool_t *pool) + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) { l2p_header_t *header = NULL; svn_revnum_t revision; svn_revnum_t last_rev = (svn_revnum_t)(start_rev + count); svn_fs_fs__revision_file_t *rev_file; - apr_pool_t *header_pool = svn_pool_create(pool); + apr_pool_t *header_pool = svn_pool_create(scratch_pool); /* 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, @@ -1494,7 +1495,7 @@ svn_fs_fs__l2p_get_max_ids(apr_array_hea /* Determine the length of the item index list for each rev. * Read new index headers as required. */ - *max_ids = apr_array_make(pool, (int)count, sizeof(apr_uint64_t)); + *max_ids = apr_array_make(result_pool, (int)count, sizeof(apr_uint64_t)); for (revision = start_rev; revision < last_rev; ++revision) { apr_uint64_t full_page_count; @@ -2374,7 +2375,7 @@ p2l_index_lookup(apr_array_header_t *ent svn_revnum_t revision, apr_off_t block_start, apr_off_t block_end, - apr_pool_t *pool) + apr_pool_t *scratch_pool) { fs_fs_data_t *ffd = fs->fsap_data; svn_fs_fs__page_cache_key_t key; @@ -2392,15 +2393,15 @@ p2l_index_lookup(apr_array_header_t *ent /* look for the fist page of the range in our cache */ SVN_ERR(get_p2l_keys(&page_info, &key, rev_file, fs, revision, block_start, - pool)); + scratch_pool)); SVN_ERR(svn_cache__get_partial((void**)&local_result, &is_cached, ffd->p2l_page_cache, &key, p2l_entries_func, - &block, pool)); + &block, scratch_pool)); if (!is_cached) { svn_boolean_t end; - apr_pool_t *iterpool = svn_pool_create(pool); + apr_pool_t *iterpool = svn_pool_create(scratch_pool); apr_off_t original_page_start = page_info.page_start; int leaking_bucket = 4; p2l_page_info_baton_t prefetch_info = page_info; @@ -2514,13 +2515,14 @@ svn_fs_fs__p2l_index_lookup(apr_array_he svn_revnum_t revision, apr_off_t block_start, apr_off_t block_size, - apr_pool_t *pool) + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) { apr_off_t block_end = block_start + block_size; /* the receiving container */ int last_count = 0; - apr_array_header_t *result = apr_array_make(pool, 16, + apr_array_header_t *result = apr_array_make(result_pool, 16, sizeof(svn_fs_fs__p2l_entry_t)); /* Fetch entries page-by-page. Since the p2l index is supposed to cover @@ -2530,7 +2532,7 @@ svn_fs_fs__p2l_index_lookup(apr_array_he { svn_fs_fs__p2l_entry_t *entry; SVN_ERR(p2l_index_lookup(result, rev_file, fs, revision, block_start, - block_end, pool)); + block_end, scratch_pool)); SVN_ERR_ASSERT(result->nelts > 0); /* continue directly behind last item */ @@ -2623,7 +2625,8 @@ svn_fs_fs__p2l_entry_lookup(svn_fs_fs__p svn_fs_fs__revision_file_t *rev_file, svn_revnum_t revision, apr_off_t offset, - apr_pool_t *pool) + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) { fs_fs_data_t *ffd = fs->fsap_data; svn_fs_fs__page_cache_key_t key = { 0 }; @@ -2634,17 +2637,19 @@ svn_fs_fs__p2l_entry_lookup(svn_fs_fs__p /* look for this info in our cache */ SVN_ERR(get_p2l_keys(&page_info, &key, rev_file, fs, revision, offset, - pool)); + scratch_pool)); SVN_ERR(svn_cache__get_partial((void**)entry_p, &is_cached, ffd->p2l_page_cache, &key, - p2l_entry_lookup_func, &offset, pool)); + p2l_entry_lookup_func, &offset, + result_pool)); if (!is_cached) { /* do a standard index lookup. This is will automatically prefetch * data to speed up future lookups. */ - apr_array_header_t *entries = apr_array_make(pool, 1, sizeof(**entry_p)); + apr_array_header_t *entries = apr_array_make(result_pool, 1, + sizeof(**entry_p)); SVN_ERR(p2l_index_lookup(entries, rev_file, fs, revision, offset, - offset + 1, pool)); + offset + 1, scratch_pool)); /* Find the entry that we want. */ *entry_p = svn_sort__array_lookup(entries, &offset, NULL, Modified: subversion/trunk/subversion/libsvn_fs_fs/index.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/index.h?rev=1627497&r1=1627496&r2=1627497&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_fs/index.h (original) +++ subversion/trunk/subversion/libsvn_fs_fs/index.h Thu Sep 25 10:08:24 2014 @@ -157,10 +157,11 @@ svn_fs_fs__p2l_index_append(svn_fs_t *fs /* Use the phys-to-log mapping files in FS to build a list of entries * that (at least partly) overlap with the range given by BLOCK_START * offset and BLOCK_SIZE in the rep / pack file containing REVISION. - * Return the array in *ENTRIES with svn_fs_fs__p2l_entry_t as elements. - * REV_FILE determines whether to access single rev or pack file data. - * If that is not available anymore (neither in cache nor on disk), - * return an error. Use POOL for allocations. + * Return the array in *ENTRIES with svn_fs_fs__p2l_entry_t as elements, + * allocated in RESULT_POOL. REV_FILE determines whether to access single + * rev or pack file data. If that is not available anymore (neither in + * cache nor on disk), return an error. Use SCRATCH_POOL for temporary + * allocations. * * Note that (only) the first and the last mapping may cross a cluster * boundary. @@ -172,14 +173,16 @@ svn_fs_fs__p2l_index_lookup(apr_array_he svn_revnum_t revision, apr_off_t block_start, apr_off_t block_size, - apr_pool_t *pool); + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); /* Use the phys-to-log mapping files in FS to return the entry for the * item starting at global OFFSET in the rep file containing REVISION in - * *ENTRY. Sets *ENTRY to NULL if no item starts at exactly that offset. - * REV_FILE determines whether to access single rev or pack file data. - * If that is not available anymore (neither in cache nor on disk), - * return an error. Use POOL for allocations. + * *ENTRY, allocated in RESULT_POOL. Sets *ENTRY to NULL if no item starts + * at exactly that offset. REV_FILE determines whether to access single + * rev or pack file data. If that is not available anymore (neither in + * cache nor on disk), return an error. Use SCRATCH_POOL for temporary + * allocations. */ svn_error_t * svn_fs_fs__p2l_entry_lookup(svn_fs_fs__p2l_entry_t **entry, @@ -187,7 +190,8 @@ svn_fs_fs__p2l_entry_lookup(svn_fs_fs__p svn_fs_fs__revision_file_t *rev_file, svn_revnum_t revision, apr_off_t offset, - apr_pool_t *pool); + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); /* For ITEM_INDEX within REV in FS, return the position in the respective * rev or pack file in *ABSOLUTE_POSITION. If TXN_ID is not NULL, return @@ -212,14 +216,16 @@ svn_fs_fs__item_offset(apr_off_t *absolu /* Use the log-to-phys indexes in FS to determine the maximum item indexes * assigned to revision START_REV to START_REV + COUNT - 1. That is a * close upper limit to the actual number of items in the respective revs. - * Return the results in *MAX_IDS, allocated in POOL. + * Return the results in *MAX_IDS, allocated in RESULT_POOL. + * Use SCRATCH_POOL for temporary allocations. */ svn_error_t * svn_fs_fs__l2p_get_max_ids(apr_array_header_t **max_ids, svn_fs_t *fs, svn_revnum_t start_rev, apr_size_t count, - apr_pool_t *pool); + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); /* In *OFFSET, return the last OFFSET in the pack / rev file containing. * REV_FILE determines whether to access single rev or pack file data. Modified: subversion/trunk/subversion/libsvn_fs_fs/pack.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/pack.c?rev=1627497&r1=1627496&r2=1627497&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_fs/pack.c (original) +++ subversion/trunk/subversion/libsvn_fs_fs/pack.c Thu Sep 25 10:08:24 2014 @@ -1307,7 +1307,8 @@ pack_range(pack_context_t *context, SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, context->fs, rev_file, revision, offset, - ffd->p2l_page_size, iterpool)); + ffd->p2l_page_size, iterpool, + iterpool)); for (i = 0; i < entries->nelts; ++i) { @@ -1441,7 +1442,8 @@ append_revision(pack_context_t *context, svn_pool_clear(iterpool); SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, context->fs, rev_file, context->start_rev, offset, - ffd->p2l_page_size, iterpool)); + ffd->p2l_page_size, iterpool, + iterpool)); for (i = 0; i < entries->nelts; ++i) { @@ -1527,7 +1529,7 @@ pack_log_addressed(svn_fs_t *fs, /* phase 1: determine the size of the revisions to pack */ SVN_ERR(svn_fs_fs__l2p_get_max_ids(&max_ids, fs, shard_rev, context.shard_end_rev - shard_rev, - pool)); + pool, pool)); /* pack revisions in ranges that don't exceed MAX_MEM */ for (i = 0; i < max_ids->nelts; ++i) Modified: subversion/trunk/subversion/libsvn_fs_fs/verify.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/verify.c?rev=1627497&r1=1627496&r2=1627497&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_fs/verify.c (original) +++ subversion/trunk/subversion/libsvn_fs_fs/verify.c Thu Sep 25 10:08:24 2014 @@ -182,7 +182,8 @@ compare_l2p_to_p2l_index(svn_fs_t *fs, 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)); + SVN_ERR(svn_fs_fs__l2p_get_max_ids(&max_ids, fs, start, count, pool, + iterpool)); /* check all items in all revisions if the given range */ for (i = 0; i < max_ids->nelts; ++i) @@ -205,7 +206,8 @@ compare_l2p_to_p2l_index(svn_fs_t *fs, /* find the corresponding P2L entry */ SVN_ERR(svn_fs_fs__p2l_entry_lookup(&p2l_entry, fs, rev_file, - revision, offset, iterpool)); + revision, offset, iterpool, + iterpool)); if (p2l_entry == NULL) return svn_error_createf(SVN_ERR_FS_ITEM_INDEX_INCONSISTENT, @@ -282,7 +284,7 @@ compare_p2l_to_l2p_index(svn_fs_t *fs, /* get all entries for the current block */ SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, fs, rev_file, start, offset, ffd->p2l_page_size, - iterpool)); + iterpool, iterpool)); if (entries->nelts == 0) return svn_error_createf(SVN_ERR_FS_ITEM_INDEX_CORRUPTION, NULL, @@ -532,7 +534,7 @@ compare_p2l_to_rev(svn_fs_t *fs, /* get all entries for the current block */ SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, fs, rev_file, start, offset, ffd->p2l_page_size, - iterpool)); + iterpool, iterpool)); /* process all entries (and later continue with the next block) */ for (i = 0; i < entries->nelts; ++i) Modified: subversion/trunk/subversion/svnfsfs/dump-index-cmd.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnfsfs/dump-index-cmd.c?rev=1627497&r1=1627496&r2=1627497&view=diff ============================================================================== --- subversion/trunk/subversion/svnfsfs/dump-index-cmd.c (original) +++ subversion/trunk/subversion/svnfsfs/dump-index-cmd.c Thu Sep 25 10:08:24 2014 @@ -93,7 +93,7 @@ dump_index(const char *path, svn_pool_clear(iterpool); SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, fs, rev_file, revision, offset, INDEX_BLOCK_SIZE, - iterpool)); + iterpool, iterpool)); /* Print entries for this block, one line per entry. */ for (i = 0; i < entries->nelts && offset < max_offset; ++i) Modified: subversion/trunk/subversion/svnfsfs/stats-cmd.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnfsfs/stats-cmd.c?rev=1627497&r1=1627496&r2=1627497&view=diff ============================================================================== --- subversion/trunk/subversion/svnfsfs/stats-cmd.c (original) +++ subversion/trunk/subversion/svnfsfs/stats-cmd.c Thu Sep 25 10:08:24 2014 @@ -1425,7 +1425,7 @@ read_log_rev_or_packfile(fs_t *fs, /* get all entries for the current block */ SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, fs->fs, rev_file, base, offset, INDEX_BLOCK_SIZE, - iterpool)); + iterpool, iterpool)); /* process all entries (and later continue with the next block) */ for (i = 0; i < entries->nelts; ++i)