Hi Kristian,

On Tue, Jul 11, 2023 at 1:35 AM Kristian Nielsen
<kniel...@knielsen-hq.org> wrote:
>
> Hi Marko,
>
> I'd like to ask you to review the below patch for MDEV-31655.
>
>   https://jira.mariadb.org/browse/MDEV-31655
>   
> https://github.com/MariaDB/server/commit/cb06612a9da09a7981ada84768793f2ff3ef842c

I am sorry for the delay; last month I was mostly on vacation.

I sent some minor comments that apply to the InnoDB code changes.
I think that this needs to be reviewed by the replication team as well.
Whoever reviews that should pay attention to the stability of the tests.
We have a few replication tests that fail rather often.

> This patch restores code in InnoDB that was originally part of the parallel
> replication implementation. It makes InnoDB choose the right victim when two
> transactions in parallel replication deadlock with each other. The code was
> erroneously removed as part of the VATS work in InnoDB. I saw that you later
> deprecated and eventually removed the VATS code.

As far as I can tell, innodb_lock_schedule_algorithm=VATS consistently
reproduced debug assertion failures during stress testing. It was
finally removed from 10.6. We might introduce something similar later,
provided that it passes tests. In MySQL 8.0.20,
https://dev.mysql.com/worklog/task/?id=13468 reimplemented this as
CATS (Contention-Aware Transaction Scheduling).

> I saw that the InnoDB deadlock code is substantially changed in 10.6, so I
> will need to rework the patch in that version. But I wanted to ask your
> opinion about this 10.4 version first.

I must trust your judgement here; I have no fundamental objection. For
better testing of this, I think that we really need a 10.6 based
branch that contains both this and MDEV-31482.

> In the patch, note in particular the modification to has_higher_priority(),
> which I think has the effect of choosing which of two waiting transactions
> to grant a lock to. I don't remember adding this myself, so it might have
> been added as part of VATS work. But it sounds appropriate; if T1 and T2 are
> both waiting for a lock, there is no point in granting it to T2 over T1, as
> then T2 will just be immediately killed and rolled back by replication.

Because innodb_lock_schedule_algorithm=VATS is known to be broken even
without any involvement of replication, I do not think that we have to
care too much about it.

Marko
-- 
Marko Mäkelä, Lead Developer InnoDB
MariaDB plc
_______________________________________________
developers mailing list -- developers@lists.mariadb.org
To unsubscribe send an email to developers-le...@lists.mariadb.org

Reply via email to