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/12/15 11:14:27 UTC
svn commit: r1645609 - in
/subversion/branches/fsx-id/subversion/libsvn_fs_x: cached_data.c
cached_data.h dag.c transaction.c tree.c
Author: stefan2
Date: Mon Dec 15 10:14:27 2014
New Revision: 1645609
URL: http://svn.apache.org/r1645609
Log:
On the fsx-id branch: Use noderev IDs to read noderevs at the
caching layer. Update sub-functions and callers.
* subversion/libsvn_fs_x/cached_data.h
(svn_fs_x__get_node_revision): Switch ID type.
* subversion/libsvn_fs_x/cached_data.c
(err_dangling_id,
get_node_revision_body,
svn_fs_x__get_node_revision): Switch ID parameter type and update
implementation.
(svn_fs_x__get_mergeinfo_count): Update caller.
* subversion/libsvn_fs_x/dag.c
(get_node_revision): Same.
* subversion/libsvn_fs_x/transaction.c
(create_new_txn_noderev_from_rev,
svn_fs_x__get_txn,
shards_spanned,
choose_delta_base,
validate_root_noderev,
write_final_rev,
svn_fs_x__delete_node_revision): Same.
* subversion/libsvn_fs_x/tree.c
(merge): Same.
Modified:
subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c
subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h
subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c
subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c
subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c
Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c?rev=1645609&r1=1645608&r2=1645609&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c Mon Dec 15 10:14:27 2014
@@ -253,9 +253,10 @@ open_and_seek_representation(svn_fs_x__r
static svn_error_t *
-err_dangling_id(svn_fs_t *fs, const svn_fs_id_t *id)
+err_dangling_id(svn_fs_t *fs,
+ const svn_fs_x__noderev_id_t *id)
{
- svn_string_t *id_str = svn_fs_x__id_unparse(id, fs->pool);
+ svn_string_t *id_str = svn_fs_x__noderev_id_unparse(id, fs->pool);
return svn_error_createf
(SVN_ERR_FS_ID_NOT_FOUND, 0,
_("Reference to non-existent node '%s' in filesystem '%s'"),
@@ -269,23 +270,22 @@ err_dangling_id(svn_fs_t *fs, const svn_
static svn_error_t *
get_node_revision_body(node_revision_t **noderev_p,
svn_fs_t *fs,
- const svn_fs_id_t *id,
+ const svn_fs_x__noderev_id_t *id,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_error_t *err;
svn_boolean_t is_cached = FALSE;
fs_x_data_t *ffd = fs->fsap_data;
- const svn_fs_x__noderev_id_t *noderev_id = svn_fs_x__id_noderev_id(id);
- if (svn_fs_x__id_is_txn(id))
+ if (svn_fs_x__is_txn(id->change_set))
{
apr_file_t *file;
/* This is a transaction node-rev. Its storage logic is very
different from that of rev / pack files. */
err = svn_io_file_open(&file,
- svn_fs_x__path_txn_node_rev(fs, noderev_id,
+ svn_fs_x__path_txn_node_rev(fs, id,
scratch_pool),
APR_READ | APR_BUFFERED, APR_OS_DEFAULT,
scratch_pool);
@@ -311,7 +311,7 @@ get_node_revision_body(node_revision_t *
svn_fs_x__revision_file_t *revision_file;
/* noderevs in rev / pack files can be cached */
- svn_revnum_t revision = svn_fs_x__get_revnum(noderev_id->change_set);
+ svn_revnum_t revision = svn_fs_x__get_revnum(id->change_set);
pair_cache_key_t key;
SVN_ERR(svn_fs_x__open_pack_or_rev_file(&revision_file, fs, revision,
@@ -324,7 +324,7 @@ get_node_revision_body(node_revision_t *
apr_off_t offset;
apr_uint32_t sub_item;
SVN_ERR(svn_fs_x__item_offset(&offset, &sub_item, fs, revision_file,
- noderev_id, scratch_pool));
+ id, scratch_pool));
key.revision = svn_fs_x__packed_base_rev(fs, revision);
key.second = offset;
@@ -337,7 +337,7 @@ get_node_revision_body(node_revision_t *
}
key.revision = revision;
- key.second = noderev_id->number;
+ key.second = id->number;
/* Not found or not applicable. Try a noderev cache lookup.
* If that succeeds, we are done here. */
@@ -353,13 +353,13 @@ get_node_revision_body(node_revision_t *
}
/* read the data from disk */
- SVN_ERR(open_and_seek_revision(&revision_file, fs, noderev_id,
+ SVN_ERR(open_and_seek_revision(&revision_file, fs, id,
scratch_pool));
/* block-read will parse the whole block and will also return
the one noderev that we need right now. */
SVN_ERR(block_read((void **)noderev_p, fs,
- noderev_id,
+ id,
revision_file,
result_pool,
scratch_pool));
@@ -372,23 +372,22 @@ get_node_revision_body(node_revision_t *
svn_error_t *
svn_fs_x__get_node_revision(node_revision_t **noderev_p,
svn_fs_t *fs,
- const svn_fs_id_t *id,
+ const svn_fs_x__noderev_id_t *id,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- const svn_fs_x__id_part_t *noderev_id = svn_fs_x__id_noderev_id(id);
-
svn_error_t *err = get_node_revision_body(noderev_p, fs, id,
result_pool, scratch_pool);
if (err && err->apr_err == SVN_ERR_FS_CORRUPT)
{
- svn_string_t *id_string = svn_fs_x__id_unparse(id, scratch_pool);
+ svn_string_t *id_string = svn_fs_x__noderev_id_unparse(id,
+ scratch_pool);
return svn_error_createf(SVN_ERR_FS_CORRUPT, err,
"Corrupt node-revision '%s'",
id_string->data);
}
- SVN_ERR(dgb__log_access(fs, noderev_id, *noderev_p,
+ SVN_ERR(dgb__log_access(fs, id, *noderev_p,
SVN_FS_X__ITEM_TYPE_NODEREV, scratch_pool));
return svn_error_trace(err);
@@ -402,6 +401,7 @@ svn_fs_x__get_mergeinfo_count(apr_int64_
apr_pool_t *pool)
{
node_revision_t *noderev;
+ const svn_fs_x__id_part_t *noderev_id = svn_fs_x__id_noderev_id(id);
/* If we want a full acccess log, we need to provide full data and
cannot take shortcuts here. */
@@ -411,7 +411,6 @@ svn_fs_x__get_mergeinfo_count(apr_int64_
if (! svn_fs_x__id_is_txn(id))
{
/* noderevs in rev / pack files can be cached */
- const svn_fs_x__id_part_t *noderev_id = svn_fs_x__id_noderev_id(id);
fs_x_data_t *ffd = fs->fsap_data;
svn_revnum_t revision = svn_fs_x__get_revnum(noderev_id->change_set);
@@ -443,7 +442,7 @@ svn_fs_x__get_mergeinfo_count(apr_int64_
#endif
/* fallback to the naive implementation handling all edge cases */
- SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs, id, pool, pool));
+ SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs, noderev_id, pool, pool));
*count = noderev->mergeinfo_count;
return SVN_NO_ERROR;
Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h?rev=1645609&r1=1645608&r2=1645609&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h Mon Dec 15 10:14:27 2014
@@ -36,7 +36,7 @@
svn_error_t *
svn_fs_x__get_node_revision(node_revision_t **noderev_p,
svn_fs_t *fs,
- const svn_fs_id_t *id,
+ const svn_fs_x__noderev_id_t *id,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c?rev=1645609&r1=1645608&r2=1645609&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c Mon Dec 15 10:14:27 2014
@@ -160,10 +160,11 @@ get_node_revision(node_revision_t **node
if (! node->node_revision)
{
node_revision_t *noderev;
+ const svn_fs_x__id_part_t *noderev_id = svn_fs_x__id_noderev_id(node->id);
apr_pool_t *scratch_pool = svn_pool_create(node->node_pool);
SVN_ERR(svn_fs_x__get_node_revision(&noderev, node->fs,
- node->id, node->node_pool,
+ noderev_id, node->node_pool,
scratch_pool));
node->node_revision = noderev;
svn_pool_destroy(scratch_pool);
Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c?rev=1645609&r1=1645608&r2=1645609&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c Mon Dec 15 10:14:27 2014
@@ -1158,8 +1158,9 @@ create_new_txn_noderev_from_rev(svn_fs_t
apr_pool_t *pool)
{
node_revision_t *noderev;
+ const svn_fs_x__id_part_t *src_id = svn_fs_x__id_noderev_id(src);
- SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs, src, pool, pool));
+ SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs, src_id, pool, pool));
/* This must be a root node. */
SVN_ERR_ASSERT( svn_fs_x__id_node_id(noderev->id)->number == 0
@@ -1423,7 +1424,9 @@ svn_fs_x__get_txn(transaction_t **txn_p,
SVN_ERR(get_txn_proplist(txn->proplist, fs, txn_id, pool));
root_id = svn_fs_x__id_txn_create_root(txn_id, pool);
- SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs, root_id, pool, pool));
+ SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs,
+ svn_fs_x__id_noderev_id(root_id),
+ pool, pool));
txn->root_id = svn_fs_x__id_copy(noderev->id, pool);
txn->base_id = svn_fs_x__id_copy(noderev->predecessor_id, pool);
@@ -1913,10 +1916,12 @@ shards_spanned(int *spanned,
iterpool = svn_pool_create(pool);
while (walk-- && noderev->predecessor_count)
{
+ const svn_fs_x__noderev_id_t *predecessor_id
+ = svn_fs_x__id_noderev_id(noderev->predecessor_id);
+
svn_pool_clear(iterpool);
- SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs,
- noderev->predecessor_id, pool,
- iterpool));
+ SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs, predecessor_id,
+ pool, iterpool));
shard = svn_fs_x__id_rev(noderev->id) / shard_size;
if (shard != last_shard)
{
@@ -2001,9 +2006,11 @@ choose_delta_base(representation_t **rep
iterpool = svn_pool_create(pool);
while ((count++) < noderev->predecessor_count)
{
+ const svn_fs_x__noderev_id_t *predecessor_id
+ = svn_fs_x__id_noderev_id(noderev->predecessor_id);
+
svn_pool_clear(iterpool);
- SVN_ERR(svn_fs_x__get_node_revision(&base, fs,
- base->predecessor_id, pool,
+ SVN_ERR(svn_fs_x__get_node_revision(&base, fs, predecessor_id, pool,
iterpool));
}
svn_pool_destroy(iterpool);
@@ -2739,7 +2746,8 @@ validate_root_noderev(svn_fs_t *fs,
/* Get /@HEAD's noderev. */
SVN_ERR(svn_fs_x__revision_root(&head_revision, fs, head_revnum, pool));
SVN_ERR(svn_fs_x__node_id(&head_root_id, head_revision, "/", pool));
- SVN_ERR(svn_fs_x__get_node_revision(&head_root_noderev, fs, head_root_id,
+ SVN_ERR(svn_fs_x__get_node_revision(&head_root_noderev, fs,
+ svn_fs_x__id_noderev_id(head_root_id),
pool, pool));
head_predecessor_count = head_root_noderev->predecessor_count;
@@ -2842,7 +2850,9 @@ write_final_rev(const svn_fs_id_t **new_
return SVN_NO_ERROR;
subpool = svn_pool_create(pool);
- SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs, id, pool, subpool));
+ SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs,
+ svn_fs_x__id_noderev_id(id),
+ pool, subpool));
if (noderev->kind == svn_node_dir)
{
@@ -3619,7 +3629,7 @@ svn_fs_x__delete_node_revision(svn_fs_t
node_revision_t *noderev;
const svn_fs_x__noderev_id_t *noderev_id = svn_fs_x__id_noderev_id(id);
- SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs, id, pool, pool));
+ SVN_ERR(svn_fs_x__get_node_revision(&noderev, fs, noderev_id, pool, pool));
/* Delete any mutable property representation. */
if (noderev->prop_rep
Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c?rev=1645609&r1=1645608&r2=1645609&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c Mon Dec 15 10:14:27 2014
@@ -1961,14 +1961,17 @@ merge(svn_stringbuf_t *conflict_p,
/* Get node revisions for our id's. */
scratch_pool = svn_pool_create(pool);
- SVN_ERR(svn_fs_x__get_node_revision(&tgt_nr, fs, target_id, pool,
- scratch_pool));
+ SVN_ERR(svn_fs_x__get_node_revision(&tgt_nr, fs,
+ svn_fs_x__id_noderev_id(target_id),
+ pool, scratch_pool));
svn_pool_clear(scratch_pool);
- SVN_ERR(svn_fs_x__get_node_revision(&anc_nr, fs, ancestor_id, pool,
- scratch_pool));
+ SVN_ERR(svn_fs_x__get_node_revision(&anc_nr, fs,
+ svn_fs_x__id_noderev_id(ancestor_id),
+ pool, scratch_pool));
svn_pool_clear(scratch_pool);
- SVN_ERR(svn_fs_x__get_node_revision(&src_nr, fs, source_id, pool,
- scratch_pool));
+ SVN_ERR(svn_fs_x__get_node_revision(&src_nr, fs,
+ svn_fs_x__id_noderev_id(source_id),
+ pool, scratch_pool));
svn_pool_destroy(scratch_pool);
/* Now compare the prop-keys of the skels. Note that just because