Bert Huijben wrote:
>> Author: stefan2
>> URL: http://svn.apache.org/r1586947
>> Log:
>> Improve MT scalability of the FSFS DAG traversal code.
It seems the main problem here is simply that this log message summary line
gives a false impression about the magnitude of this particular change.
>> Error objects are a very expensive way to control the control flow
>> as they carry their own pools, created from a thread-safe root pool.
>>
>> dag_open should not return an error to open_path if the dirent
>> cannot be found, pass a NULL node back instead. This eliminates
>> about 50% of all transitional error objects during log-y operations.
I totally support this particular kind of change. It's simply good interface
design.
p.s. A minor commenting nit...
>> Modified: subversion/trunk/subversion/libsvn_fs_fs/tree.c
>> ==========================================================
>> @@ -1047,17 +1046,15 @@ open_path(parent_path_t **parent_path_p,
>> if (cached_node)
>> child = cached_node;
>> else
>> - err = svn_fs_fs__dag_open(&child, here, entry, pool, iterpool);
>> + SVN_ERR(svn_fs_fs__dag_open(&child, here, entry, pool,
>>iterpool));
>>
>> /* "file not found" requires special handling. */
That comment there is now redundant ...
>> - if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
>> + if (child == NULL)
>> {
>> @@ -1073,9 +1070,6 @@ open_path(parent_path_t **parent_path_p,
>> }
>> }
>>
>> - /* Other errors we return normally. */
... as this one has now gone away.
>> - SVN_ERR(err);
>> -
- Julian