diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-06-04 10:24:10 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-06-04 10:24:10 +0300 |
commit | eba2d10ac53d1d2f975027ba2b2ca39d9c9b98ad (patch) | |
tree | 7389791492884dd232c5ddc84e53e70a0a725770 /storage | |
parent | ad2bf1129cfa85c00072b46e0355fe14bf69ee54 (diff) | |
download | mariadb-git-eba2d10ac53d1d2f975027ba2b2ca39d9c9b98ad.tar.gz |
MDEV-22721 Remove bloat caused by InnoDB logger class
Introduce a new ATTRIBUTE_NOINLINE to
ib::logger member functions, and add UNIV_UNLIKELY hints to callers.
Also, remove some crash reporting output. If needed, the
information will be available using debugging tools.
Furthermore, remove some fts_enable_diag_print output that included
indexed words in raw form. The code seemed to assume that words are
NUL-terminated byte strings. It is not clear whether a NUL terminator
is always guaranteed to be present. Also, UCS2 or UTF-16 strings would
typically contain many NUL bytes.
Diffstat (limited to 'storage')
37 files changed, 223 insertions, 326 deletions
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index ca62e088780..4b78cb38b42 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -3725,9 +3725,9 @@ lookup: ut_ad(!hash_lock); dberr_t err = buf_read_page(page_id, page_size); - if (err != DB_SUCCESS) { + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { ib::error() << "Reading compressed page " << page_id - << " failed with error: " << ut_strerr(err); + << " failed with error: " << err; goto err_exit; } @@ -5250,7 +5250,8 @@ buf_page_init( if (hash_page == NULL) { /* Block not found in hash table */ - } else if (buf_pool_watch_is_sentinel(buf_pool, hash_page)) { + } else if (UNIV_LIKELY(buf_pool_watch_is_sentinel(buf_pool, + hash_page))) { /* Preserve the reference count. */ ib_uint32_t buf_fix_count = hash_page->buf_fix_count; @@ -5260,18 +5261,8 @@ buf_page_init( buf_pool_watch_remove(buf_pool, hash_page); } else { - - ib::error() << "Page " << page_id - << " already found in the hash table: " - << hash_page << ", " << block; - - ut_d(buf_page_mutex_exit(block)); - ut_d(buf_pool_mutex_exit(buf_pool)); - ut_d(buf_print()); - ut_d(buf_LRU_print()); - ut_d(buf_validate()); - ut_d(buf_LRU_validate()); - ut_error; + ib::fatal() << "Page already foudn in the hash table: " + << page_id; } ut_ad(!block->page.in_zip_hash); @@ -7253,6 +7244,7 @@ operator<<( return(out); } +#if defined UNIV_DEBUG_PRINT || defined UNIV_DEBUG || defined UNIV_BUF_DEBUG /** Print the given buf_pool_t object. @param[in,out] out the output stream @param[in] buf_pool the buf_pool_t object to be printed @@ -7280,6 +7272,7 @@ operator<<( << ", written=" << buf_pool.stat.n_pages_written << "]"; return(out); } +#endif /* UNIV_DEBUG_PRINT || UNIV_DEBUG || UNIV_BUF_DEBUG */ /** Encrypt a buffer of temporary tablespace @param[in] offset Page offset diff --git a/storage/innobase/buf/buf0dblwr.cc b/storage/innobase/buf/buf0dblwr.cc index 7fb4cf9a9d3..42128f873eb 100644 --- a/storage/innobase/buf/buf0dblwr.cc +++ b/storage/innobase/buf/buf0dblwr.cc @@ -600,11 +600,11 @@ buf_dblwr_process() page_id, page_size, 0, page_size.physical(), read_buf, NULL); - if (err != DB_SUCCESS) { + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { ib::warn() << "Double write buffer recovery: " << page_id << " read failed with " - << "error: " << ut_strerr(err); + << "error: " << err; } const bool is_all_zero = buf_is_zeroes( diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 3c91c9595c4..7318d4f1eb6 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -578,18 +578,11 @@ buf_flush_ready_for_replace( #endif /* UNIV_DEBUG */ ut_ad(mutex_own(buf_page_get_mutex(bpage))); ut_ad(bpage->in_LRU_list); + ut_a(buf_page_in_file(bpage)); - if (buf_page_in_file(bpage)) { - - return(bpage->oldest_modification == 0 - && bpage->buf_fix_count == 0 - && buf_page_get_io_fix(bpage) == BUF_IO_NONE); - } - - ib::fatal() << "Buffer block " << bpage << " state " << bpage->state - << " in the LRU list!"; - - return(FALSE); + return bpage->oldest_modification == 0 + && bpage->buf_fix_count == 0 + && buf_page_get_io_fix(bpage) == BUF_IO_NONE; } /********************************************************************//** diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc index 107d0628400..317a17b142f 100644 --- a/storage/innobase/buf/buf0lru.cc +++ b/storage/innobase/buf/buf0lru.cc @@ -1824,46 +1824,9 @@ buf_LRU_block_remove_hashed( } hashed_bpage = buf_page_hash_get_low(buf_pool, bpage->id); - if (bpage != hashed_bpage) { - ib::error() << "Page " << bpage->id - << " not found in the hash table"; - -#ifdef UNIV_DEBUG - - - ib::error() - << "in_page_hash:" << bpage->in_page_hash - << " in_zip_hash:" << bpage->in_zip_hash - // << " in_free_list:"<< bpage->in_fee_list - << " in_flush_list:" << bpage->in_flush_list - << " in_LRU_list:" << bpage->in_LRU_list - << " zip.data:" << bpage->zip.data - << " zip_size:" << bpage->size.logical() - << " page_state:" << buf_page_get_state(bpage); -#else - ib::error() - << " zip.data:" << bpage->zip.data - << " zip_size:" << bpage->size.logical() - << " page_state:" << buf_page_get_state(bpage); -#endif - - if (hashed_bpage) { - - ib::error() << "In hash table we find block " - << hashed_bpage << " of " << hashed_bpage->id - << " which is not " << bpage; - } - -#if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG - mutex_exit(buf_page_get_mutex(bpage)); - rw_lock_x_unlock(hash_lock); - buf_pool_mutex_exit(buf_pool); - buf_print(); - buf_LRU_print(); - buf_validate(); - buf_LRU_validate(); -#endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */ - ut_error; + if (UNIV_UNLIKELY(bpage != hashed_bpage)) { + ib::fatal() << "Page not found in the hash table: " + << bpage->id; } ut_ad(!bpage->in_zip_hash); diff --git a/storage/innobase/dict/dict0crea.cc b/storage/innobase/dict/dict0crea.cc index 1a3d6c51d98..2976581c19f 100644 --- a/storage/innobase/dict/dict0crea.cc +++ b/storage/innobase/dict/dict0crea.cc @@ -1719,10 +1719,9 @@ dict_create_or_check_foreign_constraint_tables(void) "END;\n", FALSE, trx); - if (err != DB_SUCCESS) { - + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { ib::error() << "Creation of SYS_FOREIGN and SYS_FOREIGN_COLS" - " failed: " << ut_strerr(err) << ". Tablespace is" + " failed: " << err << ". Tablespace is" " full. Dropping incompletely created tables."; ut_ad(err == DB_OUT_OF_FILE_SPACE @@ -1821,10 +1820,9 @@ dict_create_or_check_sys_virtual() "END;\n", FALSE, trx); - if (err != DB_SUCCESS) { - + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { ib::error() << "Creation of SYS_VIRTUAL" - " failed: " << ut_strerr(err) << ". Tablespace is" + " failed: " << err << ". Tablespace is" " full or too many transactions." " Dropping incompletely created tables."; @@ -1902,9 +1900,9 @@ dict_foreign_eval_sql( return(error); } - if (error != DB_SUCCESS) { + if (UNIV_UNLIKELY(error != DB_SUCCESS)) { ib::error() << "Foreign key constraint creation failed: " - << ut_strerr(error); + << error; mutex_enter(&dict_foreign_err_mutex); ut_print_timestamp(ef); @@ -2353,10 +2351,9 @@ dict_create_or_check_sys_tablespace(void) "END;\n", FALSE, trx); - if (err != DB_SUCCESS) { - + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { ib::error() << "Creation of SYS_TABLESPACES and SYS_DATAFILES" - " has failed with error " << ut_strerr(err) + " has failed with error " << err << ". Dropping incompletely created tables."; ut_a(err == DB_OUT_OF_FILE_SPACE diff --git a/storage/innobase/dict/dict0load.cc b/storage/innobase/dict/dict0load.cc index 486f3c1081c..96309329ad4 100644 --- a/storage/innobase/dict/dict0load.cc +++ b/storage/innobase/dict/dict0load.cc @@ -925,7 +925,7 @@ dict_update_filepath( trx->dict_operation_lock_mode = 0; trx_free_for_background(trx); - if (err == DB_SUCCESS) { + if (UNIV_LIKELY(err == DB_SUCCESS)) { /* We just updated SYS_DATAFILES due to the contents in a link file. Make a note that we did this. */ ib::info() << "The InnoDB data dictionary table SYS_DATAFILES" @@ -935,7 +935,7 @@ dict_update_filepath( ib::warn() << "Error occurred while updating InnoDB data" " dictionary table SYS_DATAFILES for tablespace ID " << space_id << " to file " << filepath << ": " - << ut_strerr(err) << "."; + << err << "."; } return(err); diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index 0da77dfdff7..77c1e9627eb 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -2355,14 +2355,14 @@ dict_stats_save_index_stat( ");\n" "END;", trx); - if (ret != DB_SUCCESS) { + if (UNIV_UNLIKELY(ret != DB_SUCCESS)) { if (innodb_index_stats_not_found == false && index->stats_error_printed == false) { ib::error() << "Cannot save index statistics for table " << index->table->name << ", index " << index->name << ", stat name \"" << stat_name << "\": " - << ut_strerr(ret); + << ret; index->stats_error_printed = true; } } @@ -2473,9 +2473,9 @@ dict_stats_save( ");\n" "END;", NULL); - if (ret != DB_SUCCESS) { + if (UNIV_UNLIKELY(ret != DB_SUCCESS)) { ib::error() << "Cannot save table statistics for table " - << table->name << ": " << ut_strerr(ret); + << table->name << ": " << ret; mutex_exit(&dict_sys->mutex); rw_lock_x_unlock(&dict_operation_lock); @@ -3330,7 +3330,7 @@ dict_stats_update( " for table " << table->name << " from " TABLE_STATS_NAME_PRINT " and " - INDEX_STATS_NAME_PRINT ": " << ut_strerr(err) + INDEX_STATS_NAME_PRINT ": " << err << ". Using transient stats method instead."; } diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc index f06aa7606ee..331516e868a 100644 --- a/storage/innobase/fil/fil0crypt.cc +++ b/storage/innobase/fil/fil0crypt.cc @@ -298,14 +298,9 @@ fil_space_read_crypt_data(const page_size_t& page_size, const byte* page) type == CRYPT_SCHEME_1) || iv_length != sizeof crypt_data->iv) { ib::error() << "Found non sensible crypt scheme: " - << type << "," << iv_length << " for space: " - << page_get_space_id(page) << " offset: " - << offset << " bytes: [" - << page[offset + 2 + MAGIC_SZ] - << page[offset + 3 + MAGIC_SZ] - << page[offset + 4 + MAGIC_SZ] - << page[offset + 5 + MAGIC_SZ] - << "]."; + << type << "," << iv_length + << " for space: " + << page_get_space_id(page); return NULL; } @@ -725,8 +720,10 @@ fil_space_decrypt( } ib::fatal() << "Unable to decrypt data-block " - << " src: " << src << "srclen: " - << srclen << " buf: " << dst << "buflen: " + << " src: " << static_cast<const void*>(src) + << "srclen: " + << srclen << " buf: " + << static_cast<const void*>(dst) << "buflen: " << dstlen << " return-code: " << rc << " Can't continue!"; } diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index eaf3a80b6b1..69790c44617 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -3228,12 +3228,12 @@ fil_discard_tablespace( case DB_IO_ERROR: ib::warn() << "While deleting tablespace " << id << " in DISCARD TABLESPACE. File rename/delete" - " failed: " << ut_strerr(err); + " failed: " << err; break; case DB_TABLESPACE_NOT_FOUND: ib::warn() << "Cannot delete tablespace " << id - << " in DISCARD TABLESPACE: " << ut_strerr(err); + << " in DISCARD TABLESPACE: " << err; break; default: @@ -5177,7 +5177,7 @@ fil_aio_wait( ib::error() << "Failed to read file '" << node->name << "' at offset " << offset - << ": " << ut_strerr(err); + << ": " << err; } fil_space_release_for_io(space); diff --git a/storage/innobase/fsp/fsp0file.cc b/storage/innobase/fsp/fsp0file.cc index 673e74cfb3d..5abdf22d939 100644 --- a/storage/innobase/fsp/fsp0file.cc +++ b/storage/innobase/fsp/fsp0file.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2013, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, 2018, MariaDB Corporation. +Copyright (c) 2017, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -331,7 +331,7 @@ Datafile::read_first_page(bool read_only_mode) ib::error() << "Cannot read first page of '" << m_filepath << "' " - << ut_strerr(err); + << err; break; } } diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc index 06f66e88e56..2501f4f8ba3 100644 --- a/storage/innobase/fsp/fsp0fsp.cc +++ b/storage/innobase/fsp/fsp0fsp.cc @@ -1437,7 +1437,7 @@ fsp_alloc_free_page( ut_a(!is_system_tablespace(space_id)); if (page_no >= FSP_EXTENT_SIZE) { ib::error() << "Trying to extend a single-table" - " tablespace " << space << " , by single" + " tablespace " << space->name << " , by single" " page(s) though the space size " << space_size << ". Page no " << page_no << "."; return(NULL); diff --git a/storage/innobase/fts/fts0config.cc b/storage/innobase/fts/fts0config.cc index 6130546e963..768e3a2eabd 100644 --- a/storage/innobase/fts/fts0config.cc +++ b/storage/innobase/fts/fts0config.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, 2019, MariaDB Corporation. +Copyright (c) 2017, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -317,9 +317,7 @@ fts_config_get_index_ulint( error = fts_config_get_index_value(trx, index, name, &value); if (UNIV_UNLIKELY(error != DB_SUCCESS)) { - - ib::error() << "(" << ut_strerr(error) << ") reading `" - << name << "'"; + ib::error() << "(" << error << ") reading `" << name << "'"; } else { *int_value = strtoul((char*) value.f_str, NULL, 10); } @@ -357,9 +355,7 @@ fts_config_set_index_ulint( error = fts_config_set_index_value(trx, index, name, &value); if (UNIV_UNLIKELY(error != DB_SUCCESS)) { - - ib::error() << "(" << ut_strerr(error) << ") writing `" - << name << "'"; + ib::error() << "(" << error << ") writing `" << name << "'"; } ut_free(value.f_str); @@ -391,8 +387,7 @@ fts_config_get_ulint( error = fts_config_get_value(trx, fts_table, name, &value); if (UNIV_UNLIKELY(error != DB_SUCCESS)) { - ib::error() << "(" << ut_strerr(error) << ") reading `" - << name << "'"; + ib::error() << "(" << error << ") reading `" << name << "'"; } else { *int_value = strtoul((char*) value.f_str, NULL, 10); } @@ -430,8 +425,7 @@ fts_config_set_ulint( error = fts_config_set_value(trx, fts_table, name, &value); if (UNIV_UNLIKELY(error != DB_SUCCESS)) { - ib::error() << "(" << ut_strerr(error) << ") writing `" - << name << "'"; + ib::error() << "(" << error << ") writing `" << name << "'"; } ut_free(value.f_str); diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index 2706c59495b..dd4938dd019 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -510,7 +510,7 @@ cleanup: for (;;) { dberr_t error = fts_eval_sql(trx, graph); - if (error == DB_SUCCESS) { + if (UNIV_LIKELY(error == DB_SUCCESS)) { fts_sql_commit(trx); stopword_info->status = STOPWORD_USER_TABLE; break; @@ -523,7 +523,7 @@ cleanup: trx->error_state = DB_SUCCESS; } else { - ib::error() << "Error '" << ut_strerr(error) + ib::error() << "Error '" << error << "' while reading user stopword" " table."; ret = FALSE; @@ -1454,9 +1454,9 @@ fts_drop_table( error = row_drop_table_for_mysql(table_name, trx, SQLCOM_DROP_DB, false, false); - if (error != DB_SUCCESS) { + if (UNIV_UNLIKELY(error != DB_SUCCESS)) { ib::error() << "Unable to drop FTS index aux table " - << table_name << ": " << ut_strerr(error); + << table_name << ": " << error; } } else { error = DB_FAIL; @@ -2535,8 +2535,7 @@ fts_get_max_cache_size( error = fts_config_get_value( trx, fts_table, FTS_MAX_CACHE_SIZE_IN_MB, &value); - if (error == DB_SUCCESS) { - + if (UNIV_LIKELY(error == DB_SUCCESS)) { value.f_str[value.f_len] = 0; cache_size_in_mb = strtoul((char*) value.f_str, NULL, 10); @@ -2566,7 +2565,7 @@ fts_get_max_cache_size( cache_size_in_mb = FTS_CACHE_SIZE_LOWER_LIMIT_IN_MB; } } else { - ib::error() << "(" << ut_strerr(error) << ") reading max" + ib::error() << "(" << error << ") reading max" " cache config value from config table"; } @@ -2735,13 +2734,12 @@ retry: func_exit: - if (error == DB_SUCCESS) { + if (UNIV_LIKELY(error == DB_SUCCESS)) { fts_sql_commit(trx); } else { *doc_id = 0; - ib::error() << "(" << ut_strerr(error) << ") while getting" - " next doc id."; + ib::error() << "(" << error << ") while getting next doc id."; fts_sql_rollback(trx); if (error == DB_DEADLOCK) { @@ -2816,12 +2814,11 @@ fts_update_sync_doc_id( fts_que_graph_free_check_lock(&fts_table, NULL, graph); if (local_trx) { - if (error == DB_SUCCESS) { + if (UNIV_LIKELY(error == DB_SUCCESS)) { fts_sql_commit(trx); cache->synced_doc_id = doc_id; } else { - - ib::error() << "(" << ut_strerr(error) << ") while" + ib::error() << "(" << error << ") while" " updating last doc id."; fts_sql_rollback(trx); @@ -4065,14 +4062,14 @@ fts_sync_write_words( n_nodes += ib_vector_size(word->nodes); - if (error != DB_SUCCESS && !print_error) { - ib::error() << "(" << ut_strerr(error) << ") writing" + if (UNIV_UNLIKELY(error != DB_SUCCESS) && !print_error) { + ib::error() << "(" << error << ") writing" " word node to FTS auxiliary index table."; print_error = TRUE; } } - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { printf("Avg number of nodes: %lf\n", (double) n_nodes / (double) (n_words > 1 ? n_words : 1)); } @@ -4098,7 +4095,7 @@ fts_sync_begin( sync->trx = trx_allocate_for_background(); trx_start_internal(sync->trx); - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { ib::info() << "FTS SYNC for table " << sync->table->name << ", deleted count: " << ib_vector_size(cache->deleted_doc_ids) @@ -4121,7 +4118,7 @@ fts_sync_index( trx->op_info = "doing SYNC index"; - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { ib::info() << "SYNC words: " << rbt_size(index_cache->words); } @@ -4218,18 +4215,14 @@ fts_sync_commit( fts_cache_init(cache); rw_lock_x_unlock(&cache->lock); - if (error == DB_SUCCESS) { - + if (UNIV_LIKELY(error == DB_SUCCESS)) { fts_sql_commit(trx); - - } else if (error != DB_SUCCESS) { - + } else { fts_sql_rollback(trx); - - ib::error() << "(" << ut_strerr(error) << ") during SYNC."; + ib::error() << "(" << error << ") during SYNC."; } - if (fts_enable_diag_print && elapsed_time) { + if (UNIV_UNLIKELY(fts_enable_diag_print) && elapsed_time) { ib::info() << "SYNC for table " << sync->table->name << ": SYNC time: " << (time(NULL) - sync->start_time) @@ -4983,7 +4976,7 @@ fts_get_rows_count( for (;;) { error = fts_eval_sql(trx, graph); - if (error == DB_SUCCESS) { + if (UNIV_LIKELY(error == DB_SUCCESS)) { fts_sql_commit(trx); break; /* Exit the loop. */ @@ -4996,7 +4989,7 @@ fts_get_rows_count( trx->error_state = DB_SUCCESS; } else { - ib::error() << "(" << ut_strerr(error) + ib::error() << "(" << error << ") while reading FTS table."; break; /* Exit the loop. */ @@ -7061,7 +7054,7 @@ fts_drop_orphaned_tables(void) for (;;) { error = fts_eval_sql(trx, graph); - if (error == DB_SUCCESS) { + if (UNIV_LIKELY(error == DB_SUCCESS)) { fts_check_and_drop_orphaned_tables(trx, tables); break; /* Exit the loop. */ } else { @@ -7075,7 +7068,7 @@ fts_drop_orphaned_tables(void) trx->error_state = DB_SUCCESS; } else { - ib::error() << "(" << ut_strerr(error) + ib::error() << "(" << error << ") while reading SYS_TABLES."; break; /* Exit the loop. */ diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc index 39a7b086e34..ae943577348 100644 --- a/storage/innobase/fts/fts0opt.cc +++ b/storage/innobase/fts/fts0opt.cc @@ -525,7 +525,7 @@ fts_index_fetch_nodes( for (;;) { error = fts_eval_sql(trx, *graph); - if (error == DB_SUCCESS) { + if (UNIV_LIKELY(error == DB_SUCCESS)) { fts_sql_commit(trx); break; /* Exit the loop. */ @@ -538,7 +538,7 @@ fts_index_fetch_nodes( trx->error_state = DB_SUCCESS; } else { - ib::error() << "(" << ut_strerr(error) + ib::error() << "(" << error << ") while reading FTS index."; break; /* Exit the loop. */ @@ -860,7 +860,7 @@ fts_index_fetch_words( error = fts_eval_sql(optim->trx, graph); } - if (error == DB_SUCCESS) { + if (UNIV_LIKELY(error == DB_SUCCESS)) { //FIXME fts_sql_commit(optim->trx); break; } else { @@ -877,7 +877,7 @@ fts_index_fetch_words( optim->trx->error_state = DB_SUCCESS; } else { - ib::error() << "(" << ut_strerr(error) + ib::error() << "(" << error << ") while reading document."; break; /* Exit the loop. */ @@ -1356,12 +1356,6 @@ fts_optimize_word( enc.src_last_doc_id = 0; enc.src_ilist_ptr = NULL; - if (fts_enable_diag_print) { - word->text.f_str[word->text.f_len] = 0; - ib::info() << "FTS_OPTIMIZE: optimize \"" << word->text.f_str - << "\""; - } - while (i < size) { ulint copied; fts_node_t* src_node; @@ -1439,11 +1433,6 @@ fts_optimize_write_word( ut_ad(fts_table->charset); - if (fts_enable_diag_print) { - ib::info() << "FTS_OPTIMIZE: processed \"" << word->f_str - << "\""; - } - pars_info_bind_varchar_literal( info, "word", word->f_str, word->f_len); @@ -1461,8 +1450,8 @@ fts_optimize_write_word( error = fts_eval_sql(trx, graph); - if (error != DB_SUCCESS) { - ib::error() << "(" << ut_strerr(error) << ") during optimize," + if (UNIV_UNLIKELY(error != DB_SUCCESS)) { + ib::error() << "(" << error << ") during optimize," " when deleting a word from the FTS index."; } @@ -1485,8 +1474,8 @@ fts_optimize_write_word( error = fts_write_node( trx, &graph, fts_table, word, node); - if (error != DB_SUCCESS) { - ib::error() << "(" << ut_strerr(error) << ")" + if (UNIV_UNLIKELY(error != DB_SUCCESS)) { + ib::error() << "(" << error << ")" " during optimize, while adding a" " word to the FTS index."; } @@ -1875,9 +1864,8 @@ fts_optimize_index_completed( error = fts_config_set_index_value( optim->trx, index, FTS_LAST_OPTIMIZED_WORD, &word); - if (error != DB_SUCCESS) { - - ib::error() << "(" << ut_strerr(error) << ") while updating" + if (UNIV_UNLIKELY(error != DB_SUCCESS)) { + ib::error() << "(" << error << ") while updating" " last optimized word!"; } @@ -2429,7 +2417,7 @@ fts_optimize_table( fts_optimize_t* optim = NULL; fts_t* fts = table->fts; - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { ib::info() << "FTS start optimize " << table->name; } @@ -2481,7 +2469,7 @@ fts_optimize_table( if (error == DB_SUCCESS && optim->n_completed == ib_vector_size(fts->indexes)) { - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { ib::info() << "FTS_OPTIMIZE: Completed" " Optimize, cleanup DELETED table"; } @@ -2504,7 +2492,7 @@ fts_optimize_table( fts_optimize_free(optim); - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { ib::info() << "FTS end optimize " << table->name; } @@ -2689,7 +2677,7 @@ static bool fts_optimize_del_table(const dict_table_t* table) slot = static_cast<fts_slot_t*>(ib_vector_get(fts_slots, i)); if (slot->table == table) { - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { ib::info() << "FTS Optimize Removing table " << table->name; } diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc index 57ab4c4379f..81018f57619 100644 --- a/storage/innobase/fts/fts0que.cc +++ b/storage/innobase/fts/fts0que.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, 2019, MariaDB Corporation. +Copyright (c) 2017, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -2447,9 +2447,8 @@ fts_query_match_document( get_doc, match->doc_id, NULL, FTS_FETCH_DOC_BY_ID_EQUAL, fts_query_fetch_document, &phrase); - if (error != DB_SUCCESS) { - ib::error() << "(" << ut_strerr(error) - << ") matching document."; + if (UNIV_UNLIKELY(error != DB_SUCCESS)) { + ib::error() << "(" << error << ") matching document."; } else { *found = phrase.found; } @@ -2495,8 +2494,8 @@ fts_query_is_in_proximity_range( &get_doc, match[0]->doc_id, NULL, FTS_FETCH_DOC_BY_ID_EQUAL, fts_query_fetch_document, &phrase); - if (err != DB_SUCCESS) { - ib::error() << "(" << ut_strerr(err) << ") in verification" + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { + ib::error() << "(" << err << ") in verification" " phase of proximity search"; } @@ -3501,14 +3500,6 @@ fts_query_calculate_idf( / (double) word_freq->doc_count); } } - - if (fts_enable_diag_print) { - ib::info() << "'" << word_freq->word.f_str << "' -> " - << query->total_docs << "/" - << word_freq->doc_count << " " - << std::setw(6) << std::setprecision(5) - << word_freq->idf; - } } } @@ -3884,7 +3875,7 @@ fts_query_parse( } else { query->root = state.root; - if (fts_enable_diag_print && query->root != NULL) { + if (UNIV_UNLIKELY(fts_enable_diag_print) && query->root) { fts_ast_node_print(query->root); } } @@ -4108,7 +4099,7 @@ fts_query( ut_free(lc_query_str); - if (fts_enable_diag_print && (*result)) { + if (UNIV_UNLIKELY(fts_enable_diag_print) && (*result)) { ulint diff_time = ut_time_ms() - start_time_ms; ib::info() << "FTS Search Processing time: " @@ -4264,7 +4255,7 @@ fts_expand_query( query->total_size += SIZEOF_RBT_CREATE; - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { fts_print_doc_id(query); } diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 7e2e477cce3..bcb02704158 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -8128,8 +8128,7 @@ ha_innobase::write_row( if (high_level_read_only) { ib_senderrf(ha_thd(), IB_LOG_LEVEL_WARN, ER_READ_ONLY_MODE); DBUG_RETURN(HA_ERR_TABLE_READONLY); - } else if (m_prebuilt->trx != trx) { - + } else if (UNIV_UNLIKELY(m_prebuilt->trx != trx)) { ib::error() << "The transaction object for the table handle is" " at " << static_cast<const void*>(m_prebuilt->trx) << ", but for the current thread it is at " @@ -9989,7 +9988,7 @@ ha_innobase::ft_init_ext( const CHARSET_INFO* char_set = key->charset(); const char* query = key->ptr(); - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { { ib::info out; out << "keynr=" << keynr << ", '"; diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index d347d0e51a4..d057afef9b5 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -8826,7 +8826,7 @@ foreign_fail: trx_start_for_ddl(trx, TRX_DICT_OP_TABLE); dberr_t error = row_merge_drop_table(trx, ctx->old_table); - if (error != DB_SUCCESS) { + if (UNIV_UNLIKELY(error != DB_SUCCESS)) { ib::error() << "Inplace alter table " << ctx->old_table->name << " dropping copy of the old table failed error " << error diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc index 960bd8113db..584f6e05714 100644 --- a/storage/innobase/handler/i_s.cc +++ b/storage/innobase/handler/i_s.cc @@ -3474,7 +3474,7 @@ i_s_fts_index_table_fill_selected( for (;;) { error = fts_eval_sql(trx, graph); - if (error == DB_SUCCESS) { + if (UNIV_LIKELY(error == DB_SUCCESS)) { fts_sql_commit(trx); break; @@ -3488,7 +3488,7 @@ i_s_fts_index_table_fill_selected( trx->error_state = DB_SUCCESS; } else { ib::error() << "Error occurred while reading" - " FTS index: " << ut_strerr(error); + " FTS index: " << error; break; } } @@ -8086,9 +8086,7 @@ i_s_dict_fill_sys_tablespaces( break; default: - ib::error() - << "File '" << filepath << "' " - << ut_strerr(err); + ib::error() << "File '" << filepath << "' " << err; break; } diff --git a/storage/innobase/include/btr0pcur.ic b/storage/innobase/include/btr0pcur.ic index b5b57050832..6bc5b356dab 100644 --- a/storage/innobase/include/btr0pcur.ic +++ b/storage/innobase/include/btr0pcur.ic @@ -458,7 +458,7 @@ btr_pcur_open_low( index, level, tuple, mode, latch_mode, btr_cursor, 0, file, line, mtr, autoinc); - if (err != DB_SUCCESS) { + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { ib::warn() << " Error code: " << err << " btr_pcur_open_low " << " level: " << level diff --git a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h index 2ff8d74a024..edde6bf516e 100644 --- a/storage/innobase/include/lock0lock.h +++ b/storage/innobase/include/lock0lock.h @@ -571,6 +571,7 @@ lock_has_to_wait( locks are record locks */ /*********************************************************************//** Reports that a transaction id is insensible, i.e., in the future. */ +ATTRIBUTE_COLD void lock_report_trx_id_insanity( /*========================*/ diff --git a/storage/innobase/include/ut0ut.h b/storage/innobase/include/ut0ut.h index 741687c07d7..a19f3db188d 100644 --- a/storage/innobase/include/ut0ut.h +++ b/storage/innobase/include/ut0ut.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2019, MariaDB Corporation. +Copyright (c) 2019, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -389,48 +389,41 @@ operator<<( It contains a std::ostringstream object. The main purpose of this class is to forward operator<< to the underlying std::ostringstream object. Do not use this class directly, instead use one of the derived classes. */ -class logger { -public: - template<typename T> - ATTRIBUTE_COLD - logger& operator<<(const T& rhs) - { - m_oss << rhs; - return(*this); - } - - /** Write the given buffer to the internal string stream object. - @param[in] buf the buffer whose contents will be logged. - @param[in] count the length of the buffer buf. - @return the output stream into which buffer was written. */ - ATTRIBUTE_COLD - std::ostream& - write( - const char* buf, - std::streamsize count) - { - return(m_oss.write(buf, count)); - } - - /** Write the given buffer to the internal string stream object. - @param[in] buf the buffer whose contents will be logged. - @param[in] count the length of the buffer buf. - @return the output stream into which buffer was written. */ - ATTRIBUTE_COLD - std::ostream& - write( - const byte* buf, - std::streamsize count) - { - return(m_oss.write(reinterpret_cast<const char*>(buf), count)); - } - - std::ostringstream m_oss; +class logger +{ protected: - /* This class must not be used directly, hence making the default - constructor protected. */ - ATTRIBUTE_COLD - logger() {} + /* This class must not be used directly */ + ATTRIBUTE_COLD ATTRIBUTE_NOINLINE logger() {} +public: + template<typename T> ATTRIBUTE_COLD ATTRIBUTE_NOINLINE + logger& operator<<(const T& rhs) + { + m_oss << rhs; + return *this; + } + + /** Handle a fixed character string in the same way as a pointer to + an unknown-length character string, to reduce object code bloat. */ + template<size_t N> logger& operator<<(const char (&rhs)[N]) + { return *this << static_cast<const char*>(rhs); } + + /** Output an error code name */ + ATTRIBUTE_COLD logger& operator<<(dberr_t err); + + /** Append a string. + @param buf string buffer + @param size buffer size + @return the output stream */ + ATTRIBUTE_COLD __attribute__((noinline)) + std::ostream &write(const char *buf, std::streamsize size) + { + return m_oss.write(buf, size); + } + + std::ostream &write(const byte *buf, std::streamsize size) + { return write(reinterpret_cast<const char*>(buf), size); } + + std::ostringstream m_oss; }; /** The class info is used to emit informational log messages. It is to be diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 11c080066d6..c4c045ffba3 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -320,6 +320,7 @@ static FILE* lock_latest_err_file; /*********************************************************************//** Reports that a transaction id is insensible, i.e., in the future. */ +ATTRIBUTE_COLD void lock_report_trx_id_insanity( /*========================*/ @@ -330,7 +331,7 @@ lock_report_trx_id_insanity( trx_id_t max_trx_id) /*!< in: trx_sys_get_max_trx_id() */ { ib::error() - << "Transaction id " << trx_id + << "Transaction id " << ib::hex(trx_id) << " associated with record" << rec_offsets_print(rec, offsets) << " in index " << index->name << " of table " << index->table->name @@ -359,7 +360,7 @@ lock_check_trx_id_sanity( trx_id_t max_trx_id = trx_sys_get_max_trx_id(); bool is_ok = trx_id < max_trx_id; - if (!is_ok) { + if (UNIV_UNLIKELY(!is_ok)) { lock_report_trx_id_insanity( trx_id, rec, index, offsets, max_trx_id); } @@ -756,7 +757,7 @@ lock_rec_has_to_wait( wsrep_thd_is_BF(lock2->trx->mysql_thd, TRUE)) { mtr_t mtr; - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "BF-BF lock conflict, locking: " << for_locking; lock_rec_print(stderr, lock2, mtr); @@ -770,7 +771,7 @@ lock_rec_has_to_wait( lock2->trx->mysql_thd) && (type_mode & LOCK_MODE_MASK) == LOCK_X && (lock2->type_mode & LOCK_MODE_MASK) == LOCK_X) { - if (for_locking || wsrep_debug) { + if (UNIV_UNLIKELY(for_locking || wsrep_debug)) { /* exclusive lock conflicts are not accepted */ ib::info() << @@ -797,7 +798,7 @@ lock_rec_has_to_wait( lock2->index->n_user_defined_cols operation is on uniq index */ - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "BF conflict, modes: " << type_mode << ":" << lock2->type_mode @@ -1111,7 +1112,7 @@ wsrep_kill_victim( trx->mysql_thd, lock->trx->mysql_thd))) { if (lock->trx->lock.que_state == TRX_QUE_LOCK_WAIT) { - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "WSREP: BF victim waiting\n"; } /* cannot release lock, until our lock @@ -1344,13 +1345,14 @@ lock_number_of_tables_locked( /*============== RECORD LOCK CREATION AND QUEUE MANAGEMENT =============*/ #ifdef WITH_WSREP +ATTRIBUTE_COLD static void wsrep_print_wait_locks( /*===================*/ lock_t* c_lock) /* conflicting lock to print */ { - if (wsrep_debug && c_lock->trx->lock.wait_lock != c_lock) { + if (c_lock->trx->lock.wait_lock != c_lock) { mtr_t mtr; ib::info() << "WSREP: c_lock != wait lock"; ib::info() << " SQL: " @@ -1502,7 +1504,7 @@ lock_rec_create_low( c_lock->trx->lock.was_chosen_as_deadlock_victim = TRUE; - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { wsrep_print_wait_locks(c_lock); } @@ -1529,7 +1531,7 @@ lock_rec_create_low( trx_mutex_exit(c_lock->trx); - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "WSREP: c_lock canceled " << ib::hex(c_lock->trx->id) << " SQL: " @@ -1794,7 +1796,7 @@ lock_rec_enqueue_waiting( transaction as a victim, it is possible that we already have the lock now granted! */ #ifdef WITH_WSREP - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "WSREP: BF thread got lock granted early, ID " << ib::hex(trx->id) << " query: " << wsrep_thd_query(trx->mysql_thd); } @@ -2213,7 +2215,7 @@ lock_rec_has_to_wait_in_queue( #ifdef WITH_WSREP if (wsrep_thd_is_BF(wait_lock->trx->mysql_thd, FALSE) && wsrep_thd_is_BF(lock->trx->mysql_thd, TRUE)) { - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { mtr_t mtr; ib::info() << "WSREP: waiting BF trx: " << ib::hex(wait_lock->trx->id) << " query: " << wsrep_thd_query(wait_lock->trx->mysql_thd); @@ -3657,7 +3659,7 @@ lock_table_create( if (wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { ut_list_insert(table->locks, c_lock, lock, TableLockGetNode()); - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "table lock BF conflict for " << ib::hex(c_lock->trx->id) << " SQL: " @@ -3673,7 +3675,7 @@ lock_table_create( if (c_lock->trx->lock.que_state == TRX_QUE_LOCK_WAIT) { c_lock->trx->lock.was_chosen_as_deadlock_victim = TRUE; - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { wsrep_print_wait_locks(c_lock); } @@ -3684,7 +3686,7 @@ lock_table_create( c_lock->trx->lock.wait_lock); trx_mutex_enter(trx); - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "WSREP: c_lock canceled " << ib::hex(c_lock->trx->id) << " SQL: " @@ -3957,9 +3959,9 @@ lock_table_other_has_incompatible( #ifdef WITH_WSREP if (lock->trx->is_wsrep()) { - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "WSREP: table lock abort for table:" - << table->name.m_name; + << table->name; ib::info() << " SQL: " << wsrep_thd_query(lock->trx->mysql_thd); } diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 4ef22468f05..2d0f3c83e3b 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -589,7 +589,7 @@ fil_name_parse( ut_ad(0); // the caller checked this /* fall through */ case MLOG_FILE_NAME: - if (corrupt) { + if (UNIV_UNLIKELY(corrupt)) { ib::error() << "MLOG_FILE_NAME incorrect:" << ptr; recv_sys->found_corrupt_log = true; break; @@ -599,7 +599,7 @@ fil_name_parse( reinterpret_cast<char*>(ptr), len, space_id, false); break; case MLOG_FILE_DELETE: - if (corrupt) { + if (UNIV_UNLIKELY(corrupt)) { ib::error() << "MLOG_FILE_DELETE incorrect:" << ptr; recv_sys->found_corrupt_log = true; break; @@ -627,7 +627,7 @@ fil_name_parse( } break; case MLOG_FILE_RENAME2: - if (corrupt) { + if (UNIV_UNLIKELY(corrupt)) { ib::error() << "MLOG_FILE_RENAME2 incorrect:" << ptr; recv_sys->found_corrupt_log = true; } @@ -668,7 +668,7 @@ fil_name_parse( } } - if (corrupt) { + if (UNIV_UNLIKELY(corrupt)) { ib::error() << "MLOG_FILE_RENAME2 new_name incorrect:" << ptr << " new_name: " << new_name; recv_sys->found_corrupt_log = true; @@ -2697,6 +2697,7 @@ recv_calc_lsn_on_data_add( @param[in] space tablespace ID (could be garbage) @param[in] page_no page number (could be garbage) @return whether processing should continue */ +ATTRIBUTE_COLD static bool recv_report_corrupt_log( @@ -2713,7 +2714,8 @@ recv_report_corrupt_log( ib::info() << "Log record type " << type << ", page " << space << ":" << page_no << ". Log parsing proceeded successfully up to " << recv_sys->recovered_lsn << ". Previous log record type " - << recv_previous_parsed_rec_type << ", is multi " + << recv_previous_parsed_rec_type + << ", is multi " << recv_previous_parsed_rec_is_multi << " Recv offset " << ptr_offset << ", prev " << recv_previous_parsed_rec_offset; @@ -2853,12 +2855,12 @@ loop: len = recv_parse_log_rec(&type, ptr, end_ptr, &space, &page_no, apply, &body); - if (recv_sys->found_corrupt_log) { + if (UNIV_UNLIKELY(recv_sys->found_corrupt_log)) { recv_report_corrupt_log(ptr, type, space, page_no); return(true); } - if (recv_sys->found_corrupt_fs) { + if (UNIV_UNLIKELY(recv_sys->found_corrupt_fs)) { return(true); } @@ -2982,7 +2984,7 @@ loop: &type, ptr, end_ptr, &space, &page_no, false, &body); - if (recv_sys->found_corrupt_log) { + if (UNIV_UNLIKELY(recv_sys->found_corrupt_log)) { corrupted_log: recv_report_corrupt_log( ptr, type, space, page_no); @@ -3075,13 +3077,13 @@ corrupted_log: &type, ptr, end_ptr, &space, &page_no, apply, &body); - if (recv_sys->found_corrupt_log + if (UNIV_UNLIKELY(recv_sys->found_corrupt_log) && !recv_report_corrupt_log( ptr, type, space, page_no)) { return(true); } - if (recv_sys->found_corrupt_fs) { + if (UNIV_UNLIKELY(recv_sys->found_corrupt_fs)) { return(true); } @@ -3597,7 +3599,7 @@ recv_validate_tablespace(bool rescan, bool& missing_tablespace) for (recv_spaces_t::iterator i = recv_spaces.begin(); i != recv_spaces.end(); i++) { - if (i->second.status != file_name_t::MISSING) { + if (UNIV_LIKELY(i->second.status != file_name_t::MISSING)) { continue; } diff --git a/storage/innobase/page/page0page.cc b/storage/innobase/page/page0page.cc index fa0239b4259..d28d2f9a082 100644 --- a/storage/innobase/page/page0page.cc +++ b/storage/innobase/page/page0page.cc @@ -2438,7 +2438,10 @@ page_validate( if (UNIV_UNLIKELY((ibool) !!page_is_comp(page) != dict_table_is_comp(index->table))) { ib::error() << "'compact format' flag mismatch"; - goto func_exit2; +func_exit2: + ib::error() << "Apparent corruption in space " + << page_get_space_id(page) << " page " + << page_get_page_no(page) << " index " << index->name; } if (page_is_comp(page)) { if (UNIV_UNLIKELY(!page_simple_validate_new(page))) { @@ -2480,15 +2483,14 @@ page_validate( n_slots = page_dir_get_n_slots(page); - if (UNIV_UNLIKELY(!(page_header_get_ptr(page, PAGE_HEAP_TOP) - <= page_dir_get_nth_slot(page, n_slots - 1)))) { + const void* top = page_header_get_ptr(page, PAGE_HEAP_TOP); + const void* last_slot = page_dir_get_nth_slot(page, n_slots - 1); + if (UNIV_UNLIKELY(top > last_slot)) { ib::warn() << "Record heap and dir overlap on space " << page_get_space_id(page) << " page " << page_get_page_no(page) << " index " << index->name - << ", " << page_header_get_ptr(page, PAGE_HEAP_TOP) - << ", " << page_dir_get_nth_slot(page, n_slots - 1); - + << ", " << top << ", " << last_slot; goto func_exit; } @@ -2747,10 +2749,7 @@ func_exit: mem_heap_free(heap); if (UNIV_UNLIKELY(ret == FALSE)) { -func_exit2: - ib::error() << "Apparent corruption in space " - << page_get_space_id(page) << " page " - << page_get_page_no(page) << " index " << index->name; + goto func_exit2; } return(ret); diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc index 2bd99a48628..c7c86fb337b 100644 --- a/storage/innobase/row/row0ftsort.cc +++ b/storage/innobase/row/row0ftsort.cc @@ -864,7 +864,8 @@ loop: num_doc_processed++; - if (fts_enable_diag_print && num_doc_processed % 10000 == 1) { + if (UNIV_UNLIKELY(fts_enable_diag_print) + && num_doc_processed % 10000 == 1) { ib::info() << "Number of documents processed: " << num_doc_processed; #ifdef FTS_INTERNAL_DIAG_PRINT @@ -1009,7 +1010,7 @@ exit: } } - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { DEBUG_FTS_SORT_PRINT(" InnoDB_FTS: start merge sort\n"); } @@ -1040,7 +1041,7 @@ exit: } func_exit: - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { DEBUG_FTS_SORT_PRINT(" InnoDB_FTS: complete merge sort\n"); } @@ -1215,11 +1216,9 @@ row_merge_write_fts_word( error = row_merge_write_fts_node(ins_ctx, &word->text, fts_node); - if (error != DB_SUCCESS) { - ib::error() << "Failed to write word " - << word->text.f_str << " to FTS auxiliary" - " index table, error (" << ut_strerr(error) - << ")"; + if (UNIV_UNLIKELY(error != DB_SUCCESS)) { + ib::error() << "Failed to write word to FTS auxiliary" + " index table, error " << error; ret = error; } @@ -1633,7 +1632,7 @@ row_fts_merge_insert( count_diag += (int) psort_info[i].merge_file[id]->n_rec; } - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { ib::info() << "InnoDB_FTS: to insert " << count_diag << " records"; } @@ -1801,7 +1800,7 @@ exit: mem_heap_free(heap); - if (fts_enable_diag_print) { + if (UNIV_UNLIKELY(fts_enable_diag_print)) { ib::info() << "InnoDB_FTS: inserted " << count << " records"; } diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index d92bcb761e4..ed78b2a154d 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -1885,7 +1885,7 @@ PageConverter::update_index_page( row_index_t* index = find_index(id); - if (index == 0) { + if (UNIV_UNLIKELY(!index)) { ib::error() << "Page for tablespace " << m_space << " is index page with id " << id << " but that index is not found from" @@ -2132,7 +2132,7 @@ row_import_discard_changes( ib::info() << "Discarding tablespace of table " << prebuilt->table->name - << ": " << ut_strerr(err); + << ": " << err; if (trx->dict_operation_lock_mode != RW_X_LATCH) { ut_a(trx->dict_operation_lock_mode == 0); diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc index 8c8f1674374..e44b9aae626 100644 --- a/storage/innobase/row/row0merge.cc +++ b/storage/innobase/row/row0merge.cc @@ -4917,7 +4917,8 @@ wait_again: goto func_exit; } - if (indexes[i]->type & DICT_FTS && fts_enable_diag_print) { + if (indexes[i]->type & DICT_FTS + && UNIV_UNLIKELY(fts_enable_diag_print)) { ib::info() << "Finished building full-text index " << indexes[i]->name; } diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 9bbd531cb9a..d3efc5fc256 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -782,8 +782,7 @@ handle_new_error: " foreign constraints and try again"; goto rollback_to_savept; default: - ib::fatal() << "Unknown error code " << err << ": " - << ut_strerr(err); + ib::fatal() << "Unknown error " << err; } if (trx->error_state != DB_SUCCESS) { @@ -3161,10 +3160,10 @@ row_drop_ancillary_fts_tables( dberr_t err = fts_drop_tables(trx, table); - if (err != DB_SUCCESS) { + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { ib::error() << " Unable to remove ancillary FTS" " tables for table " - << table->name << " : " << ut_strerr(err); + << table->name << " : " << err; return(err); } @@ -4009,10 +4008,10 @@ loop: table_name, trx, SQLCOM_DROP_DB); trx_commit_for_mysql(trx); - if (err != DB_SUCCESS) { + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { ib::error() << "DROP DATABASE " << ut_get_name(trx, name) << " failed" - " with error (" << ut_strerr(err) << ") for" + " with error (" << err << ") for" " table " << ut_get_name(trx, table_name); ut_free(table_name); break; diff --git a/storage/innobase/row/row0undo.cc b/storage/innobase/row/row0undo.cc index 5f3e3de7f8d..b65b173fedb 100644 --- a/storage/innobase/row/row0undo.cc +++ b/storage/innobase/row/row0undo.cc @@ -358,15 +358,8 @@ row_undo_step( trx->error_state = err; - if (err != DB_SUCCESS) { - /* SQL error detected */ - - if (err == DB_OUT_OF_FILE_SPACE) { - ib::fatal() << "Out of tablespace during rollback." - " Consider increasing your tablespace."; - } - - ib::fatal() << "Error (" << ut_strerr(err) << ") in rollback."; + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { + ib::fatal() << "Error (" << err << ") in rollback."; } return(thr); diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc index a1e840a9cb9..a7cd06d25fd 100644 --- a/storage/innobase/row/row0upd.cc +++ b/storage/innobase/row/row0upd.cc @@ -2472,7 +2472,7 @@ row_upd_sec_index_entry( err = DB_SUCCESS; break; case DB_LOCK_WAIT: - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::warn() << "WSREP: sec index FK lock wait" << " index " << index->name << " table " << index->table->name @@ -2480,7 +2480,7 @@ row_upd_sec_index_entry( } break; case DB_DEADLOCK: - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::warn() << "WSREP: sec index FK check fail for deadlock" << " index " << index->name << " table " << index->table->name @@ -2488,7 +2488,7 @@ row_upd_sec_index_entry( } break; default: - ib::error() << "WSREP: referenced FK check fail: " << ut_strerr(err) + ib::error() << "WSREP: referenced FK check fail: " << err << " index " << index->name << " table " << index->table->name << " query " << wsrep_thd_query(trx->mysql_thd); @@ -2787,14 +2787,14 @@ check_fk: err = DB_SUCCESS; break; case DB_DEADLOCK: - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::warn() << "WSREP: sec index FK check fail for deadlock" << " index " << index->name << " table " << index->table->name; } goto err_exit; default: - ib::error() << "WSREP: referenced FK check fail: " << ut_strerr(err) + ib::error() << "WSREP: referenced FK check fail: " << err << " index " << index->name << " table " << index->table->name; goto err_exit; @@ -3013,14 +3013,14 @@ row_upd_del_mark_clust_rec( err = DB_SUCCESS; break; case DB_DEADLOCK: - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::warn() << "WSREP: sec index FK check fail for deadlock" << " index " << index->name << " table " << index->table->name; } break; default: - ib::error() << "WSREP: referenced FK check fail: " << ut_strerr(err) + ib::error() << "WSREP: referenced FK check fail: " << err << " index " << index->name << " table " << index->table->name; diff --git a/storage/innobase/row/row0vers.cc b/storage/innobase/row/row0vers.cc index 3627c659231..09509444ea4 100644 --- a/storage/innobase/row/row0vers.cc +++ b/storage/innobase/row/row0vers.cc @@ -119,7 +119,7 @@ row_vers_impl_x_locked_low( if (trx == 0) { /* The transaction that modified or inserted clust_rec is no longer active, or it is corrupt: no implicit lock on rec */ - if (corrupt) { + if (UNIV_UNLIKELY(corrupt)) { lock_report_trx_id_insanity( trx_id, clust_rec, clust_index, clust_offsets, trx_sys_get_max_trx_id()); diff --git a/storage/innobase/srv/srv0conc.cc b/storage/innobase/srv/srv0conc.cc index 9936635a055..b420ca6d8ee 100644 --- a/storage/innobase/srv/srv0conc.cc +++ b/storage/innobase/srv/srv0conc.cc @@ -123,7 +123,7 @@ srv_conc_enter_innodb_with_atomics( ulint sleep_in_us; #ifdef WITH_WSREP if (trx->is_wsrep() && wsrep_trx_is_aborting(trx->mysql_thd)) { - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "srv_conc_enter due to MUST_ABORT"; } @@ -324,14 +324,14 @@ wsrep_srv_conc_cancel_wait( srv_conc_enter_innodb_with_atomics(). No need to cancel here, thr will wake up after os_sleep and let to enter innodb */ - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "WSREP: conc slot cancel, no atomics"; } #else // JAN: TODO: MySQL 5.7 //os_fast_mutex_lock(&srv_conc_mutex); if (trx->wsrep_event) { - if (wsrep_debug) { + if (UNIV_UNLIKELY(wsrep_debug)) { ib::info() << "WSREP: conc slot cancel"; } os_event_set(trx->wsrep_event); diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index 964da389ca5..d6ad7bf437a 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -1329,7 +1329,7 @@ srv_init_abort_low( #ifdef UNIV_DEBUG " at " << innobase_basename(file) << "[" << line << "]" #endif /* UNIV_DEBUG */ - " with error " << ut_strerr(err) << ". You may need" + " with error " << err << ". You may need" " to delete the ibdata1 file before trying to start" " up again."; } else { @@ -1337,7 +1337,7 @@ srv_init_abort_low( #ifdef UNIV_DEBUG " at " << innobase_basename(file) << "[" << line << "]" #endif /* UNIV_DEBUG */ - " with error " << ut_strerr(err); + " with error " << err; } srv_shutdown_all_bg_threads(); diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc index 81ba1b731bf..2f728b22fb2 100644 --- a/storage/innobase/trx/trx0purge.cc +++ b/storage/innobase/trx/trx0purge.cc @@ -698,12 +698,11 @@ namespace undo { os_file_close(handle); - if (err != DB_SUCCESS) { - + if (UNIV_UNLIKELY(err != DB_SUCCESS)) { ib::info() << "Unable to read '" << log_file_name << "' : " - << ut_strerr(err); + << err; os_file_delete( innodb_log_file_key, log_file_name); diff --git a/storage/innobase/trx/trx0rec.cc b/storage/innobase/trx/trx0rec.cc index 0ad9ff0dae8..ee022b4f1fd 100644 --- a/storage/innobase/trx/trx0rec.cc +++ b/storage/innobase/trx/trx0rec.cc @@ -1565,9 +1565,7 @@ trx_undo_update_rec_get_update( << " fields " << BUG_REPORT_MSG << ". Run also CHECK TABLE " << index->table->name << "." - " n_fields = " << n_fields << ", i = " << i - << ", ptr " << ptr; - + " n_fields = " << n_fields << ", i = " << i; ut_ad(0); *upd = NULL; return(NULL); diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 5768f0fc890..a19ab2c9c98 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -478,9 +478,8 @@ trx_validate_state_before_free(trx_t* trx) ut_ad(!trx->mysql_n_tables_locked); ut_ad(!trx->internal); - if (trx->declared_to_be_inside_innodb) { - - ib::error() << "Freeing a trx (" << trx << ", " + if (UNIV_UNLIKELY(trx->declared_to_be_inside_innodb)) { + ib::error() << "Freeing a trx (" << trx_get_id_for_print(trx) << ") which is declared" " to be processing inside InnoDB"; diff --git a/storage/innobase/ut/ut0ut.cc b/storage/innobase/ut/ut0ut.cc index b50735a391d..c6822c1d74e 100644 --- a/storage/innobase/ut/ut0ut.cc +++ b/storage/innobase/ut/ut0ut.cc @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1994, 2017, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2017, 2019, MariaDB Corporation. +Copyright (c) 2017, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -614,6 +614,12 @@ ut_basename_noext( namespace ib { +ATTRIBUTE_COLD logger& logger::operator<<(dberr_t err) +{ + m_oss << ut_strerr(err); + return *this; +} + info::~info() { sql_print_information("InnoDB: %s", m_oss.str().c_str()); |