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/10/19 22:09:38 UTC
svn commit: r1533816 - in
/subversion/branches/log-addressing/subversion/libsvn_fs_fs: cached_data.c
index.c pack.c recovery.c revprops.c verify.c
Author: stefan2
Date: Sat Oct 19 20:09:38 2013
New Revision: 1533816
URL: http://svn.apache.org/r1533816
Log:
On the log-addressing branch:
Use / clean iterpools consistent with our standard pool usage pattern.
* subversion/libsvn_fs_fs/cached_data.c
(block_read): clean iterpool at loop start
* subversion/libsvn_fs_fs/index.c
(svn_fs_fs__l2p_index_create,
prefetch_l2p_pages,
l2p_index_lookup,
svn_fs_fs__p2l_index_create,
p2l_index_lookup): ditto
* subversion/libsvn_fs_fs/recovery.c
(recover_get_largest_revision): same here, ...
* subversion/libsvn_fs_fs/revprops.c
(svn_fs_fs__upgrade_pack_revprops,
parse_packed_revprops,
read_pack_revprop,
switch_to_new_revprop,
serialize_revprops_header,
svn_fs_fs__delete_revprops_shard): ... here, ...
* subversion/libsvn_fs_fs/verify.c
(compare_l2p_to_p2l_index,
compare_p2l_to_l2p_index,
compare_p2l_to_rev,
verify_index_consistency): ... here, ...
* subversion/libsvn_fs_fs/pack.c
(pack_range,
append_revision,
pack_log_addressed): ... and here
(store_items,
copy_reps_from_temp): clean iterpool after initial skip check
Modified:
subversion/branches/log-addressing/subversion/libsvn_fs_fs/cached_data.c
subversion/branches/log-addressing/subversion/libsvn_fs_fs/index.c
subversion/branches/log-addressing/subversion/libsvn_fs_fs/pack.c
subversion/branches/log-addressing/subversion/libsvn_fs_fs/recovery.c
subversion/branches/log-addressing/subversion/libsvn_fs_fs/revprops.c
subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c
Modified: subversion/branches/log-addressing/subversion/libsvn_fs_fs/cached_data.c
URL: http://svn.apache.org/viewvc/subversion/branches/log-addressing/subversion/libsvn_fs_fs/cached_data.c?rev=1533816&r1=1533815&r2=1533816&view=diff
==============================================================================
--- subversion/branches/log-addressing/subversion/libsvn_fs_fs/cached_data.c (original)
+++ subversion/branches/log-addressing/subversion/libsvn_fs_fs/cached_data.c Sat Oct 19 20:09:38 2013
@@ -2632,6 +2632,8 @@ block_read(void **result,
svn_boolean_t is_result;
apr_pool_t *pool;
+ svn_pool_clear(iterpool);
+
svn_fs_fs__p2l_entry_t* entry
= &APR_ARRAY_IDX(entries, i, svn_fs_fs__p2l_entry_t);
@@ -2692,8 +2694,6 @@ block_read(void **result,
offset = entry->offset + entry->size;
if (offset > block_start + ffd->block_size)
++run_count;
-
- svn_pool_clear(iterpool);
}
}
Modified: subversion/branches/log-addressing/subversion/libsvn_fs_fs/index.c
URL: http://svn.apache.org/viewvc/subversion/branches/log-addressing/subversion/libsvn_fs_fs/index.c?rev=1533816&r1=1533815&r2=1533816&view=diff
==============================================================================
--- subversion/branches/log-addressing/subversion/libsvn_fs_fs/index.c (original)
+++ subversion/branches/log-addressing/subversion/libsvn_fs_fs/index.c Sat Oct 19 20:09:38 2013
@@ -597,16 +597,16 @@ svn_fs_fs__l2p_index_create(svn_fs_t *fs
{
/* 1 page with up to 8k entries */
apr_size_t last_buffer_size = svn_spillbuf__get_size(buffer);
- entry_count = MIN(entries->nelts - i, ffd->l2p_page_size);
+ svn_pool_clear(iterpool);
+
+ entry_count = MIN(entries->nelts - i, ffd->l2p_page_size);
SVN_ERR(encode_l2p_page(entries, i, i + entry_count,
buffer, iterpool));
APR_ARRAY_PUSH(entry_counts, apr_uint64_t) = entry_count;
APR_ARRAY_PUSH(page_sizes, apr_uint64_t)
= svn_spillbuf__get_size(buffer) - last_buffer_size;
-
- svn_pool_clear(iterpool);
}
apr_array_clear(entries);
@@ -1121,6 +1121,8 @@ prefetch_l2p_pages(svn_boolean_t *end,
{
l2p_page_table_entry_t *entry
= &APR_ARRAY_IDX(pages, i, l2p_page_table_entry_t);
+ svn_pool_clear(iterpool);
+
if (i == exlcuded_page_no)
continue;
@@ -1147,8 +1149,6 @@ prefetch_l2p_pages(svn_boolean_t *end,
SVN_ERR(svn_cache__set(ffd->l2p_page_cache, &key, page,
iterpool));
}
-
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);
@@ -1290,12 +1290,13 @@ l2p_index_lookup(apr_off_t *offset,
int excluded_page_no = prefetch_revision == revision
? info_baton.page_no
: -1;
+ svn_pool_clear(iterpool);
+
SVN_ERR(prefetch_l2p_pages(&end, fs, rev_file,
info_baton.first_revision,
prefetch_revision, pages,
excluded_page_no, min_offset,
max_offset, iterpool));
- svn_pool_clear(iterpool);
}
end = FALSE;
@@ -1303,11 +1304,12 @@ l2p_index_lookup(apr_off_t *offset,
prefetch_revision >= info_baton.first_revision && !end;
--prefetch_revision)
{
+ svn_pool_clear(iterpool);
+
SVN_ERR(prefetch_l2p_pages(&end, fs, rev_file,
info_baton.first_revision,
prefetch_revision, pages, -1,
min_offset, max_offset, iterpool));
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);
@@ -1584,6 +1586,8 @@ svn_fs_fs__p2l_index_create(svn_fs_t *fs
apr_uint64_t compound;
apr_int64_t rev_diff, compound_diff;
+ svn_pool_clear(iter_pool);
+
/* (attempt to) read the next entry from the source */
SVN_ERR(svn_io_file_read_full2(proto_index, &entry, sizeof(entry),
&read, &eof, iter_pool));
@@ -1653,10 +1657,8 @@ svn_fs_fs__p2l_index_create(svn_fs_t *fs
SVN_ERR(svn_spillbuf__write(buffer, (const char *)encoded,
encode_uint(encoded, entry.fnv1_checksum),
iter_pool));
-
- last_entry_end = entry_end;
- svn_pool_clear(iter_pool);
+ last_entry_end = entry_end;
}
/* store length of last table */
@@ -2210,11 +2212,12 @@ p2l_index_lookup(apr_array_header_t **en
prefetch_info.offset = original_page_start;
while (prefetch_info.offset >= prefetch_info.page_size && !end)
{
+ svn_pool_clear(iterpool);
+
prefetch_info.offset -= prefetch_info.page_size;
SVN_ERR(prefetch_p2l_page(&end, &leaking_bucket, fs, rev_file,
&prefetch_info, min_offset,
iterpool));
- svn_pool_clear(iterpool);
}
/* fetch page from disk and put it into the cache */
@@ -2236,11 +2239,12 @@ p2l_index_lookup(apr_array_header_t **en
&& prefetch_info.page_no + 1 < prefetch_info.page_count
&& !end)
{
+ svn_pool_clear(iterpool);
+
prefetch_info.offset += prefetch_info.page_size;
SVN_ERR(prefetch_p2l_page(&end, &leaking_bucket, fs, rev_file,
&prefetch_info, min_offset,
iterpool));
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);
Modified: subversion/branches/log-addressing/subversion/libsvn_fs_fs/pack.c
URL: http://svn.apache.org/viewvc/subversion/branches/log-addressing/subversion/libsvn_fs_fs/pack.c?rev=1533816&r1=1533815&r2=1533816&view=diff
==============================================================================
--- subversion/branches/log-addressing/subversion/libsvn_fs_fs/pack.c (original)
+++ subversion/branches/log-addressing/subversion/libsvn_fs_fs/pack.c Sat Oct 19 20:09:38 2013
@@ -874,6 +874,8 @@ store_items(pack_context_t *context,
if (entry->type == SVN_FS_FS__ITEM_TYPE_UNUSED)
continue;
+ svn_pool_clear(iterpool);
+
/* If the next item does not fit into the current block, auto-pad it.
Take special care of textual noderevs since their parsers may
prefetch up to 80 bytes and we don't want them to cross block
@@ -898,7 +900,6 @@ store_items(pack_context_t *context,
(context->proto_p2l_index, entry, iterpool));
APR_ARRAY_PUSH(context->reps, svn_fs_fs__p2l_entry_t *) = entry;
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);
@@ -1034,6 +1035,8 @@ copy_reps_from_temp(pack_context_t *cont
if (APR_ARRAY_IDX(path_order, i, path_order_t *) == NULL)
continue;
+ svn_pool_clear(iterpool);
+
/* Collect reps to combine and all noderevs referencing them */
SVN_ERR(select_reps(context, i, node_parts, rep_parts));
@@ -1044,8 +1047,6 @@ copy_reps_from_temp(pack_context_t *cont
/* processed all items */
apr_array_clear(node_parts);
apr_array_clear(rep_parts);
-
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);
@@ -1145,12 +1146,14 @@ pack_range(pack_context_t *context,
apr_off_t offset = 0;
apr_finfo_t finfo;
svn_fs_fs__revision_file_t *rev_file;
+ const char *path;
+
+ svn_pool_clear(revpool);
/* Get the size of the file. */
- const char *path = svn_dirent_join(context->shard_dir,
- apr_psprintf(revpool, "%ld",
- revision),
- revpool);
+ path = svn_dirent_join(context->shard_dir,
+ apr_psprintf(revpool, "%ld", revision),
+ revpool);
SVN_ERR(svn_io_stat(&finfo, path, APR_FINFO_SIZE, revpool));
SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, context->fs,
revision, revpool));
@@ -1174,6 +1177,8 @@ pack_range(pack_context_t *context,
svn_fs_fs__p2l_entry_t *entry
= &APR_ARRAY_IDX(entries, i, svn_fs_fs__p2l_entry_t);
+ svn_pool_clear(iterpool);
+
/* skip first entry if that was duplicated due crossing a
cluster boundary */
if (offset > entry->offset)
@@ -1220,11 +1225,7 @@ pack_range(pack_context_t *context,
if (context->cancel_func)
SVN_ERR(context->cancel_func(context->cancel_baton));
-
- svn_pool_clear(iterpool);
}
-
- svn_pool_clear(revpool);
}
svn_pool_destroy(iterpool);
@@ -1296,6 +1297,8 @@ append_revision(pack_context_t *context,
/* read one cluster */
int i;
apr_array_header_t *entries;
+
+ svn_pool_clear(iterpool);
SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, context->fs, rev_file,
context->start_rev, offset,
iterpool));
@@ -1323,8 +1326,6 @@ append_revision(pack_context_t *context,
(context->proto_p2l_index, entry, iterpool));
}
}
-
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);
@@ -1386,6 +1387,8 @@ pack_log_addressed(svn_fs_t *fs,
}
else
{
+ svn_pool_clear(iterpool);
+
/* some unpacked revisions before this one? */
if (context.start_rev < context.end_rev)
{
@@ -1407,8 +1410,6 @@ pack_log_addressed(svn_fs_t *fs,
}
else
item_count += (apr_size_t)APR_ARRAY_IDX(max_ids, i, apr_uint64_t);
-
- svn_pool_clear(iterpool);
}
/* non-empty revision range at the end? */
Modified: subversion/branches/log-addressing/subversion/libsvn_fs_fs/recovery.c
URL: http://svn.apache.org/viewvc/subversion/branches/log-addressing/subversion/libsvn_fs_fs/recovery.c?rev=1533816&r1=1533815&r2=1533816&view=diff
==============================================================================
--- subversion/branches/log-addressing/subversion/libsvn_fs_fs/recovery.c (original)
+++ subversion/branches/log-addressing/subversion/libsvn_fs_fs/recovery.c Sat Oct 19 20:09:38 2013
@@ -55,10 +55,9 @@ recover_get_largest_revision(svn_fs_t *f
{
svn_error_t *err;
svn_fs_fs__revision_file_t *file;
-
- err = svn_fs_fs__open_pack_or_rev_file(&file, fs, right, iterpool);
svn_pool_clear(iterpool);
+ err = svn_fs_fs__open_pack_or_rev_file(&file, fs, right, iterpool);
if (err && err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION)
{
svn_error_clear(err);
@@ -79,10 +78,9 @@ recover_get_largest_revision(svn_fs_t *f
svn_revnum_t probe = left + ((right - left) / 2);
svn_error_t *err;
svn_fs_fs__revision_file_t *file;
-
- err = svn_fs_fs__open_pack_or_rev_file(&file, fs, probe, iterpool);
svn_pool_clear(iterpool);
+ err = svn_fs_fs__open_pack_or_rev_file(&file, fs, probe, iterpool);
if (err && err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION)
{
svn_error_clear(err);
Modified: subversion/branches/log-addressing/subversion/libsvn_fs_fs/revprops.c
URL: http://svn.apache.org/viewvc/subversion/branches/log-addressing/subversion/libsvn_fs_fs/revprops.c?rev=1533816&r1=1533815&r2=1533816&view=diff
==============================================================================
--- subversion/branches/log-addressing/subversion/libsvn_fs_fs/revprops.c (original)
+++ subversion/branches/log-addressing/subversion/libsvn_fs_fs/revprops.c Sat Oct 19 20:09:38 2013
@@ -72,6 +72,8 @@ svn_fs_fs__upgrade_pack_revprops(svn_fs_
/* first, pack all revprops shards to match the packed revision shards */
for (shard = 0; shard < first_unpacked_shard; ++shard)
{
+ svn_pool_clear(iterpool);
+
revprops_pack_file_dir = svn_dirent_join(revsprops_dir,
apr_psprintf(iterpool,
"%" APR_INT64_T_FMT PATH_EXT_PACKED_SHARD,
@@ -91,8 +93,6 @@ svn_fs_fs__upgrade_pack_revprops(svn_fs_
if (notify_func)
SVN_ERR(notify_func(notify_baton, shard,
svn_fs_upgrade_pack_revprops, iterpool));
-
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);
@@ -121,6 +121,8 @@ svn_fs_fs__upgrade_cleanup_pack_revprops
/* delete the non-packed revprops shards afterwards */
for (shard = 0; shard < first_unpacked_shard; ++shard)
{
+ svn_pool_clear(iterpool);
+
revprops_shard_path = svn_dirent_join(revsprops_dir,
apr_psprintf(iterpool, "%" APR_INT64_T_FMT, shard),
iterpool);
@@ -132,8 +134,6 @@ svn_fs_fs__upgrade_cleanup_pack_revprops
if (notify_func)
SVN_ERR(notify_func(notify_baton, shard,
svn_fs_upgrade_cleanup_revprops, iterpool));
-
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);
@@ -819,6 +819,7 @@ parse_packed_revprops(svn_fs_t *fs,
svn_string_t serialized;
apr_hash_t *properties;
svn_revnum_t revision = (svn_revnum_t)(first_rev + i);
+ svn_pool_clear(iterpool);
/* read & check the serialized size */
SVN_ERR(svn_fs_fs__read_number_from_stream(&size, NULL, stream,
@@ -854,8 +855,6 @@ parse_packed_revprops(svn_fs_t *fs,
revprops->total_size += serialized.len;
offset += serialized.len;
-
- svn_pool_clear(iterpool);
}
return SVN_NO_ERROR;
@@ -898,6 +897,7 @@ read_pack_revprop(packed_revprops_t **re
++i)
{
const char *file_path;
+ svn_pool_clear(iterpool);
/* there might have been concurrent writes.
* Re-read the manifest and the pack file.
@@ -919,8 +919,6 @@ read_pack_revprop(packed_revprops_t **re
*/
if (missing && has_revprop_cache(fs, pool))
SVN_ERR(read_revprop_generation(&result->generation, fs, pool));
-
- svn_pool_clear(iterpool);
}
/* the file content should be available now */
@@ -1081,8 +1079,9 @@ switch_to_new_revprop(svn_fs_t *fs,
for (i = 0; i < files_to_delete->nelts; ++i)
{
const char *path = APR_ARRAY_IDX(files_to_delete, i, const char*);
- SVN_ERR(svn_io_remove_file2(path, TRUE, iterpool));
+
svn_pool_clear(iterpool);
+ SVN_ERR(svn_io_remove_file2(path, TRUE, iterpool));
}
svn_pool_destroy(iterpool);
@@ -1121,7 +1120,7 @@ serialize_revprops_header(svn_stream_t *
/* the double newline char indicates the end of the header */
SVN_ERR(svn_stream_printf(stream, iterpool, "\n"));
- svn_pool_clear(iterpool);
+## svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
@@ -1739,14 +1738,16 @@ svn_fs_fs__delete_revprops_shard(const c
/* delete all files except the one for revision 0 */
for (i = 1; i < max_files_per_dir; ++i)
{
- const char *path = svn_dirent_join(shard_path,
- apr_psprintf(iterpool, "%d", i),
- iterpool);
+ const char *path;
+ svn_pool_clear(iterpool);
+
+ path = svn_dirent_join(shard_path,
+ apr_psprintf(iterpool, "%d", i),
+ iterpool);
if (cancel_func)
SVN_ERR((*cancel_func)(cancel_baton));
SVN_ERR(svn_io_remove_file2(path, TRUE, iterpool));
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);
Modified: subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c
URL: http://svn.apache.org/viewvc/subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c?rev=1533816&r1=1533815&r2=1533816&view=diff
==============================================================================
--- subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c (original)
+++ subversion/branches/log-addressing/subversion/libsvn_fs_fs/verify.c Sat Oct 19 20:09:38 2013
@@ -194,6 +194,7 @@ compare_l2p_to_p2l_index(svn_fs_t *fs,
{
apr_off_t offset;
svn_fs_fs__p2l_entry_t *p2l_entry;
+ svn_pool_clear(iterpool);
/* get L2P entry. Ignore unused entries. */
SVN_ERR(svn_fs_fs__item_offset(&offset, fs, &rev_file, revision,
@@ -224,8 +225,6 @@ compare_l2p_to_p2l_index(svn_fs_t *fs,
p2l_entry->item.revision,
(long)p2l_entry->item.number,
revision, (long)k);
-
- svn_pool_clear(iterpool);
}
if (cancel_func)
@@ -273,6 +272,8 @@ compare_p2l_to_l2p_index(svn_fs_t *fs,
svn_fs_fs__p2l_entry_t *last_entry;
int i;
+ svn_pool_clear(iterpool);
+
/* get all entries for the current block */
SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, fs, &rev_file, start,
offset, iterpool));
@@ -287,7 +288,7 @@ compare_p2l_to_l2p_index(svn_fs_t *fs,
last_entry
= &APR_ARRAY_IDX(entries, entries->nelts-1, svn_fs_fs__p2l_entry_t);
offset = last_entry->offset + last_entry->size;
-
+
for (i = 0; i < entries->nelts; ++i)
{
svn_fs_fs__p2l_entry_t *entry
@@ -314,8 +315,6 @@ compare_p2l_to_l2p_index(svn_fs_t *fs,
}
}
- svn_pool_clear(iterpool);
-
if (cancel_func)
SVN_ERR(cancel_func(cancel_baton));
}
@@ -519,6 +518,8 @@ compare_p2l_to_rev(svn_fs_t *fs,
apr_array_header_t *entries;
int i;
+ svn_pool_clear(iterpool);
+
/* get all entries for the current block */
SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, fs, rev_file, start,
offset, iterpool));
@@ -569,8 +570,6 @@ compare_p2l_to_rev(svn_fs_t *fs,
offset += entry->size;
}
- svn_pool_clear(iterpool);
-
if (cancel_func)
SVN_ERR(cancel_func(cancel_baton));
}
@@ -627,6 +626,8 @@ verify_index_consistency(svn_fs_t *fs,
pack_start = packed_base_rev(fs, revision);
pack_end = pack_start + count;
+ svn_pool_clear(iterpool);
+
if (notify_func && (pack_start % ffd->max_files_per_dir == 0))
notify_func(pack_start, notify_baton, iterpool);
@@ -652,8 +653,6 @@ verify_index_consistency(svn_fs_t *fs,
{
SVN_ERR(err);
}
-
- svn_pool_clear(iterpool);
}
svn_pool_destroy(iterpool);