Hi, Nikita,

On May 04, Nikita Malyavin wrote:
> See my new commit b804bcbc6

You forgot to address the following:

>      if (do_commit)
>      {
> -      // do not set STMT_END for last event to leave table open in altering 
> thd
> -      error= binlog_flush_pending_rows_event(thd, false, true, binlog, 
> &cache);
> -      if (is_ending_transaction)
> +      /*
> +        If the cache wasn't reinited to write, then it remains empty after
> +        the last write.
> +      */
> +      if (cache.cache_log.type != READ_CACHE && !error)

this is a confusing new condition. are you trying to avoid locking a
mutex for an empty cache? If yes, you can check my_b_bytes_in_cache(),
that'd be more clear.

>        {
>          mysql_mutex_lock(binlog->get_log_lock());
>          error= binlog->write_cache(thd, &cache.cache_log);
>          mysql_mutex_unlock(binlog->get_log_lock());
>        }
> -      else
> -        cache.store_prev_position();
>      }
> -    else if (!is_ending_transaction)
> +    else if (!commit) // rollback
> +    {
>        cache.restore_prev_position();
> +    }
> +    else

add // trans engine, end of statement

> +    {
> +      DBUG_ASSERT(!is_ending_transaction);
> +      cache.store_prev_position();
> +    }

Regards,
Sergei
VP of MariaDB Server Engineering
and secur...@mariadb.org

_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to     : maria-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to