← Back to team overview

maria-developers team mailing list archive

Re: caec6b4b3d7: MDEV-17573 Assertion in federatedx on multi-update

 

Hi, Aleksey!

Looks reasonable to me.

MYSQL_RES is stored in the handler.
Of course, MYSQL_ROWS *current, which is a pointer into MYSQL_RES,
has to be in the handler, it cannot be shared.

Ok to push, thanks!

On Oct 23, Aleksey Midenkov wrote:
> revision-id: caec6b4b3d7 (mariadb-10.3.21-250-gcaec6b4b3d7)
> parent(s): a00c668ddf2
> author: Aleksey Midenkov <midenok@xxxxxxxxx>
> committer: Aleksey Midenkov <midenok@xxxxxxxxx>
> timestamp: 2020-10-21 13:38:37 +0300
> message:
> 
> MDEV-17573 Assertion in federatedx on multi-update
> 
> Cause: shared federatedx_io cannot store table-specific data.
> 
> Fix: move current row reference `federatedx_io_mysql::current` to
> ha_federatedx.
> 
> FederatedX connection (represented by federatedx_io) is stored into
> federatedx_txn::txn_list of per-server connections (see
> federatedx_txn::acquire()). federatedx_txn object is stored into THD
> (see ha_federatedx::external_lock()). When multiple handlers acquire
> FederatedX connection they get single federatedx_io instance. Multiple
> handlers do their operation via federatedx_io_mysql::mark_position()
> and federatedx_io_mysql::fetch_row() in arbitrarty manner. They access
> the same federatedx_io_mysql instance and same MYSQL_ROWS *current
> pointer, so one handler disrupts the work of the other.
> 
> Related to "MDEV-14551 Can't find record in table on multi-table update
> with ORDER BY".

Regards,
Sergei
VP of MariaDB Server Engineering
and security@xxxxxxxxxxx