mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Backport of:
---------------------------------------------------------- revno: 2617.69.20 committer: Konstantin Osipov <kostja@sun.com> branch nick: 5.4-4284-1-assert timestamp: Thu 2009-08-13 18:29:55 +0400 message: WL#4284 "Transactional DDL locking" A review fix. Since WL#4284 implementation separated MDL_request and MDL_ticket, MDL_request becamse a utility object necessary only to get a ticket. Store it by-value in TABLE_LIST with the intent to merge MDL_request::key with table_list->table_name and table_list->db in future. Change the MDL subsystem to not require MDL_requests to stay around till close_thread_tables(). Remove the list of requests from the MDL context. Requests for shared metadata locks acquired in open_tables() are only used as a list in recover_from_failed_open_table_attempt(), which calls mdl_context.wait_for_locks() for this list. To keep such list for recover_from_failed_open_table_attempt(), introduce a context class (Open_table_context), that collects all requests. A lot of minor cleanups and simplications that became possible with this change.
This commit is contained in:
14
sql/table.cc
14
sql/table.cc
@ -4583,6 +4583,14 @@ void TABLE_LIST::reinit_before_use(THD *thd)
|
||||
}
|
||||
while (parent_embedding &&
|
||||
parent_embedding->nested_join->join_list.head() == embedded);
|
||||
|
||||
mdl_request.ticket= NULL;
|
||||
/*
|
||||
Not strictly necessary, but we manipulate with the type in open_table(),
|
||||
so it's "safe" to reset the lock request type to the parser default, to
|
||||
restore things back to first-execution state.
|
||||
*/
|
||||
mdl_request.set_type(MDL_SHARED);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -4811,11 +4819,11 @@ size_t max_row_length(TABLE *table, const uchar *data)
|
||||
objects for all elements of table list.
|
||||
*/
|
||||
|
||||
void alloc_mdl_requests(TABLE_LIST *table_list, MEM_ROOT *root)
|
||||
void init_mdl_requests(TABLE_LIST *table_list)
|
||||
{
|
||||
for ( ; table_list ; table_list= table_list->next_global)
|
||||
table_list->mdl_request=
|
||||
MDL_request::create(0, table_list->db, table_list->table_name, root);
|
||||
table_list->mdl_request.init(0, table_list->db, table_list->table_name,
|
||||
MDL_SHARED);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user