Re[3]: [patches] Re: [PATCH] Fix force_recovery on empty xlog

Konstantin Belyavskiy k.belyavskiy at tarantool.org
Wed Jan 31 17:33:10 MSK 2018


Remove redundancy (second check)
Decided not to rename in xdir_scan() as it checks only header, but not data rows.


>Среда, 31 января 2018, 17:05 +03:00 от Konstantin Belyavskiy <k.belyavskiy at tarantool.org>:
>
>
>>
>>> 
>>>  /*
>>>   * Recovery subsystem
>>> @@ -330,20 +332,26 @@ recovery_finalize(struct recovery *r, struct xstream *stream)
>>>  	recovery_close_log(r);
>>> 
>>>  	/*
>>> -	 * Check that the last xlog file has rows.
>>> +	 * Rename last corrupted xlog if any. Cases:
>>> +	 *  - file has corrupted rows
>>> +	 *  - file has corrupted header
>>> +	 *  - file has zero size
>>>  	 */
>>> -	if (vclockset_last(&r->wal_dir.index) != NULL &&
>>> -	    vclock_sum(&r->vclock) ==
>>> -	    vclock_sum(vclockset_last(&r->wal_dir.index))) {
>>> -		/*
>>> -		 * Delete the last empty xlog file.
>>> -		 */
>>> +	if (vclockset_last(&r->wal_dir.index) != NULL) {
>>>  		char *name = xdir_format_filename(&r->wal_dir,
>>>  						  vclock_sum(&r->vclock),
>>>  						  NONE);
>>> -		if (unlink(name) != 0) {
>>> -			tnt_raise(SystemError, "%s: failed to unlink file",
>>> -				  name);
>>> +		if (access(name, F_OK) == 0 ||
>>
>>> +		    vclock_sum(&r->vclock) ==
>>> +		    vclock_sum(vclockset_last(&r->wal_dir.index))) {
>>
>>If there's an xlog file corresponding to r->vclock in r->wal_dir.index,
>>it must exist, i.e. access() must return 0 for it. That said, the second
>>check looks redundant.
>>
>>Come to think of it, we have scanned the whole xlog directory in
>>xdir_scan() by the time we get here so using access() here looks
>>strange. Can we call rename() right from xdir_scan() for files that
>>we failed to index (corrupted header, empty)?
>>
>If xlog has corrupted data but header is OK, when second check
>vclock_sum(&r->vclock) == vclock_sum(vclockset_last(&r->wal_dir.index))
>
>But should we rename on xdir_scan() ? Good question BTW..
>Roman, Konstantin, what do you think?
>
>
>С уважением,
>Konstantin Belyavskiy
>k.belyavskiy at tarantool.org


С уважением,
Konstantin Belyavskiy
k.belyavskiy at tarantool.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20180131/9d218f3c/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fix-force_recovery-on-empty-xlog.patch
Type: application/x-patch
Size: 6063 bytes
Desc: not available
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20180131/9d218f3c/attachment.bin>


More information about the Tarantool-patches mailing list