Commit c9e56d5c authored by Sergei Golubchik's avatar Sergei Golubchik

5.5.48-37.8

parent 3cfd36bb
/*****************************************************************************
Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
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
......@@ -2217,7 +2217,10 @@ buf_flush_stat_update(void)
ib_uint64_t lsn;
ulint n_flushed;
lsn = log_get_lsn();
if (!log_peek_lsn(&lsn)) {
return;
}
if (buf_flush_stat_cur.redo == 0) {
/* First time around. Just update the current LSN
and return. */
......
......@@ -4498,7 +4498,7 @@ building based on the assumption that there is no concurrent
index creation/drop and DMLs that requires index lookup. All table
handle will be closed before the index creation/drop.
@return TRUE if index translation table built successfully */
static
UNIV_INTERN
ibool
innobase_build_index_translation(
/*=============================*/
......
......@@ -347,3 +347,26 @@ innobase_index_name_is_reserved(
ulint num_of_keys); /*!< in: Number of indexes to
be created. */
/*******************************************************************//**
This function builds a translation table in INNOBASE_SHARE
structure for fast index location with mysql array number from its
table->key_info structure. This also provides the necessary translation
between the key order in mysql key_info and Innodb ib_table->indexes if
they are not fully matched with each other.
Note we do not have any mutex protecting the translation table
building based on the assumption that there is no concurrent
index creation/drop and DMLs that requires index lookup. All table
handle will be closed before the index creation/drop.
@return TRUE if index translation table built successfully */
UNIV_INTERN
ibool
innobase_build_index_translation(
/*=============================*/
const TABLE* table, /*!< in: table in MySQL data
dictionary */
dict_table_t* ib_table, /*!< in: table in Innodb data
dictionary */
INNOBASE_SHARE* share); /*!< in/out: share structure
where index translation table
will be constructed in. */
......@@ -1082,6 +1082,22 @@ ha_innobase::final_add_index(
trx_free_for_mysql(trx);
/* Rebuild index translation table now for temporary tables if we are
restoring secondary keys, as ha_innobase::open will not be called for
the next access. */
if (add->indexed_table == prebuilt->table
&& dict_table_is_temporary(prebuilt->table))
{
if (!innobase_build_index_translation(add_arg->table,
prebuilt->table, share))
{
/* We don't know whether index translation build failed
because of DD mismatch or OOM, return non-specific
error code. */
err = -1;
}
}
/* There might be work for utility threads.*/
srv_active_wake_master_thread();
......
......@@ -64,7 +64,7 @@ component, i.e. we show M.N.P as M.N */
(INNODB_VERSION_MAJOR << 8 | INNODB_VERSION_MINOR)
#ifndef PERCONA_INNODB_VERSION
#define PERCONA_INNODB_VERSION 37.7
#define PERCONA_INNODB_VERSION 37.8
#endif
#define INNODB_VERSION_STR MYSQL_SERVER_VERSION
......
/*****************************************************************************
Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, 2009 Google Inc.
Copyright (c) 2009, Percona Inc.
......@@ -2880,6 +2880,8 @@ srv_lock_timeout_thread(
/*********************************************************************//**
A thread which prints warnings about semaphore waits which have lasted
too long. These can be used to track bugs which cause hangs.
Note: In order to make sync_arr_wake_threads_if_sema_free work as expected,
we should avoid waiting any mutexes in this function!
@return a dummy parameter */
UNIV_INTERN
os_thread_ret_t
......@@ -2917,23 +2919,22 @@ srv_error_monitor_thread(
/* Try to track a strange bug reported by Harald Fuchs and others,
where the lsn seems to decrease at times */
if (log_peek_lsn(&new_lsn)) {
if (new_lsn < old_lsn) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Error: old log sequence number %llu"
" was greater\n"
"InnoDB: than the new log sequence number %llu!\n"
"InnoDB: Please submit a bug report"
" to http://bugs.mysql.com\n",
old_lsn, new_lsn);
ut_ad(0);
}
new_lsn = log_get_lsn();
if (new_lsn < old_lsn) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Error: old log sequence number %llu"
" was greater\n"
"InnoDB: than the new log sequence number %llu!\n"
"InnoDB: Please submit a bug report"
" to http://bugs.mysql.com\n",
old_lsn, new_lsn);
ut_ad(0);
old_lsn = new_lsn;
}
old_lsn = new_lsn;
if (difftime(time(NULL), srv_last_monitor_time) > 60) {
/* We referesh InnoDB Monitor values so that averages are
printed from at most 60 last seconds */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment