← Back to team overview

maria-developers team mailing list archive

Re: MDEV-342: Do not mark old binlog file as cleanly closed during rotate until

 

Hi, Kristian!

Look good. Just one comment, see below, and ok to push

On Jun 20, Kristian Nielsen wrote:
> 
> ------------------------------------------------------------
> revno: 3449
> revision-id: knielsen@xxxxxxxxxxxxxxx-20120619130327-7vvemizq0akoysvn
> parent: knielsen@xxxxxxxxxxxxxxx-20120620122323-bimn76haijiwpo7u
> committer: knielsen@xxxxxxxxxxxxxxx
> branch nick: mariadb-5.5
> timestamp: Tue 2012-06-19 15:03:27 +0200
> message:
>   MDEV-342: Do not mark old binlog file as cleanly closed during rotate until
>   the new file is fully synced to disk and binlog index. This fixes a window
>   where a crash would leave next server restart unable to detect that a crash
>   occured, causing recovery to fail.

> === modified file 'sql/log.cc'
> --- a/sql/log.cc	2012-05-21 18:54:41 +0000
> +++ b/sql/log.cc	2012-06-19 13:03:27 +0000
> @@ -6344,6 +6373,21 @@ void MYSQL_BIN_LOG::close(uint exiting)
>  }
>  
>  
> +/*
> +  For binlog rotation, this function is used to ensure that the old binlog
> +  file is not marked as cleanly closed until the new binlog file is synced to
> +  disk and index. This is needed to ensure that we will always detect a prior
> +  crash at next server restart.
> +*/
> +void MYSQL_BIN_LOG::delayed_close(File file)
> +{
> +  my_off_t offset= BIN_LOG_HEADER_SIZE + FLAGS_OFFSET;
> +  uchar flags= 0;            // clearing LOG_EVENT_BINLOG_IN_USE_F
> +  mysql_file_pwrite(file, &flags, 1, offset, MYF(0));

I'd rather reuse this piece of code that overwrites the flag.
If you move mysql_file_close() to the caller, you can call this function
set_binlog_flag_when_closing() and use it both for normal and delayed
close.

> +  mysql_file_close(file, MYF(MY_WME));
> +}
> +
Regards,
Sergei