Hi, Aleksey! On Dec 05, Aleksey Midenkov wrote: > > > diff --git a/sql/sql_base.cc b/sql/sql_base.cc > > > index ac22a63bdba..459edb614f7 100644 > > > --- a/sql/sql_base.cc > > > +++ b/sql/sql_base.cc > > > @@ -4203,6 +4444,15 @@ bool open_tables(THD *thd, const DDL_options_st > > > &options, > > > } > > > > > > thd->current_tablenr= 0; > > > + > > > +#ifdef WITH_PARTITION_STORAGE_ENGINE > > > + if (!thd->stmt_arena->is_conventional()) > > > + { > > > + for (tables= *start; tables; tables= tables->next_global) > > > + tables->vers_skip_create= false; > > > + } > > > > This looks a bit like an overkill, you do it for every prepare, > > while auto-adding a partition is a rare event, as you said. > > > > May be you can do instead in TABLE::vers_switch_partition > > > > uint *create_count= !thd->stmt_arena->is_conventional() && > > table_list->vers_skip_create ? > > No, this is inside backoff action loop. That will interfere with the > normal vers_skip_create algorithm (which also applies to PS, SP). The > goal of the above code is to reset vers_skip_create from the previous > statement execution.
In that case you can use an auto-resetting value, like, if tables->vers_skip_create == thd->query_id it means, "skip". That is vers_skip_create must be of query_id_t. You set it with tables->vers_skip_create= thd->query_id; And on the next statement it automatically expires. This semantics is a bit more complex than boolean, so it'd need a comment, like /* Protect single thread from repeating partition auto-create over multiple share instances (as the share is closed on backoff action). Skips auto-create only for one given query id. */ query_id_t vers_skip_create; Regards, Sergei VP of MariaDB Server Engineering and secur...@mariadb.org _______________________________________________ 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