You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2015/05/27 13:09:59 UTC

svn commit: r1681974 - /subversion/trunk/subversion/libsvn_fs_fs/cached_data.c

Author: ivan
Date: Wed May 27 11:09:58 2015
New Revision: 1681974

URL: http://svn.apache.org/r1681974
Log:
Avoid double cache lookup in FSFS in some cases.

Discussion: http://svn.haxx.se/dev/archive-2015-05/0172.shtml

* subversion/libsvn_fs_fs/cached_data.c
  (svn_fs_fs__rep_contents_dir_entry): Use get_dir_contents() function
   to read directory entries on cache miss instead of
   svn_fs_fs__rep_contents_dir() because it performs cache lookup before
   reading data from disk.

Modified:
    subversion/trunk/subversion/libsvn_fs_fs/cached_data.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=1681974&r1=1681973&r2=1681974&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/cached_data.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/cached_data.c Wed May 27 11:09:58 2015
@@ -2751,17 +2751,20 @@ svn_fs_fs__rep_contents_dir_entry(svn_fs
   /* fetch data from disk if we did not find it in the cache */
   if (! found)
     {
-      apr_array_header_t *entries;
       svn_fs_dirent_t *entry;
       svn_fs_dirent_t *entry_copy = NULL;
+      svn_fs_fs__dir_data_t dir;
 
-      /* read the dir from the file system. It will probably be put it
-         into the cache for faster lookup in future calls. */
-      SVN_ERR(svn_fs_fs__rep_contents_dir(&entries, fs, noderev,
-                                          scratch_pool, scratch_pool));
+      /* Read in the directory contents. */
+      SVN_ERR(get_dir_contents(&dir, fs, noderev, scratch_pool,
+                               scratch_pool));
+
+      /* Update the cache, if we are to use one. */
+      if (cache)
+        SVN_ERR(svn_cache__set(cache, key, &dir, scratch_pool));
 
       /* find desired entry and return a copy in POOL, if found */
-      entry = svn_fs_fs__find_dir_entry(entries, name, NULL);
+      entry = svn_fs_fs__find_dir_entry(dir.entries, name, NULL);
       if (entry)
         {
           entry_copy = apr_palloc(result_pool, sizeof(*entry_copy));