List:Internals« Previous MessageNext Message »
From:Zardosht Kasheff Date:December 28 2011 2:50pm
Subject:Re: question about locks with optimize table
View as plain text  
In this region of code that is locking out other clients, I don't see
table->lock set to TL_WRITE_ALLOW_WRITE, even though store_lock does
so. It does not seem to be working.

Here is the big question. If we change the code somehow such that for
our engine, the below if-clause evaluates to FALSE, would that be ok?

Thanks
-Zardosht

    if (lock_type == TL_WRITE && table->table->s->version)
    {
      DBUG_PRINT("admin", ("removing table from cache"));
      pthread_mutex_lock(&LOCK_open);
      const char *old_message=thd->enter_cond(&COND_refresh, &LOCK_open,
					      "Waiting to get writelock");
      mysql_lock_abort(thd,table->table, TRUE);
      remove_table_from_cache(thd, table->table->s->db.str,
                              table->table->s->table_name.str,
                              RTFC_WAIT_OTHER_THREAD_FLAG |
                              RTFC_CHECK_KILLED_FLAG);

On Wed, Dec 28, 2011 at 5:09 AM, Michael Widenius <monty@stripped> wrote:
>
> Hi!
>
>>>>>> "Zardosht" == Zardosht Kasheff <zardosht@stripped>
> writes:
>
> Zardosht> How can a storage engine allow access to a table by other clients while
> an
> Zardosht> optimize is running?
>
> Zardosht> I think the issue here is that even if the storage
> Zardosht> engine could theoretically allow access to the table by other clients
> while
> Zardosht> running an optimize, there is no way for the storage engine to tell
> MySQL
> Zardosht> that this is ok. Setting the lock type to TL_WRITE_ALLOW_WRITE in
> Zardosht> handler::store_lock does not work
>
>
> By doing it either of these ways:
>
> - Return at once from handler::optimize() and then run optimize in the
>  background in the storage engine.
>
> - Change mysql_admin_table() to check for 'table->lock_type' instead
>  of 'lock_type' in the code.  This should allow the storage engine to
>  change to use TL_WRITE_ALLOW_WRITE in handler::store_lock().
>
> Please check if the later works for you, in which case I will do the
> above change in MariaDB.
>
> Regards,
> Monty
Thread
question about locks with optimize tableJohn Esmet15 Dec
  • Re: question about locks with optimize tableJohn Esmet19 Dec
  • re: question about locks with optimize tableMichael Widenius27 Dec
Re: question about locks with optimize tableZardosht Kasheff28 Dec
Re: question about locks with optimize tableMichael Widenius28 Dec
  • Re: question about locks with optimize tableZardosht Kasheff28 Dec
    • Re: question about locks with optimize tableMichael Widenius29 Dec