Andrei via developers <developers@lists.mariadb.org> writes:

Let me admit, in the external loop description

>> It is better to do as in the original patch, and treat commit-by-rotate like
>> a normal binlog rotate, not try to participate that transaction in binlog
>> group commit. We cannot share the fsync anyway, as the files are different.
>> And it introduces a lot of complexities to suddenly have binlog rotations in
>> the middle of group commit - what about the complex accounting around
>> xid_count and binlog checkpoints? There will be a lot of corner cases eg. if
>> _two_ commit-by-rotate happens in the same group commit, with lots of
>> potential for subtle bugs that will occur only very rarely in production and
>> be almost impossible to track down.
>
> I gave some thought to these use cases and was confident they would be
> covered.
> To that matter, the interspersed with rotate group write of `287511a7...` 
> commit
> can be arranged as an external loop
>
> + for (current= queue; current != NULL; current= current->next)
> + {
>     if (likely(is_open()))                       // Should always be true
>     {
>       ...
>       for (; /* current fits to the active log */; current= current->next)
>       { ... /* flush */ ...}
>       flush_and_sync();
>       ...
> +/-   rotate(false, &check_purge);
>    }
>     ...
>     trx_group_commit_with_engines();
> +  }


the flush and commit phases are to run according to a special mutex lock
protocol. The external loop if taken literarly can't of course do that
e.g for a reason of concurrent leaders should be held off.
_______________________________________________
developers mailing list -- developers@lists.mariadb.org
To unsubscribe send an email to developers-le...@lists.mariadb.org

Reply via email to