maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #12907
Re: 4b164f176e6: MDEV-25114 Crash: WSREP: invalid state ROLLED_BACK (FATAL)
Hi, Jan!
On Oct 04, Jan Lindström wrote:
> Hi Sergei,
> > > +/* This is wrapper for wsrep_break_lock in thr_lock.c */
> > > +static int wsrep_thr_abort_thd(void *bf_thd_ptr, void *victim_thd_ptr, my_bool signal)
> > > +{
> > > + THD* victim_thd= (THD *) victim_thd_ptr;
> > > + /* We need to lock THD::LOCK_thd_data to protect victim
> > > + from concurrent usage or disconnect or delete. */
> >
> > How do you know victim_thd wasn't deleted before you locked
> > LOCK_thd_data below?
>
> I must say the thr_lock code is not familiar to me but there are
> mysql_mutex_lock() calls to lock->mutex. After code review it is not
> clear to me what that mutex is.
where are mysql_mutex_lock() calls to lock->mutex?
> > > if (victim_trx) {
> > > + wsrep_thd_UNLOCK(victim_thd);
> >
> > what keeps victim_trx from disappearing here?
>
> Nothing. Do you have suggestions ?
A couple of thoughts:
* Why do you unlock LOCK_thd_data here at all? I believed the whole
point of using TOI was to make sure that even if you lock mutexes in a
different order, it will not cause a deadlock.
* You cannot pass a THD safely over a gap where no locks keep it in
existence. You can pass an integer, thread id, and use
find_thread_by_id later.
By the way, how long can WSREP_TO_ISOLATION_BEGIN() take?
Does it need to wait for everything else being replicated?
Regards,
Sergei
VP of MariaDB Server Engineering
and security@xxxxxxxxxxx
Follow ups
References