• Monty's avatar
    Fixes for Aria transaction handling with lock tables · 2f3779d3
    Monty authored
    MDEV-10130 Assertion `share->in_trans == 0' failed in storage/maria/ma_close.c
    MDEV-10378 Assertion `trn' failed in virtual int ha_maria::start_stmt
    
    The problem was that maria_handler->trn was not properly reset
    at commit/rollback and ha_maria::exernal_lock() could get confused
    because.
    
    There was some old code in ha_maria::implicit_commit() that tried
    to take care of this, but it was not bullet proof.
    
    Fixed by adding list of all tables that is part of the maria transaction to
    TRN.
    
    A nice side effect was of the fix is that loops in
    ha_maria::implict_commit() got to be much simpler.
    
    Other things:
    - Fixed a bug in mysql_admin_table() where argument open_for_modify
      was wrongly reset for the next table in the chain
    - rollback admin command also in case of fatal error.
    - Split _ma_set_trn_for_table() to three version to simplify code
      and debugging.
    - Several new asserts to detect the original problem (that file was
      not properly removed from trn before calling ma_close())
    2f3779d3
trnman.c 28.3 KB