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 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 the terms of the GNU General Public License as published by the Free Software
...@@ -2217,7 +2217,10 @@ buf_flush_stat_update(void) ...@@ -2217,7 +2217,10 @@ buf_flush_stat_update(void)
ib_uint64_t lsn; ib_uint64_t lsn;
ulint n_flushed; ulint n_flushed;
lsn = log_get_lsn(); if (!log_peek_lsn(&lsn)) {
return;
}
if (buf_flush_stat_cur.redo == 0) { if (buf_flush_stat_cur.redo == 0) {
/* First time around. Just update the current LSN /* First time around. Just update the current LSN
and return. */ and return. */
......
...@@ -4498,7 +4498,7 @@ building based on the assumption that there is no concurrent ...@@ -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 index creation/drop and DMLs that requires index lookup. All table
handle will be closed before the index creation/drop. handle will be closed before the index creation/drop.
@return TRUE if index translation table built successfully */ @return TRUE if index translation table built successfully */
static UNIV_INTERN
ibool ibool
innobase_build_index_translation( innobase_build_index_translation(
/*=============================*/ /*=============================*/
......
...@@ -347,3 +347,26 @@ innobase_index_name_is_reserved( ...@@ -347,3 +347,26 @@ innobase_index_name_is_reserved(
ulint num_of_keys); /*!< in: Number of indexes to ulint num_of_keys); /*!< in: Number of indexes to
be created. */ 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( ...@@ -1082,6 +1082,22 @@ ha_innobase::final_add_index(
trx_free_for_mysql(trx); 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.*/ /* There might be work for utility threads.*/
srv_active_wake_master_thread(); srv_active_wake_master_thread();
......
...@@ -64,7 +64,7 @@ component, i.e. we show M.N.P as M.N */ ...@@ -64,7 +64,7 @@ component, i.e. we show M.N.P as M.N */
(INNODB_VERSION_MAJOR << 8 | INNODB_VERSION_MINOR) (INNODB_VERSION_MAJOR << 8 | INNODB_VERSION_MINOR)
#ifndef PERCONA_INNODB_VERSION #ifndef PERCONA_INNODB_VERSION
#define PERCONA_INNODB_VERSION 37.7 #define PERCONA_INNODB_VERSION 37.8
#endif #endif
#define INNODB_VERSION_STR MYSQL_SERVER_VERSION #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) 2008, 2009 Google Inc.
Copyright (c) 2009, Percona Inc. Copyright (c) 2009, Percona Inc.
...@@ -2880,6 +2880,8 @@ exit_func: ...@@ -2880,6 +2880,8 @@ exit_func:
/*********************************************************************//** /*********************************************************************//**
A thread which prints warnings about semaphore waits which have lasted A thread which prints warnings about semaphore waits which have lasted
too long. These can be used to track bugs which cause hangs. 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 */ @return a dummy parameter */
UNIV_INTERN UNIV_INTERN
os_thread_ret_t os_thread_ret_t
...@@ -2917,9 +2919,7 @@ loop: ...@@ -2917,9 +2919,7 @@ loop:
/* Try to track a strange bug reported by Harald Fuchs and others, /* Try to track a strange bug reported by Harald Fuchs and others,
where the lsn seems to decrease at times */ where the lsn seems to decrease at times */
if (log_peek_lsn(&new_lsn)) {
new_lsn = log_get_lsn();
if (new_lsn < old_lsn) { if (new_lsn < old_lsn) {
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
fprintf(stderr, fprintf(stderr,
...@@ -2933,6 +2933,7 @@ loop: ...@@ -2933,6 +2933,7 @@ loop:
} }
old_lsn = new_lsn; old_lsn = new_lsn;
}
if (difftime(time(NULL), srv_last_monitor_time) > 60) { if (difftime(time(NULL), srv_last_monitor_time) > 60) {
/* We referesh InnoDB Monitor values so that averages are /* We referesh InnoDB Monitor values so that averages are
......
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