maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #10704
Re: strange IF in translog_flush_buffers()
Hi, Sanja!
On May 17, Oleksandr Byelkin wrote:
> Hi!
>
> Actually code should work as it is, but it check unnecessary condition and
> also very dificult to understand. I propose following fix (comment in it
> explains why it work now and why condition is always TRUE)
I cannot review it, this is between you and Monty. If you think it's ok,
please push it (into 10.0). Or I can push it together with all other
similar fixes.
> diff --git a/storage/maria/ma_loghandler.c b/storage/maria/ma_loghandler.c
> index 86e51cc3526..e680e830703 100644
> --- a/storage/maria/ma_loghandler.c
> +++ b/storage/maria/ma_loghandler.c
> @@ -7789,8 +7789,23 @@ void translog_flush_buffers(TRANSLOG_ADDRESS *lsn,
> translog_force_current_buffer_to_finish();
> translog_buffer_unlock(buffer);
> }
> - else if (log_descriptor.bc.buffer->prev_last_lsn != LSN_IMPOSSIBLE)
> + else
> {
> + if (log_descriptor.bc.buffer->last_lsn == LSN_IMPOSSIBLE)
> + {
> + /*
> + In this case both last_lsn & prev_last_lsn are LSN_IMPOSSIBLE
> + otherwise it will go in the first IF because LSN_IMPOSSIBLE less
> + then any real LSN and cmp_translog_addr(*lsn,
> + log_descriptor.bc.buffer->prev_last_lsn) will be TRUE
> + */
> + DBUG_ASSERT(log_descriptor.bc.buffer->prev_last_lsn ==
> + LSN_IMPOSSIBLE);
> + DBUG_PRINT("info", ("There is no LSNs yet generated => do nothing"));
> + translog_unlock();
> + DBUG_VOID_RETURN;
> + }
> +
> /* fix lsn if it was horizon */
> *lsn= log_descriptor.bc.buffer->prev_last_lsn;
> DBUG_PRINT("info", ("LSN to flush fixed to prev last lsn: (%lu,0x%lx)",
> @@ -7799,13 +7814,6 @@ void translog_flush_buffers(TRANSLOG_ADDRESS *lsn,
> TRANSLOG_BUFFERS_NO);
> translog_unlock();
> }
> - else if (log_descriptor.bc.buffer->last_lsn == LSN_IMPOSSIBLE)
> - {
> - DBUG_PRINT("info", ("There is no LSNs yet generated => do nothing"));
> - translog_unlock();
> - DBUG_VOID_RETURN;
> - }
> -
> /* flush buffers */
> *sent_to_disk= translog_get_sent_to_disk();
> if (cmp_translog_addr(*lsn, *sent_to_disk) > 0)
Regards,
Sergei
Chief Architect MariaDB
and security@xxxxxxxxxxx