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