diff options
author | Sergei Golubchik <serg@mariadb.org> | 2020-02-14 16:42:23 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2020-03-10 19:24:22 +0100 |
commit | 2ac3121af2767186c489054db5d4871d04b8eef4 (patch) | |
tree | 39de7dcc95c29fbd3d1ce3167262c61404e37743 | |
parent | 0ea717f51a152afdb3791195c4a25ee0baa2faac (diff) | |
download | mariadb-git-2ac3121af2767186c489054db5d4871d04b8eef4.tar.gz |
perfschema - various collateral cleanups and small changes
-rw-r--r-- | include/heap.h | 1 | ||||
-rw-r--r-- | include/thread_pool_priv.h | 6 | ||||
-rw-r--r-- | mysys/hash.c | 2 | ||||
-rw-r--r-- | mysys/ma_dyncol.c | 6 | ||||
-rw-r--r-- | mysys/my_static.c | 2 | ||||
-rw-r--r-- | sql/event_data_objects.cc | 6 | ||||
-rw-r--r-- | sql/events.cc | 11 | ||||
-rw-r--r-- | sql/handler.cc | 2 | ||||
-rw-r--r-- | sql/item_func.cc | 5 | ||||
-rw-r--r-- | sql/log.cc | 3 | ||||
-rw-r--r-- | sql/log.h | 4 | ||||
-rw-r--r-- | sql/mysqld.cc | 12 | ||||
-rw-r--r-- | sql/rpl_gtid.h | 2 | ||||
-rw-r--r-- | sql/rpl_mi.cc | 2 | ||||
-rw-r--r-- | sql/sp_head.cc | 2 | ||||
-rw-r--r-- | sql/sql_acl.cc | 23 | ||||
-rw-r--r-- | sql/sql_array.h | 14 | ||||
-rw-r--r-- | sql/sql_select.cc | 3 | ||||
-rw-r--r-- | sql/sql_select.h | 6 | ||||
-rw-r--r-- | sql/table.cc | 2 | ||||
-rw-r--r-- | sql/table.h | 9 | ||||
-rw-r--r-- | sql/transaction.cc | 8 | ||||
-rw-r--r-- | sql/xa.cc | 2 | ||||
-rw-r--r-- | storage/innobase/include/ut0stage.h | 2 | ||||
-rw-r--r-- | storage/perfschema/pfs.cc | 1 |
25 files changed, 66 insertions, 70 deletions
diff --git a/include/heap.h b/include/heap.h index ca6efa48f1b..b734f8ae88d 100644 --- a/include/heap.h +++ b/include/heap.h @@ -153,7 +153,6 @@ typedef struct st_heap_share char * name; /* Name of "memory-file" */ time_t create_time; THR_LOCK lock; - mysql_mutex_t intern_lock; /* Locking for use with _locking */ my_bool delete_on_close; my_bool internal; /* Internal temporary table */ LIST open_list; diff --git a/include/thread_pool_priv.h b/include/thread_pool_priv.h index 0112ef9c434..769c4a7d97d 100644 --- a/include/thread_pool_priv.h +++ b/include/thread_pool_priv.h @@ -38,12 +38,6 @@ #include <table.h> #include <sql_list.h> -/* Needed to get access to scheduler variables */ -void* thd_get_scheduler_data(THD *thd); -void thd_set_scheduler_data(THD *thd, void *data); -PSI_thread* thd_get_psi(THD *thd); -void thd_set_psi(THD *thd, PSI_thread *psi); - /* Interface to THD variables and functions */ void thd_set_killed(THD *thd); void thd_clear_errors(THD *thd); diff --git a/mysys/hash.c b/mysys/hash.c index 2d3077013d8..ba2aa8fc30e 100644 --- a/mysys/hash.c +++ b/mysys/hash.c @@ -83,7 +83,7 @@ my_hash_init2(HASH *hash, uint growth_size, CHARSET_INFO *charset, void (*free_element)(void*), uint flags) { my_bool res; - DBUG_ENTER("my_hash_init"); + DBUG_ENTER("my_hash_init2"); DBUG_PRINT("enter",("hash:%p size: %u", hash, (uint) size)); hash->records=0; diff --git a/mysys/ma_dyncol.c b/mysys/ma_dyncol.c index 0085c375aa1..2068d0d818c 100644 --- a/mysys/ma_dyncol.c +++ b/mysys/ma_dyncol.c @@ -3925,10 +3925,8 @@ mariadb_dyncol_val_str(DYNAMIC_STRING *str, DYNAMIC_COLUMN_VALUE *val, } if ((alloc= (char *)my_malloc(bufflen, MYF(0)))) { - len= my_convert(alloc, bufflen, cs, - from, (uint32)len, - val->x.string.charset, - &dummy_errors); + len= my_convert(alloc, bufflen, cs, from, (uint32)len, + val->x.string.charset, &dummy_errors); from= alloc; } else diff --git a/mysys/my_static.c b/mysys/my_static.c index 4bc0bae0c33..7474b789839 100644 --- a/mysys/my_static.c +++ b/mysys/my_static.c @@ -25,7 +25,7 @@ /* from my_init */ -char * home_dir=0; +char *home_dir=0; char *mysql_data_home= (char*) "."; const char *my_progname= NULL, *my_progname_short= NULL; char curr_dir[FN_REFLEN]= {0}, diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc index 5ea8300b7e4..81e703b5653 100644 --- a/sql/event_data_objects.cc +++ b/sql/event_data_objects.cc @@ -1430,10 +1430,8 @@ Event_job_data::execute(THD *thd, bool drop) if (parse_sql(thd, & parser_state, creation_ctx)) { - sql_print_error("Event Scheduler: " - "%serror during compilation of %s.%s", - thd->is_fatal_error ? "fatal " : "", - (const char *) dbname.str, (const char *) name.str); + sql_print_error("Event Scheduler: %serror during compilation of %s.%s", + thd->is_fatal_error ? "fatal " : "", dbname.str, name.str); goto end; } } diff --git a/sql/events.cc b/sql/events.cc index 68e013adfae..f4400abdeb5 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -832,13 +832,12 @@ Events::fill_schema_events(THD *thd, TABLE_LIST *tables, COND * /* cond */) */ if (thd->lex->sql_command == SQLCOM_SHOW_EVENTS) { - DBUG_ASSERT(thd->lex->first_select_lex()->db.str); - if (!is_infoschema_db(&thd->lex->first_select_lex()->db) && // There is no events in I_S - check_access(thd, EVENT_ACL, thd->lex->first_select_lex()->db.str, - NULL, NULL, 0, 0)) + LEX_CSTRING *lexdb= &thd->lex->first_select_lex()->db; + DBUG_ASSERT(lexdb); + if (!is_infoschema_db(lexdb) && !is_perfschema_db(lexdb) && + check_access(thd, EVENT_ACL, lexdb->str, NULL, NULL, 0, 0)) DBUG_RETURN(1); - db= normalize_db_name(thd->lex->first_select_lex()->db.str, - db_tmp, sizeof(db_tmp)); + db= normalize_db_name(lexdb->str, db_tmp, sizeof(db_tmp)); } ret= db_repository->fill_schema_events(thd, tables, db); diff --git a/sql/handler.cc b/sql/handler.cc index 49a265a9f23..109c7dd01bf 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1459,9 +1459,7 @@ int ha_commit_trans(THD *thd, bool all) thd->transaction.cleanup(); #ifdef WITH_WSREP if (wsrep_is_active(thd) && is_real_trans && !error) - { wsrep_commit_empty(thd, all); - } #endif /* WITH_WSREP */ DBUG_RETURN(0); } diff --git a/sql/item_func.cc b/sql/item_func.cc index 14a17bd09de..a263391a41a 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -4299,7 +4299,7 @@ static PSI_mutex_key key_LOCK_item_func_sleep; static PSI_mutex_info item_func_sleep_mutexes[]= { - { &key_LOCK_item_func_sleep, "LOCK_user_locks", PSI_FLAG_GLOBAL} + { &key_LOCK_item_func_sleep, "LOCK_item_func_sleep", PSI_FLAG_GLOBAL} }; @@ -4682,8 +4682,7 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, size_t length, entry->value=0; entry->value= (char*) my_realloc(entry->value, length, MYF(MY_ALLOW_ZERO_PTR | MY_WME | - ME_FATAL | - MY_THREAD_SPECIFIC)); + ME_FATAL | MY_THREAD_SPECIFIC)); if (!entry->value) return 1; } diff --git a/sql/log.cc b/sql/log.cc index 56e83bf2448..b2d971f3a4f 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1723,7 +1723,8 @@ static int binlog_close_connection(handlerton *hton, THD *thd) if (len > 0) wsrep_dump_rbr_buf(thd, buf, len); } #endif /* WITH_WSREP */ - DBUG_ASSERT(cache_mngr->trx_cache.empty() && cache_mngr->stmt_cache.empty()); + DBUG_ASSERT(cache_mngr->trx_cache.empty()); + DBUG_ASSERT(cache_mngr->stmt_cache.empty()); cache_mngr->~binlog_cache_mngr(); my_free(cache_mngr); DBUG_RETURN(0); diff --git a/sql/log.h b/sql/log.h index 8684eaba786..fa8b9fca37e 100644 --- a/sql/log.h +++ b/sql/log.h @@ -424,7 +424,7 @@ class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG /** The instrumentation key to use for opening the log index file. */ PSI_file_key m_key_file_log_index; - PSI_file_key m_key_COND_queue_busy; + PSI_cond_key m_key_COND_queue_busy; /** The instrumentation key to use for LOCK_binlog_end_pos. */ PSI_mutex_key m_key_LOCK_binlog_end_pos; #endif @@ -675,7 +675,7 @@ public: PSI_cond_key key_bin_log_update, PSI_file_key key_file_log, PSI_file_key key_file_log_index, - PSI_file_key key_COND_queue_busy, + PSI_cond_key key_COND_queue_busy, PSI_mutex_key key_LOCK_binlog_end_pos) { m_key_LOCK_index= key_LOCK_index; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index dfe2c88e975..a94ffa900eb 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -9180,10 +9180,10 @@ PSI_stage_info stage_invalidating_query_cache_entries_table= { 0, "Invalidating PSI_stage_info stage_invalidating_query_cache_entries_table_list= { 0, "Invalidating query cache entries (table list)", 0}; PSI_stage_info stage_killing_slave= { 0, "Killing slave", 0}; PSI_stage_info stage_logging_slow_query= { 0, "Logging slow query", 0}; -PSI_stage_info stage_making_temp_file_append_before_load_data= { 0, "Making temporary file (append) before replaying LOAD DATA INFILE.", 0}; -PSI_stage_info stage_making_temp_file_create_before_load_data= { 0, "Making temporary file (create) before replaying LOAD DATA INFILE.", 0}; +PSI_stage_info stage_making_temp_file_append_before_load_data= { 0, "Making temporary file (append) before replaying LOAD DATA INFILE", 0}; +PSI_stage_info stage_making_temp_file_create_before_load_data= { 0, "Making temporary file (create) before replaying LOAD DATA INFILE", 0}; PSI_stage_info stage_manage_keys= { 0, "Manage keys", 0}; -PSI_stage_info stage_master_has_sent_all_binlog_to_slave= { 0, "Master has sent all binlog to slave; waiting for binlog to be updated", 0}; +PSI_stage_info stage_master_has_sent_all_binlog_to_slave= { 0, "Master has sent all binlog to slave; waiting for more updates", 0}; PSI_stage_info stage_opening_tables= { 0, "Opening tables", 0}; PSI_stage_info stage_optimizing= { 0, "Optimizing", 0}; PSI_stage_info stage_preparing= { 0, "Preparing", 0}; @@ -9210,7 +9210,7 @@ PSI_stage_info stage_sending_cached_result_to_client= { 0, "Sending cached resul PSI_stage_info stage_sending_data= { 0, "Sending data", 0}; PSI_stage_info stage_setup= { 0, "Setup", 0}; PSI_stage_info stage_show_explain= { 0, "Show explain", 0}; -PSI_stage_info stage_slave_has_read_all_relay_log= { 0, "Slave has read all relay log; waiting for the slave I/O thread to update it", 0}; +PSI_stage_info stage_slave_has_read_all_relay_log= { 0, "Slave has read all relay log; waiting for more updates", 0}; PSI_stage_info stage_sorting= { 0, "Sorting", 0}; PSI_stage_info stage_sorting_for_group= { 0, "Sorting for group", 0}; PSI_stage_info stage_sorting_for_order= { 0, "Sorting for order", 0}; @@ -9258,7 +9258,7 @@ PSI_stage_info stage_binlog_processing_checkpoint_notify= { 0, "Processing binlo PSI_stage_info stage_binlog_stopping_background_thread= { 0, "Stopping binlog background thread", 0}; PSI_stage_info stage_waiting_for_work_from_sql_thread= { 0, "Waiting for work from SQL thread", 0}; PSI_stage_info stage_waiting_for_prior_transaction_to_commit= { 0, "Waiting for prior transaction to commit", 0}; -PSI_stage_info stage_waiting_for_prior_transaction_to_start_commit= { 0, "Waiting for prior transaction to start commit before starting next transaction", 0}; +PSI_stage_info stage_waiting_for_prior_transaction_to_start_commit= { 0, "Waiting for prior transaction to start commit", 0}; PSI_stage_info stage_waiting_for_room_in_worker_thread= { 0, "Waiting for room in worker thread event queue", 0}; PSI_stage_info stage_waiting_for_workers_idle= { 0, "Waiting for worker threads to be idle", 0}; PSI_stage_info stage_waiting_for_ftwrl= { 0, "Waiting due to global read lock", 0}; @@ -9266,7 +9266,7 @@ PSI_stage_info stage_waiting_for_ftwrl_threads_to_pause= { 0, "Waiting for worke PSI_stage_info stage_waiting_for_rpl_thread_pool= { 0, "Waiting while replication worker thread pool is busy", 0}; PSI_stage_info stage_master_gtid_wait_primary= { 0, "Waiting in MASTER_GTID_WAIT() (primary waiter)", 0}; PSI_stage_info stage_master_gtid_wait= { 0, "Waiting in MASTER_GTID_WAIT()", 0}; -PSI_stage_info stage_gtid_wait_other_connection= { 0, "Waiting for other master connection to process GTID received on multiple master connections", 0}; +PSI_stage_info stage_gtid_wait_other_connection= { 0, "Waiting for other master connection to process the same GTID", 0}; PSI_stage_info stage_slave_background_process_request= { 0, "Processing requests", 0}; PSI_stage_info stage_slave_background_wait_request= { 0, "Waiting for requests", 0}; PSI_stage_info stage_waiting_for_deadlock_kill= { 0, "Waiting for parallel replication deadlock handling to complete", 0}; diff --git a/sql/rpl_gtid.h b/sql/rpl_gtid.h index 167d7461a7e..523af4856ae 100644 --- a/sql/rpl_gtid.h +++ b/sql/rpl_gtid.h @@ -27,6 +27,8 @@ extern const LEX_CSTRING rpl_gtid_slave_state_table_name; class String; +#define GTID_MAX_STR_LENGTH (10+1+10+1+20) + struct rpl_gtid { uint32 domain_id; diff --git a/sql/rpl_mi.cc b/sql/rpl_mi.cc index 43a02147496..f3c87517f21 100644 --- a/sql/rpl_mi.cc +++ b/sql/rpl_mi.cc @@ -1570,6 +1570,8 @@ uint any_slave_sql_running(bool already_locked) if (!already_locked) mysql_mutex_lock(&LOCK_active_mi); + else + mysql_mutex_assert_owner(&LOCK_active_mi); if (unlikely(abort_loop || !master_info_index)) count= 1; else diff --git a/sql/sp_head.cc b/sql/sp_head.cc index c15465f105e..04595a6f32f 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -3444,7 +3444,7 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp, thd->mdl_context.release_statement_locks(); } } - //TODO: why is this here if log_slow_query is in sp_instr_stmt_execute? + //TODO: why is this here if log_slow_query is in sp_instr_stmt::execute? delete_explain_query(m_lex); if (m_lex->query_tables_own_last) diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index aeb05f27b30..c713f40cdf3 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -68,6 +68,15 @@ const uint max_hostname_length= 60; const uint max_dbname_length= 64; #endif +const char *safe_vio_type_name(Vio *vio) +{ + int unused; +#ifdef EMBEDDED_LIBRARY + if (!vio) return "Internal"; +#endif + return vio_type_name(vio_type(vio), &unused); +} + #include "sql_acl_getsort.ic" static LEX_CSTRING native_password_plugin_name= { @@ -13994,17 +14003,9 @@ bool acl_authenticate(THD *thd, uint com_change_user_pkt_len) */ if (sctx->user) { - if (strcmp(sctx->priv_user, sctx->user)) - { - general_log_print(thd, command, "%s@%s as %s on %s", - sctx->user, sctx->host_or_ip, - sctx->priv_user[0] ? sctx->priv_user : "anonymous", - safe_str(mpvio.db.str)); - } - else - general_log_print(thd, command, (char*) "%s@%s on %s", - sctx->user, sctx->host_or_ip, - safe_str(mpvio.db.str)); + general_log_print(thd, command, (char*) "%s@%s on %s using %s", + sctx->user, sctx->host_or_ip, + safe_str(mpvio.db.str), safe_vio_type_name(thd->net.vio)); } if (res > CR_OK && mpvio.status != MPVIO_EXT::SUCCESS) diff --git a/sql/sql_array.h b/sql/sql_array.h index 44dde114d62..70aeaabc8ec 100644 --- a/sql/sql_array.h +++ b/sql/sql_array.h @@ -170,6 +170,11 @@ public: return ((const Elem*)array.buffer) + array.elements - 1; } + const Elem *end() const + { + return back() + 1; + } + /// @returns pointer to n-th element Elem *get_pos(size_t idx) { @@ -182,7 +187,6 @@ public: return ((const Elem*)array.buffer) + idx; } - /** @retval false ok @retval true OOM, @c my_error() has been called. @@ -240,10 +244,16 @@ public: freeze_size(&array); } + bool reserve(size_t new_size) + { + return allocate_dynamic(&array, (uint)new_size); + } + + bool resize(size_t new_size, Elem default_val) { size_t old_size= elements(); - if (unlikely(allocate_dynamic(&array, (uint)new_size))) + if (reserve(new_size)) return true; if (new_size > old_size) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index ccf4a18a91f..f48edc8c180 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -13495,8 +13495,7 @@ bool JOIN_TAB::preread_init() if ((!derived->get_unit()->executed || derived->is_recursive_with_table() || derived->get_unit()->uncacheable) && - mysql_handle_single_derived(join->thd->lex, - derived, DT_CREATE | DT_FILL)) + mysql_handle_single_derived(join->thd->lex, derived, DT_CREATE | DT_FILL)) return TRUE; if (!(derived->get_unit()->uncacheable & UNCACHEABLE_DEPENDENT) || diff --git a/sql/sql_select.h b/sql/sql_select.h index e3501fb98c6..616d4769e2f 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -247,13 +247,13 @@ class SplM_opt_info; typedef struct st_join_table { TABLE *table; TABLE_LIST *tab_list; - KEYUSE *keyuse; /**< pointer to first used key */ + KEYUSE *keyuse; /**< pointer to first used key */ KEY *hj_key; /**< descriptor of the used best hash join key - not supported by any index */ + not supported by any index */ SQL_SELECT *select; COND *select_cond; COND *on_precond; /**< part of on condition to check before - accessing the first inner table */ + accessing the first inner table */ QUICK_SELECT_I *quick; /* The value of select_cond before we've attempted to do Index Condition diff --git a/sql/table.cc b/sql/table.cc index 718efa5767c..8f5f5614cd8 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -273,7 +273,7 @@ TABLE_CATEGORY get_table_category(const LEX_CSTRING *db, if (is_infoschema_db(db)) return TABLE_CATEGORY_INFORMATION; - if (lex_string_eq(&PERFORMANCE_SCHEMA_DB_NAME, db)) + if (is_perfschema_db(db)) return TABLE_CATEGORY_PERFORMANCE; if (lex_string_eq(&MYSQL_SCHEMA_NAME, db)) diff --git a/sql/table.h b/sql/table.h index 6ce92ee048e..416490a80a9 100644 --- a/sql/table.h +++ b/sql/table.h @@ -3060,9 +3060,12 @@ extern LEX_CSTRING MYSQL_PROC_NAME; inline bool is_infoschema_db(const LEX_CSTRING *name) { - return (INFORMATION_SCHEMA_NAME.length == name->length && - !my_strcasecmp(system_charset_info, - INFORMATION_SCHEMA_NAME.str, name->str)); + return lex_string_eq(&INFORMATION_SCHEMA_NAME, name); +} + +inline bool is_perfschema_db(const LEX_CSTRING *name) +{ + return lex_string_eq(&PERFORMANCE_SCHEMA_DB_NAME, name); } inline void mark_as_null_row(TABLE *table) diff --git a/sql/transaction.cc b/sql/transaction.cc index f0426b1fcc4..330baaf3fc7 100644 --- a/sql/transaction.cc +++ b/sql/transaction.cc @@ -245,18 +245,12 @@ bool trans_commit(THD *thd) if res is non-zero, then ha_commit_trans has rolled back the transaction, so the hooks for rollback will be called. */ - if (res) - { #ifdef HAVE_REPLICATION + if (res) repl_semisync_master.wait_after_rollback(thd, FALSE); -#endif - } else - { -#ifdef HAVE_REPLICATION repl_semisync_master.wait_after_commit(thd, FALSE); #endif - } thd->variables.option_bits&= ~(OPTION_BEGIN | OPTION_KEEP_LOG); thd->transaction.all.reset(); thd->lex->start_transaction_opt= 0; diff --git a/sql/xa.cc b/sql/xa.cc index e0ae0caa1a2..efcb3ea5c00 100644 --- a/sql/xa.cc +++ b/sql/xa.cc @@ -22,7 +22,7 @@ /*************************************************************************** - Handling of XA id cacheing + Handling of XA id caching ***************************************************************************/ enum xa_states { XA_ACTIVE= 0, XA_IDLE, XA_PREPARED, XA_ROLLBACK_ONLY }; diff --git a/storage/innobase/include/ut0stage.h b/storage/innobase/include/ut0stage.h index 23ff32a60f9..71ace53cea0 100644 --- a/storage/innobase/include/ut0stage.h +++ b/storage/innobase/include/ut0stage.h @@ -41,8 +41,6 @@ Created Nov 12, 2014 Vasil Dimov #ifdef HAVE_PSI_STAGE_INTERFACE -typedef void PSI_stage_progress; - /** Class used to report ALTER TABLE progress via performance_schema. The only user of this class is the ALTER TABLE code and it calls the methods in the following order diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc index 23b9feab6ed..cc922d69d2c 100644 --- a/storage/perfschema/pfs.cc +++ b/storage/perfschema/pfs.cc @@ -1740,6 +1740,7 @@ void pfs_register_stage_v1(const char *category, DBUG_ASSERT(info != NULL); DBUG_ASSERT(info->m_name != NULL); len= (int)strlen(info->m_name); + DBUG_ASSERT(len <= 64); // see table_threads.cc near PROCESSLIST_STATE full_length= prefix_length + len; if (likely(full_length <= PFS_MAX_INFO_NAME_LENGTH)) { |