mirror of
https://github.com/MariaDB/server.git
synced 2025-01-24 15:54:37 +01:00
Apply patch from MySQL:
ChangeSet@1.2353, 2006-12-19 16:57:51-07:00, tsmith@siva.hindu.god +13 -0 Added innodb_rollback_on_timeout option to restore the 4.1 InnoDB timeout behavior (Bug #24200)
This commit is contained in:
parent
79b0e5d2dc
commit
03b9c45ec3
4 changed files with 20 additions and 1 deletions
|
@ -177,6 +177,7 @@ my_bool innobase_use_large_pages = FALSE;
|
|||
my_bool innobase_use_native_aio = FALSE;
|
||||
my_bool innobase_file_per_table = FALSE;
|
||||
my_bool innobase_locks_unsafe_for_binlog = FALSE;
|
||||
my_bool innobase_rollback_on_timeout = FALSE;
|
||||
my_bool innobase_create_status_file = FALSE;
|
||||
|
||||
static char *internal_innobase_data_file_path = NULL;
|
||||
|
@ -469,6 +470,10 @@ convert_error_code_to_mysql(
|
|||
latest SQL statement in a lock wait timeout. Previously, we
|
||||
rolled back the whole transaction. */
|
||||
|
||||
if (thd && row_rollback_on_timeout) {
|
||||
ha_rollback(thd);
|
||||
}
|
||||
|
||||
return(HA_ERR_LOCK_WAIT_TIMEOUT);
|
||||
|
||||
} else if (error == (int) DB_NO_REFERENCED_ROW) {
|
||||
|
@ -1550,6 +1555,8 @@ innobase_init(void *p)
|
|||
os_use_large_pages = (ibool) innobase_use_large_pages;
|
||||
os_large_page_size = (ulint) innobase_large_page_size;
|
||||
|
||||
row_rollback_on_timeout = (ibool) innobase_rollback_on_timeout;
|
||||
|
||||
srv_file_per_table = (ibool) innobase_file_per_table;
|
||||
srv_locks_unsafe_for_binlog = (ibool) innobase_locks_unsafe_for_binlog;
|
||||
|
||||
|
|
|
@ -223,6 +223,7 @@ extern my_bool innobase_log_archive,
|
|||
innobase_use_large_pages,
|
||||
innobase_use_native_aio,
|
||||
innobase_file_per_table, innobase_locks_unsafe_for_binlog,
|
||||
innobase_rollback_on_timeout,
|
||||
innobase_create_status_file;
|
||||
extern "C" {
|
||||
extern ulong srv_max_buf_pool_modified_pct;
|
||||
|
|
|
@ -19,6 +19,8 @@ Created 9/17/2000 Heikki Tuuri
|
|||
#include "btr0pcur.h"
|
||||
#include "trx0types.h"
|
||||
|
||||
extern ibool row_rollback_on_timeout;
|
||||
|
||||
typedef struct row_prebuilt_struct row_prebuilt_t;
|
||||
|
||||
/***********************************************************************
|
||||
|
|
|
@ -35,6 +35,9 @@ Created 9/17/2000 Heikki Tuuri
|
|||
/* A dummy variable used to fool the compiler */
|
||||
ibool row_mysql_identically_false = FALSE;
|
||||
|
||||
/* Provide optional 4.x backwards compatibility for 5.0 and above */
|
||||
ibool row_rollback_on_timeout = FALSE;
|
||||
|
||||
/* List of tables we should drop in background. ALTER TABLE in MySQL requires
|
||||
that the table handler can drop the table in background when there are no
|
||||
queries to it any more. Protected by the kernel mutex. */
|
||||
|
@ -496,7 +499,9 @@ handle_new_error:
|
|||
return(TRUE);
|
||||
|
||||
} else if (err == DB_DEADLOCK
|
||||
|| err == DB_LOCK_TABLE_FULL) {
|
||||
|| err == DB_LOCK_TABLE_FULL
|
||||
|| (err == DB_LOCK_WAIT_TIMEOUT
|
||||
&& row_rollback_on_timeout)) {
|
||||
/* Roll back the whole transaction; this resolution was added
|
||||
to version 3.23.43 */
|
||||
|
||||
|
@ -504,6 +509,10 @@ handle_new_error:
|
|||
|
||||
} else if (err == DB_OUT_OF_FILE_SPACE
|
||||
|| err == DB_LOCK_WAIT_TIMEOUT) {
|
||||
|
||||
ut_ad(!(err == DB_LOCK_WAIT_TIMEOUT
|
||||
&& row_rollback_on_timeout));
|
||||
|
||||
if (savept) {
|
||||
/* Roll back the latest, possibly incomplete
|
||||
insertion or update */
|
||||
|
|
Loading…
Add table
Reference in a new issue