On 3 June 2015 at 19:02, Bert Huijben <[email protected]> wrote:
>
>
>> -----Original Message-----
>> From: [email protected] [mailto:[email protected]]
>> Sent: woensdag 3 juni 2015 17:49
>> To: [email protected]
>> Subject: svn commit: r1683378 - in /subversion/trunk/subversion/libsvn_fs_fs:
>> pack.c revprops.c
>>
>> Author: ivan
>> Date: Wed Jun  3 15:48:35 2015
>> New Revision: 1683378
>>
>> URL: http://svn.apache.org/r1683378
>> Log:
>> Prevent a possible FSFS repository corruption with power or network disk
>> failures during 'svnadmin pack'.
>>
>> * subversion/libsvn_fs_fs/pack.c
>>   (close_pack_context): Call svn_io_file_flush_to_disk() for pack file.
>>   (pack_phys_addressed): Use svn_io_file_open() to open pack and manifest
>>    file and call svn_io_file_flush_to_disk() before closing them.
>>
>> * subversion/libsvn_fs_fs/revprops.c
>>   (svn_fs_fs__copy_revprops): Use apr_file_t to write pack file and flush
>>    changes to disk before close.
>>   (svn_fs_fs__pack_revprops_shard): Use svn_io_file_open() to packed revision
>>    properties manifest file and call svn_io_file_flush_to_disk()
>>    before closing it.
>>
>> Modified:
>>     subversion/trunk/subversion/libsvn_fs_fs/pack.c
>>     subversion/trunk/subversion/libsvn_fs_fs/revprops.c
>>
>
> <snip>
>
>> Modified: subversion/trunk/subversion/libsvn_fs_fs/revprops.c
>> URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/revprop
>> s.c?rev=1683378&r1=1683377&r2=1683378&view=diff
>> ================================================================
>> ==============
>> --- subversion/trunk/subversion/libsvn_fs_fs/revprops.c (original)
>> +++ subversion/trunk/subversion/libsvn_fs_fs/revprops.c Wed Jun  3 15:48:35
>> 2015
>> @@ -1168,7 +1168,6 @@ svn_fs_fs__copy_revprops(const char *pac
>>    apr_file_t *pack_file;
>>    svn_revnum_t rev;
>>    apr_pool_t *iterpool = svn_pool_create(scratch_pool);
>> -  svn_stream_t *stream;
>>
>>    /* create empty data buffer and a write stream on top of it */
>>    svn_stringbuf_t *uncompressed
>> @@ -1192,6 +1191,7 @@ svn_fs_fs__copy_revprops(const char *pac
>>    for (rev = start_rev; rev <= end_rev; rev++)
>>      {
>>        const char *path;
>> +      svn_stream_t *stream;
>>
>>        svn_pool_clear(iterpool);
>>
>> @@ -1213,9 +1213,10 @@ svn_fs_fs__copy_revprops(const char *pac
>>    SVN_ERR(svn__compress(uncompressed, compressed, compression_level));
>>
>>    /* write the pack file content to disk */
>> -  stream = svn_stream_from_aprfile2(pack_file, FALSE, scratch_pool);
>> -  SVN_ERR(svn_stream_write(stream, compressed->data, &compressed->len));
>> -  SVN_ERR(svn_stream_close(stream));
>> +  SVN_ERR(svn_io_file_write_full(pack_file, compressed->data, compressed-
>> >len,
>> +                                 NULL, scratch_pool));
>> +  SVN_ERR(svn_io_file_flush_to_disk(pack_file, scratch_pool));
>> +  SVN_ERR(svn_io_file_close(pack_file, scratch_pool));
>
Hi Bert,

Thanks for review.

> Minor optimization: you could have used iterpool as the shortest living 
> scratch pool here,
> like how it is used in the last part of the patch.
Personally I find using iterpool out of loop slightly confusing, so I
prefer don't use such practice unless it's necessary.



-- 
Ivan Zhakov

Reply via email to