> I am not entirely sure I understood your question correctly, hopefully I got
> it right. I think your question is that this patch only helps if T_1 sets
> rgi->killed_for_retry _before_ T_2 executes the above code that does
> wait_for_pending_deadlock_kill(). So what if T_1 does so a bit later, after
> T_2 has already proceeded beyond this check?

That's so.

>
> Now consider the second case, where T_1 only sets rgi->killed_for_retry
> _after_ T_2 has passed the above code point:
>
> 1. T_2 acquires some lock inside InnoDB
>
> 2. T_2 passes the above code point with the check for rgi->killed_for_retry,
> it calls mark_start_commit() and starts the commit process.
>
> 3. T_1 only now gets a lock conflict with T_2, it calls
> thd_rpl_deadlock_check(), sets rgi->killed_for_retry, schedules a task for
> the manager thread to kill T_2
>
> 4. T_1 goes to wait on the lock.
>
> In this situation, the lock in InnoDB was still held by T_2 when it ran
> mark_start_commit().

Hmm, this is unclear. I thought you had a case in which T_2
releases an innodb stats lock at the end of its current statement.
And T_1 would try to acquire the lock within that timeframe.

Am I confused in the above? It'd be great to have a T_2 worker stack 
at time of the lock is granted to it, but it's not provided..

Obvisoulsy under this perception T_2 would execute mark_start_commit()
after the lock is released.

Please clear it out.
_______________________________________________
developers mailing list -- developers@lists.mariadb.org
To unsubscribe send an email to developers-le...@lists.mariadb.org

Reply via email to