summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <tsmith/tim@siva.hindu.god>2006-12-18 18:41:38 -0700
committerunknown <tsmith/tim@siva.hindu.god>2006-12-18 18:41:38 -0700
commit306f42701cdbf0801c710f3c0fe0e74c521455fc (patch)
tree71350d152b8e2b1979b7b4d1fd2566eb731baabe /sql
parent3d033fb322f4d747c42ce15e50dab951c6811ca2 (diff)
downloadmariadb-git-306f42701cdbf0801c710f3c0fe0e74c521455fc.tar.gz
This ChangeSet must be null-merged to 5.1.
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Bugs fixed: - Bug #21468: InnoDB crash during recovery with corrupted data pages: XA bug? - Bug #24299: Identifiers in foreign keys cannot contain U+0160, U+0360, ..., U+FF60 - Bug #24386: Performance degradation caused by instrumentation in mutex_struct - Bug #24712: SHOW TABLE STATUS for file-per-table showing incorrect time fields innobase/dict/dict0dict.c: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1030: branches/5.0: Replace isspace() with a wrapper ib_isspace(), because on Win32 isspace(0xa0) appears to hold. (Bug #24299) innobase/include/sync0rw.h: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1040: branches/5.0: Port r1039 from trunk: Port r1034 from branches/zip: Remove some instrumentation and reduce the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386) innobase/include/sync0sync.h: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1040: branches/5.0: Port r1039 from trunk: Port r1034 from branches/zip: Remove some instrumentation and reduce the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386) innobase/include/sync0sync.ic: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1040: branches/5.0: Port r1039 from trunk: Port r1034 from branches/zip: Remove some instrumentation and reduce the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386) innobase/log/log0recv.c: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1076: branches/5.0: Remove the unintentionally committed change to univ.i in r1075. Fix assertion failure sync0sync.c line 1239 (the latter ut_error in sync_thread_reset_level()) in crash recovery when UNIV_SYNC_DEBUG is enabled. Revision r1079: branches/5.0: recv_recovery_from_checkpoint_finish(): Add 1 sec delay before switching on the sync order checks in crash recovery, so that file I/O threads have time to suspend themselves. innobase/srv/srv0start.c: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1075: branches/5.0: Fix assertion failure sync0sync.c line 1239 (the latter ut_error in sync_thread_reset_level()) in crash recovery when UNIV_SYNC_DEBUG is enabled. Revision r1077: branches/5.0: innobase_start_or_create_for_mysql(): Remove unnecessary delay now that we moved the setting sync_order_checks_on=TRUE to log0recv.c, to the start of the rollback phase in crash recovery. innobase/sync/sync0rw.c: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1040: branches/5.0: Port r1039 from trunk: Port r1034 from branches/zip: Remove some instrumentation and reduce the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386) innobase/sync/sync0sync.c: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1040: branches/5.0: Port r1039 from trunk: Port r1034 from branches/zip: Remove some instrumentation and reduce the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386) innobase/trx/trx0roll.c: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1067: branches/5.0: trx_rollback_for_mysql(), trx_commit_for_mysql(): Protect the creation of trx_dummy_sess with kernel_mutex. This error was introduced in r1046 and r1050. Revision r1050: branches/5.0: trx_rollback_for_mysql(): Fix the comment introduced in r1046. trx_commit_for_mysql(): Use the dummy trx->sess also for committing a prepared transaction in XA recovery, just in case our code would need the session object also in that case (does not seem to need it right now). Revision r1048: branches/5.0: trx_rollback_for_mysql(): Do not set trx->sess back to NULL. This bug was introduced in r1046. Revision r1046: branches/5.0: trx_rollback_for_mysql(): Ensure that trx->sess is non-NULL when calling trx_general_rollback_for_mysql(). This removes a segmentation fault when rolling back a prepared transaction in XA recovery. (Bug #21468) innobase/trx/trx0trx.c: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1067: branches/5.0: trx_rollback_for_mysql(), trx_commit_for_mysql(): Protect the creation of trx_dummy_sess with kernel_mutex. This error was introduced in r1046 and r1050. Revision r1050: branches/5.0: trx_rollback_for_mysql(): Fix the comment introduced in r1046. trx_commit_for_mysql(): Use the dummy trx->sess also for committing a prepared transaction in XA recovery, just in case our code would need the session object also in that case (does not seem to need it right now). sql/ha_innodb.cc: Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots. Revision r1040: branches/5.0: Port r1039 from trunk: Port r1034 from branches/zip: Remove some instrumentation and reduce the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386) Revision r1099: branches/5.0: Merge revision 1098 from trunk: Fix bug #24712: SHOW TABLE STATUS for file-per-table showing incorrect time fields
Diffstat (limited to 'sql')
-rw-r--r--sql/ha_innodb.cc48
1 files changed, 29 insertions, 19 deletions
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc
index e9ccc0ccede..617712d72bb 100644
--- a/sql/ha_innodb.cc
+++ b/sql/ha_innodb.cc
@@ -5309,19 +5309,11 @@ ha_innobase::info(
prebuilt->trx->op_info = (char*)
"returning various info to MySQL";
-
- if (ib_table->space != 0) {
- my_snprintf(path, sizeof(path), "%s/%s%s",
- mysql_data_home, ib_table->name,
- ".ibd");
- unpack_filename(path,path);
- } else {
- my_snprintf(path, sizeof(path), "%s/%s%s",
+ my_snprintf(path, sizeof(path), "%s/%s%s",
mysql_data_home, ib_table->name,
reg_ext);
- unpack_filename(path,path);
- }
+ unpack_filename(path,path);
/* Note that we do not know the access time of the table,
nor the CHECK TABLE time, nor the UPDATE or INSERT time. */
@@ -6378,14 +6370,17 @@ innodb_mutex_show_status(
Protocol *protocol= thd->protocol;
List<Item> field_list;
mutex_t* mutex;
+#ifdef UNIV_DEBUG
ulint rw_lock_count= 0;
ulint rw_lock_count_spin_loop= 0;
ulint rw_lock_count_spin_rounds= 0;
ulint rw_lock_count_os_wait= 0;
ulint rw_lock_count_os_yield= 0;
ulonglong rw_lock_wait_time= 0;
+#endif /* UNIV_DEBUG */
DBUG_ENTER("innodb_mutex_show_status");
+#ifdef UNIV_DEBUG
field_list.push_back(new Item_empty_string("Mutex", FN_REFLEN));
field_list.push_back(new Item_empty_string("Module", FN_REFLEN));
field_list.push_back(new Item_uint("Count", 21));
@@ -6394,19 +6389,23 @@ innodb_mutex_show_status(
field_list.push_back(new Item_uint("OS_waits", 21));
field_list.push_back(new Item_uint("OS_yields", 21));
field_list.push_back(new Item_uint("OS_waits_time", 21));
+#else /* UNIV_DEBUG */
+ field_list.push_back(new Item_empty_string("File", FN_REFLEN));
+ field_list.push_back(new Item_uint("Line", 21));
+ field_list.push_back(new Item_uint("OS_waits", 21));
+#endif /* UNIV_DEBUG */
if (protocol->send_fields(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
DBUG_RETURN(TRUE);
-#ifdef MUTEX_PROTECT_TO_BE_ADDED_LATER
- mutex_enter(&mutex_list_mutex);
-#endif
+ mutex_enter_noninline(&mutex_list_mutex);
mutex = UT_LIST_GET_FIRST(mutex_list);
while ( mutex != NULL )
{
+#ifdef UNIV_DEBUG
if (mutex->mutex_type != 1)
{
if (mutex->count_using > 0)
@@ -6423,9 +6422,7 @@ innodb_mutex_show_status(
if (protocol->write())
{
-#ifdef MUTEX_PROTECT_TO_BE_ADDED_LATER
- mutex_exit(&mutex_list_mutex);
-#endif
+ mutex_exit_noninline(&mutex_list_mutex);
DBUG_RETURN(1);
}
}
@@ -6439,10 +6436,25 @@ innodb_mutex_show_status(
rw_lock_count_os_yield += mutex->count_os_yield;
rw_lock_wait_time += mutex->lspent_time;
}
+#else /* UNIV_DEBUG */
+ protocol->prepare_for_resend();
+ protocol->store(mutex->cfile_name, system_charset_info);
+ protocol->store((ulonglong)mutex->cline);
+ protocol->store((ulonglong)mutex->count_os_wait);
+
+ if (protocol->write())
+ {
+ mutex_exit_noninline(&mutex_list_mutex);
+ DBUG_RETURN(1);
+ }
+#endif /* UNIV_DEBUG */
mutex = UT_LIST_GET_NEXT(list, mutex);
}
+ mutex_exit_noninline(&mutex_list_mutex);
+
+#ifdef UNIV_DEBUG
protocol->prepare_for_resend();
protocol->store("rw_lock_mutexes", system_charset_info);
protocol->store("", system_charset_info);
@@ -6457,10 +6469,8 @@ innodb_mutex_show_status(
{
DBUG_RETURN(1);
}
+#endif /* UNIV_DEBUG */
-#ifdef MUTEX_PROTECT_TO_BE_ADDED_LATER
- mutex_exit(&mutex_list_mutex);
-#endif
send_eof(thd);
DBUG_RETURN(FALSE);
}