maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #08442
Re: ae2cb44: MDEV-7922 - ERROR 1939 (HY000): Engine PERFORMANCE_SCHEMA failed to discover
Hi Sergei,
On Tue, Apr 07, 2015 at 07:02:46PM +0200, Sergei Golubchik wrote:
> Hi, Sergey!
>
> On Apr 07, Sergey Vojtovich wrote:
> > On Tue, Apr 07, 2015 at 03:03:39PM +0200, Sergei Golubchik wrote:
> > > On Apr 07, svoj@xxxxxxxxxxx wrote:
> > > >
> > > > MDEV-7922 - ERROR 1939 (HY000): Engine PERFORMANCE_SCHEMA failed
> > > > to discover table
> > >
> > > No, I don't like this solution. This is an issue in discovery, there is
> > > nothing wrong with how P_S uses it.
> > >
> > > I'd rather fix it in TABLE_SHARE::init_from_sql_statement_string()
> > > by temporarily setting THD::db to this->db (which is a db where the
> > > table will be created).
> > Well, I don't like it either. I also thought about temporary substition of
> > THD::db. But it may be read by concurrent thread (at least SHOW PROCESSLIST
> > does it) and be source for race conditions. Not sure how much these races are
> > relevant though.
>
> Relevant. We've had these races with thd->query_string - and quite a few
> of them.
>
> But I think they shouldn't be an issue in this case, because you won't
> free either thd->db or TABLE_SHARE::db. That is, any concurrent SHOW
> PROCESSLIST will see a valid string and will use it just fine. So I
> don't think this will cause any issues.
I won't free thd->db indeed. But I'm not that optimistic wrt TABLE_SHARE::db:
e.g. tdc_acquire_share() will free table share on error. Anyway we can easily
protect this by LOCK_thd_data.
What I'm mostly concerned about is that end user may see this temporary database
substition. Do you think it is acceptable?
Thanks,
Sergey
References