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 2015/10/04 15:30:18 UTC
svn commit: r1706676 -
/subversion/trunk/subversion/libsvn_fs_fs/transaction.c
Author: stefan2
Date: Sun Oct 4 13:30:18 2015
New Revision: 1706676
URL: http://svn.apache.org/viewvc?rev=1706676&view=rev
Log:
Avoid an unnecessary directory representation parser run during the early
stages of a FSFS txn.
* subversion/libsvn_fs_fs/transaction.c
(svn_fs_fs__set_entry): After storing the original dir content in the txn
as the starting point, write it to the in-txn dir
cache as well.
Modified:
subversion/trunk/subversion/libsvn_fs_fs/transaction.c
Modified: subversion/trunk/subversion/libsvn_fs_fs/transaction.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/transaction.c?rev=1706676&r1=1706675&r2=1706676&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/transaction.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/transaction.c Sun Oct 4 13:30:18 2015
@@ -1549,8 +1549,6 @@ svn_fs_fs__set_entry(svn_fs_t *fs,
out = svn_stream_from_aprfile2(file, TRUE, pool);
SVN_ERR(unparse_dir_entries(entries, out, subpool));
- svn_pool_clear(subpool);
-
/* Mark the node-rev's data rep as mutable. */
rep = apr_pcalloc(pool, sizeof(*rep));
rep->revision = SVN_INVALID_REVNUM;
@@ -1559,6 +1557,30 @@ svn_fs_fs__set_entry(svn_fs_t *fs,
parent_noderev->data_rep = rep;
SVN_ERR(svn_fs_fs__put_node_revision(fs, parent_noderev->id,
parent_noderev, FALSE, pool));
+
+ /* Immediately populate the txn dir cache to avoid re-reading
+ * the file we just wrote. */
+ if (ffd->txn_dir_cache)
+ {
+ const char *key
+ = svn_fs_fs__id_unparse(parent_noderev->id, subpool)->data;
+ svn_fs_fs__dir_data_t dir_data;
+ svn_filesize_t filesize;
+
+ /* Flush APR buffers. */
+ SVN_ERR(svn_io_file_flush(file, subpool));
+
+ /* Obtain final file size to update txn_dir_cache. */
+ SVN_ERR(svn_io_file_size_get(&filesize, file, subpool));
+
+ /* Store in the cache. */
+ dir_data.entries = entries;
+ dir_data.txn_filesize = filesize;
+ SVN_ERR(svn_cache__set(ffd->txn_dir_cache, key, &dir_data,
+ subpool));
+ }
+
+ svn_pool_clear(subpool);
}
else
{