summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/my_compiler.h4
-rw-r--r--storage/innobase/buf/buf0buf.cc23
-rw-r--r--storage/innobase/buf/buf0dblwr.cc4
-rw-r--r--storage/innobase/buf/buf0flu.cc15
-rw-r--r--storage/innobase/buf/buf0lru.cc43
-rw-r--r--storage/innobase/dict/dict0crea.cc19
-rw-r--r--storage/innobase/dict/dict0load.cc4
-rw-r--r--storage/innobase/dict/dict0stats.cc10
-rw-r--r--storage/innobase/fil/fil0crypt.cc17
-rw-r--r--storage/innobase/fil/fil0fil.cc6
-rw-r--r--storage/innobase/fsp/fsp0file.cc4
-rw-r--r--storage/innobase/fsp/fsp0fsp.cc2
-rw-r--r--storage/innobase/fts/fts0config.cc16
-rw-r--r--storage/innobase/fts/fts0fts.cc53
-rw-r--r--storage/innobase/fts/fts0opt.cc40
-rw-r--r--storage/innobase/fts/fts0que.cc25
-rw-r--r--storage/innobase/handler/ha_innodb.cc5
-rw-r--r--storage/innobase/handler/handler0alter.cc2
-rw-r--r--storage/innobase/handler/i_s.cc8
-rw-r--r--storage/innobase/include/btr0pcur.ic2
-rw-r--r--storage/innobase/include/lock0lock.h1
-rw-r--r--storage/innobase/include/ut0ut.h77
-rw-r--r--storage/innobase/lock/lock0lock.cc34
-rw-r--r--storage/innobase/log/log0recv.cc24
-rw-r--r--storage/innobase/page/page0page.cc19
-rw-r--r--storage/innobase/row/row0ftsort.cc19
-rw-r--r--storage/innobase/row/row0import.cc4
-rw-r--r--storage/innobase/row/row0merge.cc3
-rw-r--r--storage/innobase/row/row0mysql.cc11
-rw-r--r--storage/innobase/row/row0undo.cc11
-rw-r--r--storage/innobase/row/row0upd.cc14
-rw-r--r--storage/innobase/row/row0vers.cc2
-rw-r--r--storage/innobase/srv/srv0conc.cc6
-rw-r--r--storage/innobase/srv/srv0start.cc4
-rw-r--r--storage/innobase/trx/trx0purge.cc5
-rw-r--r--storage/innobase/trx/trx0rec.cc4
-rw-r--r--storage/innobase/trx/trx0trx.cc5
-rw-r--r--storage/innobase/ut/ut0ut.cc8
38 files changed, 227 insertions, 326 deletions
diff --git a/include/my_compiler.h b/include/my_compiler.h
index 12e6c1a087c..faffd852b5d 100644
--- a/include/my_compiler.h
+++ b/include/my_compiler.h
@@ -2,6 +2,7 @@
#define MY_COMPILER_INCLUDED
/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ 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
@@ -150,6 +151,7 @@ struct my_aligned_storage
#ifdef __GNUC__
# define ATTRIBUTE_NORETURN __attribute__((noreturn))
+# define ATTRIBUTE_NOINLINE __attribute__((noinline))
# if MY_GNUC_PREREQ(4,3)
/** Starting with GCC 4.3, the "cold" attribute is used to inform the
compiler that a function is unlikely executed. The function is
@@ -163,8 +165,10 @@ rarely invoked function for size instead for speed. */
# endif
#elif defined _MSC_VER
# define ATTRIBUTE_NORETURN __declspec(noreturn)
+# define ATTRIBUTE_NOINLINE __declspec(noinline)
#else
# define ATTRIBUTE_NORETURN /* empty */
+# define ATTRIBUTE_NOINLINE /* empty */
#endif
#ifndef ATTRIBUTE_COLD
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());