Kristian, Sergey, hello! > Sergey Petrunia <ser...@mariadb.com> writes: > >> == Symptoms == >> When one runs a parallel slave (mode=conservative) and replicates DML for
> Nice analysis. Normally it is guaranteed to be safe to start the next > transaction in parallel with the commit step of a prior. But as you > describe, RBR on table with no primary key is special, since it does not > really correspond to any SQL-level operation. > >> 2. Change parallel slave to wait *for commit*. This should only be done if >> tables that are updated do not support Gap Locking. This is hard, it will >> require making risky changes on the SQL layer. > > I think you can just call thd->wait_for_prior_commit() in the code that does > the RBR table scan on a table with no primary key. Eg. > Rows_log_event::find_row(): > > if (m_key_info) > { > ... > } > else > { > DBUG_PRINT("info",("locating record using table scan (rnd_next)")); > thd->wait_for_prior_commit(); > ... > } > > (Or do it only once, maybe in Rows_log_event::find_key() or similar, and > only if rli->mi->parallel_mode==SLAVE_PARALLEL_CONSERVATIVE). Right, without the if the OPTIMISTIC could not be called such :-). To me it's the best feasible solution, consistent with the name. Andrei _______________________________________________ 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