← Back to team overview

maria-developers team mailing list archive

Re: 5c26e91f755: Cleanup close_all_tables_for_name()

 

Hi, Sergey!

On Apr 01, Sergey Vojtovich wrote:
> revision-id: 5c26e91f755 (mariadb-10.5.0-70-g5c26e91f755)
> parent(s): 6daf451415f
> author: Sergey Vojtovich <svoj@xxxxxxxxxxx>
> committer: Sergey Vojtovich <svoj@xxxxxxxxxxx>
> timestamp: 2019-12-25 20:24:25 +0400
> message:
> 
> Cleanup close_all_tables_for_name()
> 
> close_all_tables_for_name() is always preceded by
> wait_while_table_is_used(), which makes tdc_remove_table() redundant.
> The only (now fixed) exception was close_cached_tables().
> 
> Part of MDEV-17882 - Cleanup refresh version
> 
> diff --git a/sql/sql_base.cc b/sql/sql_base.cc
> index 60e2b9957a4..9494c0b7bd2 100644
> --- a/sql/sql_base.cc
> +++ b/sql/sql_base.cc
> @@ -391,13 +391,12 @@ bool close_cached_tables(THD *thd, TABLE_LIST *tables,
>        if (! table)
>          continue;
>  
> -      if (thd->mdl_context.upgrade_shared_lock(table->mdl_ticket, MDL_EXCLUSIVE,
> -                                               timeout))
> +      if (wait_while_table_is_used(thd, table,
> +                                   HA_EXTRA_PREPARE_FOR_FORCED_CLOSE))

the comment just above this block says

    /*
      If we are under LOCK TABLES, we need to reopen the tables without
      opening a door for any concurrent threads to sneak in and get
      lock on our tables. To achieve this we use exclusive metadata
      locks.
    */

how do you achieve it now without the MDL_EXCLUSIVE ?

>        {
>          result= true;
>          break;
>        }
> -      table->file->extra(HA_EXTRA_PREPARE_FOR_FORCED_CLOSE);
>        close_all_tables_for_name(thd, table->s, HA_EXTRA_NOT_USED, NULL);
>      }

the rest is fine

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


Follow ups