summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2012-08-22 09:56:20 +0200
committerSergei Golubchik <sergii@pisem.net>2012-08-22 09:56:20 +0200
commit0af0e7a70a2ae418716cb6b9be2457e160cee0f5 (patch)
treef032354380e8c02e831cce8fbb6e3b36af41ba7d /storage
parent80b3f7470536503ffe1103dda3dea3f29b7c9641 (diff)
parent651ac12e8821a994e6176e63eef3e87b70f9746c (diff)
downloadmariadb-git-0af0e7a70a2ae418716cb6b9be2457e160cee0f5.tar.gz
merge XtraDB 1.1.8-27.0 from Percona-Server-5.5.25a-rel27.1
Diffstat (limited to 'storage')
-rw-r--r--storage/xtradb/btr/btr0cur.c2
-rw-r--r--storage/xtradb/buf/buf0flu.c9
-rw-r--r--storage/xtradb/dict/dict0load.c4
-rw-r--r--storage/xtradb/fil/fil0fil.c7
-rw-r--r--storage/xtradb/handler/ha_innodb.cc25
-rw-r--r--storage/xtradb/handler/ha_innodb.h1
-rw-r--r--storage/xtradb/handler/i_s.cc22
-rw-r--r--storage/xtradb/include/srv0srv.h1
-rw-r--r--storage/xtradb/include/univ.i5
-rw-r--r--storage/xtradb/srv/srv0start.c3
-rw-r--r--storage/xtradb/sync/sync0arr.c5
11 files changed, 63 insertions, 21 deletions
diff --git a/storage/xtradb/btr/btr0cur.c b/storage/xtradb/btr/btr0cur.c
index e093dabebf1..26db7329b7e 100644
--- a/storage/xtradb/btr/btr0cur.c
+++ b/storage/xtradb/btr/btr0cur.c
@@ -3604,6 +3604,8 @@ btr_estimate_n_rows_in_range(
n_rows = n_rows * 2;
}
+ DBUG_EXECUTE_IF("bug14007649", return(n_rows););
+
/* Do not estimate the number of rows in the range
to over 1 / 2 of the estimated rows in the whole
table */
diff --git a/storage/xtradb/buf/buf0flu.c b/storage/xtradb/buf/buf0flu.c
index bb921928653..39351cd3678 100644
--- a/storage/xtradb/buf/buf0flu.c
+++ b/storage/xtradb/buf/buf0flu.c
@@ -1846,8 +1846,6 @@ buf_flush_batch(
}
#endif /* UNIV_DEBUG */
- srv_buf_pool_flushed += count;
-
return(count);
}
@@ -1874,13 +1872,6 @@ buf_flush_common(
#endif /* UNIV_DEBUG */
srv_buf_pool_flushed += page_count;
-
- if (flush_type == BUF_FLUSH_LRU) {
- /* We keep track of all flushes happening as part of LRU
- flush. When estimating the desired rate at which flush_list
- should be flushed we factor in this value. */
- buf_lru_flush_page_count += page_count;
- }
}
/******************************************************************//**
diff --git a/storage/xtradb/dict/dict0load.c b/storage/xtradb/dict/dict0load.c
index 44492960bb8..0ef74ea8b7c 100644
--- a/storage/xtradb/dict/dict0load.c
+++ b/storage/xtradb/dict/dict0load.c
@@ -178,7 +178,7 @@ dict_print(void)
monitor printout */
mutex_enter(&kernel_mutex);
- srv_fatal_semaphore_wait_threshold += 7200; /* 2 hours */
+ srv_fatal_semaphore_wait_threshold += SRV_SEMAPHORE_WAIT_EXTENSION;
mutex_exit(&kernel_mutex);
heap = mem_heap_create(1000);
@@ -215,7 +215,7 @@ dict_print(void)
/* Restore the fatal semaphore wait timeout */
mutex_enter(&kernel_mutex);
- srv_fatal_semaphore_wait_threshold -= 7200; /* 2 hours */
+ srv_fatal_semaphore_wait_threshold -= SRV_SEMAPHORE_WAIT_EXTENSION;
mutex_exit(&kernel_mutex);
}
diff --git a/storage/xtradb/fil/fil0fil.c b/storage/xtradb/fil/fil0fil.c
index 2b67bdafeb9..3dd00594ee5 100644
--- a/storage/xtradb/fil/fil0fil.c
+++ b/storage/xtradb/fil/fil0fil.c
@@ -1932,7 +1932,7 @@ fil_inc_pending_ops(
if (space == NULL) {
fprintf(stderr,
- "InnoDB: Error: trying to do ibuf merge to a"
+ "InnoDB: Error: trying to do an operation on a"
" dropped tablespace %lu\n",
(ulong) id);
}
@@ -3440,6 +3440,7 @@ skip_info:
for (offset = 0; offset < free_limit_bytes;
offset += zip_size ? zip_size : UNIV_PAGE_SIZE) {
ibool page_is_corrupt;
+ ibool is_descr_page = FALSE;
success = os_file_read(file, page,
(ulint)(offset & 0xFFFFFFFFUL),
@@ -3478,6 +3479,7 @@ skip_info:
/* store as descr page */
memcpy(descr_page, page, (zip_size ? zip_size : UNIV_PAGE_SIZE));
+ is_descr_page = TRUE;
} else if (descr_is_corrupt) {
/* unknown state of the page */
@@ -3554,7 +3556,8 @@ skip_info:
}
}
- if (fil_page_get_type(page) == FIL_PAGE_INDEX) {
+ if (fil_page_get_type(page) ==
+ FIL_PAGE_INDEX && !is_descr_page) {
index_id_t tmp = mach_read_from_8(page + (PAGE_HEADER + PAGE_INDEX_ID));
for (i = 0; i < n_index; i++) {
diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc
index 8b6cc1912c5..ba13744d5bd 100644
--- a/storage/xtradb/handler/ha_innodb.cc
+++ b/storage/xtradb/handler/ha_innodb.cc
@@ -4701,6 +4701,27 @@ table_opened:
}
UNIV_INTERN
+handler*
+ha_innobase::clone(
+/*===============*/
+ const char* name, /*!< in: table name */
+ MEM_ROOT* mem_root) /*!< in: memory context */
+{
+ ha_innobase* new_handler;
+
+ DBUG_ENTER("ha_innobase::clone");
+
+ new_handler = static_cast<ha_innobase*>(handler::clone(name,
+ mem_root));
+ if (new_handler) {
+ new_handler->prebuilt->select_lock_type
+ = prebuilt->select_lock_type;
+ }
+
+ DBUG_RETURN(new_handler);
+}
+
+UNIV_INTERN
uint
ha_innobase::max_supported_key_part_length() const
{
@@ -9452,7 +9473,7 @@ ha_innobase::check(
/* Enlarge the fatal lock wait timeout during CHECK TABLE. */
mutex_enter(&kernel_mutex);
- srv_fatal_semaphore_wait_threshold += 7200; /* 2 hours */
+ srv_fatal_semaphore_wait_threshold += SRV_SEMAPHORE_WAIT_EXTENSION;
mutex_exit(&kernel_mutex);
for (index = dict_table_get_first_index(prebuilt->table);
@@ -9593,7 +9614,7 @@ ha_innobase::check(
/* Restore the fatal lock wait timeout after CHECK TABLE. */
mutex_enter(&kernel_mutex);
- srv_fatal_semaphore_wait_threshold -= 7200; /* 2 hours */
+ srv_fatal_semaphore_wait_threshold -= SRV_SEMAPHORE_WAIT_EXTENSION;
mutex_exit(&kernel_mutex);
prebuilt->trx->op_info = "";
diff --git a/storage/xtradb/handler/ha_innodb.h b/storage/xtradb/handler/ha_innodb.h
index b48805ad0a5..933d75cf0d2 100644
--- a/storage/xtradb/handler/ha_innodb.h
+++ b/storage/xtradb/handler/ha_innodb.h
@@ -134,6 +134,7 @@ class ha_innobase: public handler
const key_map* keys_to_use_for_scanning();
int open(const char *name, int mode, uint test_if_locked);
+ handler* clone(const char *name, MEM_ROOT *mem_root);
int close(void);
double scan_time();
double read_time(uint index, uint ranges, ha_rows rows);
diff --git a/storage/xtradb/handler/i_s.cc b/storage/xtradb/handler/i_s.cc
index 1c40b87bbbd..7c60b0f7775 100644
--- a/storage/xtradb/handler/i_s.cc
+++ b/storage/xtradb/handler/i_s.cc
@@ -1578,6 +1578,8 @@ i_s_sys_tables_fill_table(
DBUG_ENTER("i_s_sys_tables_fill_table");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
@@ -1833,6 +1835,8 @@ i_s_sys_tables_fill_table_stats(
DBUG_ENTER("i_s_sys_tables_fill_table_stats");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
@@ -2029,6 +2033,8 @@ i_s_sys_indexes_fill_table(
DBUG_ENTER("i_s_sys_indexes_fill_table");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
@@ -2218,6 +2224,8 @@ i_s_sys_columns_fill_table(
DBUG_ENTER("i_s_sys_columns_fill_table");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
@@ -2372,6 +2380,8 @@ i_s_sys_fields_fill_table(
DBUG_ENTER("i_s_sys_fields_fill_table");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
@@ -2553,6 +2563,8 @@ i_s_sys_foreign_fill_table(
DBUG_ENTER("i_s_sys_foreign_fill_table");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
@@ -2716,6 +2728,8 @@ i_s_sys_foreign_cols_fill_table(
DBUG_ENTER("i_s_sys_foreign_cols_fill_table");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
DBUG_RETURN(0);
@@ -2883,6 +2897,8 @@ i_s_sys_stats_fill_table(
DBUG_ENTER("i_s_sys_stats_fill_table");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
DBUG_RETURN(0);
@@ -3199,6 +3215,8 @@ i_s_innodb_table_stats_fill(
DBUG_ENTER("i_s_innodb_table_stats_fill");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
DBUG_RETURN(0);
@@ -3262,6 +3280,8 @@ i_s_innodb_index_stats_fill(
DBUG_ENTER("i_s_innodb_index_stats_fill");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
DBUG_RETURN(0);
@@ -3422,6 +3442,8 @@ i_s_innodb_admin_command_fill(
DBUG_ENTER("i_s_innodb_admin_command_fill");
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
+
/* deny access to non-superusers */
if (check_global_access(thd, PROCESS_ACL)) {
DBUG_RETURN(0);
diff --git a/storage/xtradb/include/srv0srv.h b/storage/xtradb/include/srv0srv.h
index e6db7fab158..d99fbfb9463 100644
--- a/storage/xtradb/include/srv0srv.h
+++ b/storage/xtradb/include/srv0srv.h
@@ -301,6 +301,7 @@ extern ibool srv_print_latch_waits;
extern ulint srv_activity_count;
extern ulint srv_fatal_semaphore_wait_threshold;
+#define SRV_SEMAPHORE_WAIT_EXTENSION 7200
extern ulint srv_dml_needed_delay;
extern long long srv_kill_idle_transaction;
diff --git a/storage/xtradb/include/univ.i b/storage/xtradb/include/univ.i
index f4b06ccefa4..d54b467d2c1 100644
--- a/storage/xtradb/include/univ.i
+++ b/storage/xtradb/include/univ.i
@@ -54,10 +54,7 @@ Created 1/20/1994 Heikki Tuuri
#define INNODB_VERSION_BUGFIX 8
#ifndef PERCONA_INNODB_VERSION
-/* this is *not* the version of XtraDB as in Percona-Server sources,
- but the version of Percona-Server, where this XtraDB was taken from.
- Because Percona does not update XtraDB version for every release */
-#define PERCONA_INNODB_VERSION 26.0
+#define PERCONA_INNODB_VERSION 27.0
#endif
/* The following is the InnoDB version as shown in
diff --git a/storage/xtradb/srv/srv0start.c b/storage/xtradb/srv/srv0start.c
index 75e8097ee0b..d1329f445aa 100644
--- a/storage/xtradb/srv/srv0start.c
+++ b/storage/xtradb/srv/srv0start.c
@@ -1512,8 +1512,7 @@ innobase_start_or_create_for_mysql(void)
if (!os_aio_init(io_limit,
srv_n_read_io_threads,
srv_n_write_io_threads,
- SRV_MAX_N_PENDING_SYNC_IOS))
- {
+ SRV_MAX_N_PENDING_SYNC_IOS)) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Fatal error: cannot initialize AIO"
diff --git a/storage/xtradb/sync/sync0arr.c b/storage/xtradb/sync/sync0arr.c
index b47c32f5bbf..5f293ad6a55 100644
--- a/storage/xtradb/sync/sync0arr.c
+++ b/storage/xtradb/sync/sync0arr.c
@@ -926,6 +926,11 @@ sync_array_print_long_waits(
ibool fatal = FALSE;
double longest_diff = 0;
+ /* For huge tables, skip the check during CHECK TABLE etc... */
+ if (fatal_timeout > SRV_SEMAPHORE_WAIT_EXTENSION) {
+ return(FALSE);
+ }
+
#ifdef UNIV_DEBUG_VALGRIND
/* Increase the timeouts if running under valgrind because it executes
extremely slowly. UNIV_DEBUG_VALGRIND does not necessary mean that