You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Johan Corveleyn <jc...@gmail.com> on 2010/08/18 21:50:31 UTC

Re: svn commit: r986521 - in /subversion/branches/performance/subversion: libsvn_fs_fs/id.c libsvn_fs_fs/temp_serializer.c libsvn_subr/svn_temp_serializer.c

On Wed, Aug 18, 2010 at 1:11 AM,  <st...@apache.org> wrote:
> Author: stefan2
> Date: Tue Aug 17 23:11:13 2010
> New Revision: 986521
>
> URL: http://svn.apache.org/viewvc?rev=986521&view=rev
> Log:
> Change serialized representation of pointers: instead of storing offsets
> relative to the whole buffer, store the offset relative to the (local) structure
> that immediately contains that pointer as an element.
>
> Also, store directory content hashes in lexicographical order of their names.
> This will soon be used to implement sub-entry cache access.
>
> * subversion/libsvn_subr/svn_temp_serializer.c
>  (store_current_end_pointer): store the pointer target as offset relative to the
>   current struct's start offset (instead of the global position in the buffer)
> * subversion/libsvn_fs_fs/id.c
>  (deserialize_id_private, svn_fs_fs__id_deserialize):
>   resolve ptrs local to their containing struct
> * subversion/libsvn_fs_fs/temp_serializer.c
>  (deserialize_svn_string, deserialize_checksum, deserialize_representation,
>   deserialize_dir, svn_fs_fs__noderev_deserialize,
>   svn_fs_fs__deserialize_txdelta_window): dito
>  (hash_data_t, compare_dirent_id_names, serialize_dir):
>   serialize hash entries sorted by the hash key, i.e. the name
>
> Modified:
>    subversion/branches/performance/subversion/libsvn_fs_fs/id.c
>    subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.c
>    subversion/branches/performance/subversion/libsvn_subr/svn_temp_serializer.c

<snip>

> Modified: subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.c
> URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.c?rev=986521&r1=986520&r2=986521&view=diff
> ==============================================================================
> --- subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.c (original)
> +++ subversion/branches/performance/subversion/libsvn_fs_fs/temp_serializer.c Tue Aug 17 23:11:13 2010

<snip>

> @@ -265,14 +271,20 @@ serialize_dir(apr_hash_t *entries, apr_p
>
>   /* calculate sizes */
>   apr_size_t count = apr_hash_count(entries);
> -  apr_size_t entries_len = sizeof(svn_fs_dirent_t[count]);
> +  apr_size_t entries_len = sizeof(svn_fs_dirent_t*[count]);
>
>   /* copy the hash entries to an auxilliary struct of known layout */
>   hash_data.count = count;
>   hash_data.entries = apr_palloc(pool, entries_len);
>
>   for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi), ++i)
> -    hash_data.entries[i] = *(svn_fs_dirent_t *)svn__apr_hash_index_val(hi);
> +    hash_data.entries[i] = svn__apr_hash_index_val(hi);
> +
> +  /* sort entry index by ID name */
> +  qsort(hash_data.entries,
> +        count,
> +        sizeof(*hash_data.entries),
> +        (comparison_fn_t)compare_dirent_id_names);

This change caused this compilation error for me (on Windows, with
Visual C Express 2008):

..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C2065:
'comparison_fn_t' : undeclared identifier
..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C4047:
'function' : 'int (__cdecl *)(const void *,const void *)' differs in
levels of indirection from 'int'
..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C4024:
'qsort' : different types for formal and actual parameter 4
..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C2146:
syntax error : missing ')' before identifier 'compare_dirent_id_names'
..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C2059:
syntax error : ')'

Unless I missed something or did something wrong (had to resolve some
merge conflicts, because I had made some changes to get it to compile
-> see other thread).

Cheers,
-- 
Johan

Re: svn commit: r986521 - in /subversion/branches/performance/subversion: libsvn_fs_fs/id.c libsvn_fs_fs/temp_serializer.c libsvn_subr/svn_temp_serializer.c

Posted by Stefan Fuhrmann <st...@alice-dsl.de>.
Johan Corveleyn wrote:
> On Wed, Aug 18, 2010 at 1:11 AM,  <st...@apache.org> wrote:
>   
>> Author: stefan2
>> Date: Tue Aug 17 23:11:13 2010
>> New Revision: 986521
>>
>> URL: http://svn.apache.org/viewvc?rev=986521&view=rev
>> Log:
>> Change serialized representation of pointers: instead of storing offsets
>> relative to the whole buffer, store the offset relative to the (local) structure
>> that immediately contains that pointer as an element.
>>
>> Also, store directory content hashes in lexicographical order of their names.
>> This will soon be used to implement sub-entry cache access.
>>
>>     
>
> This change caused this compilation error for me (on Windows, with
> Visual C Express 2008):
>
> ..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C2065:
> 'comparison_fn_t' : undeclared identifier
> ..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C4047:
> 'function' : 'int (__cdecl *)(const void *,const void *)' differs in
> levels of indirection from 'int'
> ..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C4024:
> 'qsort' : different types for formal and actual parameter 4
> ..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C2146:
> syntax error : missing ')' before identifier 'compare_dirent_id_names'
> ..\..\..\subversion\libsvn_fs_fs\temp_serializer.c(287): error C2059:
> syntax error : ')'
>
> Unless I missed something or did something wrong (had to resolve some
> merge conflicts, because I had made some changes to get it to compile
> -> see other thread).
>
>   
Thanks for the feedback. r987868 should fix this
(I haven't gotten back home to test this on LINUX again).

-- Stefan^2.