mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 05:52:27 +01:00
41a3dfe490
DATABASE with open HANDLER" Remove LOCK_create_db, database name locks, and use metadata locks instead. This exposes CREATE/DROP/ALTER DATABASE statements to the graph-based deadlock detector in MDL, and paves the way for a safe, deadlock-free implementation of RENAME DATABASE. Database DDL statements will now take exclusive metadata locks on the database name, while table/view/routine DDL statements take intention exclusive locks on the database name. This prevents race conditions between database DDL and table/view/routine DDL. (e.g. DROP DATABASE with concurrent CREATE/ALTER/DROP TABLE) By adding database name locks, this patch implements WL#4450 "DDL locking: CREATE/DROP DATABASE must use database locks" and WL#4985 "DDL locking: namespace/hierarchical locks". The patch also changes code to use init_one_table() where appropriate. The new lock_table_names() function requires TABLE_LIST::db_length to be set correctly, and this is taken care of by init_one_table(). This patch also adds a simple template to help work with the mysys HASH data structure. Most of the patch was written by Konstantin Osipov. |
||
---|---|---|
.. | ||
aggregate.result | ||
bad_option_1.result | ||
bad_option_2.result | ||
binlog_mix.result | ||
binlog_row.result | ||
binlog_stmt.result | ||
cnf_option.result | ||
column_privilege.result | ||
ddl_cond_instances.result | ||
ddl_events_waits_current.result | ||
ddl_events_waits_history.result | ||
ddl_events_waits_history_long.result | ||
ddl_ews_by_event_name.result | ||
ddl_ews_by_instance.result | ||
ddl_ews_by_thread_by_event_name.result | ||
ddl_file_instances.result | ||
ddl_fs_by_event_name.result | ||
ddl_fs_by_instance.result | ||
ddl_mutex_instances.result | ||
ddl_performance_timers.result | ||
ddl_processlist.result | ||
ddl_rwlock_instances.result | ||
ddl_setup_consumers.result | ||
ddl_setup_instruments.result | ||
ddl_setup_objects.result | ||
ddl_setup_timers.result | ||
dml_cond_instances.result | ||
dml_events_waits_current.result | ||
dml_events_waits_history.result | ||
dml_events_waits_history_long.result | ||
dml_ews_by_event_name.result | ||
dml_ews_by_instance.result | ||
dml_ews_by_thread_by_event_name.result | ||
dml_file_instances.result | ||
dml_file_summary_by_event_name.result | ||
dml_file_summary_by_instance.result | ||
dml_mutex_instances.result | ||
dml_performance_timers.result | ||
dml_processlist.result | ||
dml_rwlock_instances.result | ||
dml_setup_consumers.result | ||
dml_setup_instruments.result | ||
dml_setup_objects.result | ||
dml_setup_timers.result | ||
func_file_io.result | ||
func_mutex.result | ||
global_read_lock.result | ||
information_schema.result | ||
misc.result | ||
myisam_file_io.result | ||
no_threads.result | ||
one_thread_per_con.result | ||
pfs_upgrade.result | ||
privilege.result | ||
query_cache.result | ||
read_only.result | ||
schema.result | ||
selects.result | ||
server_init.result | ||
start_server_no_cond_class.result | ||
start_server_no_cond_inst.result | ||
start_server_no_file_class.result | ||
start_server_no_file_inst.result | ||
start_server_no_mutex_class.result | ||
start_server_no_mutex_inst.result | ||
start_server_no_rwlock_class.result | ||
start_server_no_rwlock_inst.result | ||
start_server_no_thread_class.result | ||
start_server_no_thread_inst.result | ||
start_server_off.result | ||
start_server_on.result | ||
tampered_perfschema_table1.result |