Commit 02a832df authored by unknown's avatar unknown

A follow up after the fix for Bug#21074 - fix NDB tests breaking on

asserts.
The patch for Bug#21074 replaces acquisition of the global LOCK_open lock
with exclusive locks on table names in such operations ad DROP TABLE
and RENAME TABLE.
Unfortunately, NDB internally assumes that LOCK_open is acquired and
tries to release it.
This dependency should be fixed by a separate (and significant in size)
patch. For now we just satisfy it - after all, the original
goal of the patch for Bug#21074 was to move query_cache_invalidate
outside of the scope of LOCK_open, and we still can do that.

This fixes some failing NDB tests in the runtime tree.


sql/sql_rename.cc:
  Move release of LOCK_open after ha_ndbcluster::rename_tables to
  satisfy an assert in ndb_log_schema_op.
parent 7416224c
...@@ -150,7 +150,6 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent) ...@@ -150,7 +150,6 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent)
pthread_mutex_unlock(&LOCK_open); pthread_mutex_unlock(&LOCK_open);
goto err; goto err;
} }
pthread_mutex_unlock(&LOCK_open);
error=0; error=0;
if ((ren_table=rename_tables(thd,table_list,0))) if ((ren_table=rename_tables(thd,table_list,0)))
...@@ -174,6 +173,17 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent) ...@@ -174,6 +173,17 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent)
error= 1; error= 1;
} }
/*
An exclusive lock on table names is satisfactory to ensure
no other thread accesses this table.
However, NDB assumes that handler::rename_tables is called under
LOCK_open. And it indeed is, from ALTER TABLE.
TODO: remove this limitation.
We still should unlock LOCK_open as early as possible, to provide
higher concurrency - query_cache_invalidate can take minutes to
complete.
*/
pthread_mutex_unlock(&LOCK_open);
/* Lets hope this doesn't fail as the result will be messy */ /* Lets hope this doesn't fail as the result will be messy */
if (!silent && !error) if (!silent && !error)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment