summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/galera/galera_2nodes.cnf9
-rw-r--r--mysql-test/suite/galera/galera_2nodes_as_master.cnf12
-rw-r--r--mysql-test/suite/galera/galera_2nodes_as_slave.cnf3
-rw-r--r--mysql-test/suite/galera/galera_3nodes_as_slave.cnf15
-rw-r--r--mysql-test/suite/galera/galera_4nodes.cnf15
-rw-r--r--mysql-test/suite/innodb/r/innodb-lock-schedule-algorithm.result110
-rw-r--r--mysql-test/suite/innodb/t/innodb-lock-schedule-algorithm.opt2
-rw-r--r--mysql-test/suite/innodb/t/innodb-lock-schedule-algorithm.test106
-rw-r--r--mysql-test/suite/innodb/t/innodb_trx_weight.opt1
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb.result12
-rw-r--r--mysql-test/suite/sys_vars/t/wsrep_on_basic.opt1
-rw-r--r--sql/mysqld.cc1
-rw-r--r--sql/sql_class.cc9
-rw-r--r--sql/wsrep_var.cc19
-rw-r--r--storage/innobase/handler/ha_innodb.cc50
-rw-r--r--storage/innobase/handler/ha_innodb.h6
-rw-r--r--storage/innobase/include/ha_prototypes.h9
-rw-r--r--storage/innobase/include/lock0lock.h11
-rw-r--r--storage/innobase/lock/lock0lock.cc343
19 files changed, 32 insertions, 702 deletions
diff --git a/mysql-test/suite/galera/galera_2nodes.cnf b/mysql-test/suite/galera/galera_2nodes.cnf
index ef8a17a77be..64c92883b3a 100644
--- a/mysql-test/suite/galera/galera_2nodes.cnf
+++ b/mysql-test/suite/galera/galera_2nodes.cnf
@@ -10,9 +10,6 @@ wsrep-provider=@ENV.WSREP_PROVIDER
wsrep_node_address=127.0.0.1
# enforce read-committed characteristics across the cluster
wsrep-sync-wait=15
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.1]
loose-innodb
@@ -28,9 +25,6 @@ wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
# enforce read-committed characteristics across the cluster
wsrep_causal_reads=ON
wsrep_sync_wait = 15
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.2]
loose-innodb
@@ -54,9 +48,6 @@ wsrep_sst_receive_address='127.0.0.2:@mysqld.2.#sst_port'
# enforce read-committed characteristics across the cluster
wsrep_causal_reads=ON
wsrep_sync_wait = 15
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[ENV]
NODE_MYPORT_1= @mysqld.1.port
diff --git a/mysql-test/suite/galera/galera_2nodes_as_master.cnf b/mysql-test/suite/galera/galera_2nodes_as_master.cnf
index 4403416b033..4d89b02387b 100644
--- a/mysql-test/suite/galera/galera_2nodes_as_master.cnf
+++ b/mysql-test/suite/galera/galera_2nodes_as_master.cnf
@@ -11,9 +11,6 @@ log-bin=mysqld-bin
binlog-format=row
innodb-autoinc-lock-mode=2
default-storage-engine=innodb
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.1]
#galera_port=@OPT.port
@@ -33,9 +30,6 @@ wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port
# enforce read-committed characteristics across the cluster
wsrep-causal-reads=ON
wsrep-sync-wait=15
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.2]
#galera_port=@OPT.port
@@ -55,15 +49,9 @@ wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port
# enforce read-committed characteristics across the cluster
wsrep-causal-reads=ON
wsrep-sync-wait=15
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.3]
server-id=3
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[ENV]
NODE_MYPORT_1= @mysqld.1.port
diff --git a/mysql-test/suite/galera/galera_2nodes_as_slave.cnf b/mysql-test/suite/galera/galera_2nodes_as_slave.cnf
index 7daa501ca4a..f22703a59f0 100644
--- a/mysql-test/suite/galera/galera_2nodes_as_slave.cnf
+++ b/mysql-test/suite/galera/galera_2nodes_as_slave.cnf
@@ -31,9 +31,6 @@ wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
wsrep-causal-reads=ON
wsrep-sync-wait=15
server-id=1
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.2]
#galera_port=@OPT.port
diff --git a/mysql-test/suite/galera/galera_3nodes_as_slave.cnf b/mysql-test/suite/galera/galera_3nodes_as_slave.cnf
index 4181ee13ebc..68558b697e8 100644
--- a/mysql-test/suite/galera/galera_3nodes_as_slave.cnf
+++ b/mysql-test/suite/galera/galera_3nodes_as_slave.cnf
@@ -8,9 +8,6 @@
[mysqld]
log-bin
binlog-format=row
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.1]
#galera_port=@OPT.port
@@ -34,9 +31,6 @@ wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
wsrep-causal-reads=ON
wsrep-sync-wait=15
server-id=1
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.2]
#galera_port=@OPT.port
@@ -60,9 +54,6 @@ wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port'
wsrep-causal-reads=ON
wsrep-sync-wait=15
server-id=2
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.3]
#galera_port=@OPT.port
@@ -86,15 +77,9 @@ wsrep_sst_receive_address='127.0.0.1:@mysqld.3.#sst_port'
wsrep-causal-reads=ON
wsrep-sync-wait=15
server-id=3
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.4]
server-id=4
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[ENV]
NODE_MYPORT_1= @mysqld.1.port
diff --git a/mysql-test/suite/galera/galera_4nodes.cnf b/mysql-test/suite/galera/galera_4nodes.cnf
index 7f59f75b2dc..65620313b23 100644
--- a/mysql-test/suite/galera/galera_4nodes.cnf
+++ b/mysql-test/suite/galera/galera_4nodes.cnf
@@ -10,9 +10,6 @@ wsrep_node_address=127.0.0.1
# enforce read-committed characteristics across the cluster
wsrep-causal-reads=ON
wsrep-sync-wait=15
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.1]
#galera_port=@OPT.port
@@ -23,9 +20,6 @@ wsrep-cluster-address=gcomm://
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=10M'
wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port
wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.2]
#galera_port=@OPT.port
@@ -36,9 +30,6 @@ wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port'
wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=10M'
wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port
wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port'
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.3]
@@ -50,9 +41,6 @@ wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port'
wsrep_provider_options='base_port=@mysqld.3.#galera_port;gcache.size=10M'
wsrep_node_incoming_address=127.0.0.1:@mysqld.3.port
wsrep_sst_receive_address='127.0.0.1:@mysqld.3.#sst_port'
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[mysqld.4]
@@ -64,9 +52,6 @@ wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port'
wsrep_provider_options='base_port=@mysqld.4.#galera_port;gcache.size=10M'
wsrep_node_incoming_address=127.0.0.1:@mysqld.4.port
wsrep_sst_receive_address='127.0.0.1:@mysqld.4.#sst_port'
-# lock schedule alg appears to be VATS by default, and it is not
-# yet compatible with galera
-innodb_lock_schedule_algorithm=FCFS
[ENV]
NODE_MYPORT_1= @mysqld.1.port
diff --git a/mysql-test/suite/innodb/r/innodb-lock-schedule-algorithm.result b/mysql-test/suite/innodb/r/innodb-lock-schedule-algorithm.result
deleted file mode 100644
index 886a7f477b6..00000000000
--- a/mysql-test/suite/innodb/r/innodb-lock-schedule-algorithm.result
+++ /dev/null
@@ -1,110 +0,0 @@
-CREATE TABLE t1 (i1 INT) ENGINE=InnoDB;
-INSERT INTO t1 VALUES (1),(2);
-CREATE TABLE t2 (i2 int) ENGINE=MyISAM;
-BEGIN;
-DELETE FROM t1;
-connect con1,localhost,root,,test;
-connection con1;
-BEGIN;
-INSERT INTO t2 VALUES (1),(2);
-SELECT * from t1;
-i1
-1
-2
-UPDATE t1 SET i1 = 1;
-ERROR HY000: Lock wait timeout exceeded; try restarting transaction
-COMMIT;
-connection default;
-COMMIT;
-SELECT * FROM t1;
-i1
-SELECT * FROM t2;
-i2
-1
-2
-DROP TABLE t1, t2;
-disconnect con1;
-CREATE TABLE t1 (i1 INT) ENGINE=InnoDB;
-INSERT INTO t1 VALUES (1),(2);
-CREATE TABLE t2 (i2 int) ENGINE=MyISAM;
-BEGIN;
-DELETE FROM t1;
-connect con1,localhost,root,,test;
-connection con1;
-BEGIN;
-INSERT INTO t2 VALUES (1),(2);
-SELECT * FROM t1;
-i1
-1
-2
-UPDATE t1 SET i1 = 1;
-ERROR HY000: Lock wait timeout exceeded; try restarting transaction
-connection default;
-COMMIT;
-connection con1;
-COMMIT;
-connection default;
-SELECT * FROM t1;
-i1
-SELECT * FROM t2;
-i2
-1
-2
-DROP TABLE t1, t2;
-disconnect con1;
-# "restart: --loose-innodb-lock-schedule-algorithm=FCFS"
-# restart: --loose_innodb_lock_schedule_algorithm=FCFS
-CREATE TABLE t1 (i1 INT) ENGINE=InnoDB;
-INSERT INTO t1 VALUES (1),(2);
-CREATE TABLE t2 (i2 int) ENGINE=MyISAM;
-BEGIN;
-DELETE FROM t1;
-connect con1,localhost,root,,test;
-connection con1;
-BEGIN;
-INSERT INTO t2 VALUES (1),(2);
-SELECT * from t1;
-i1
-1
-2
-UPDATE t1 SET i1 = 1;
-ERROR HY000: Lock wait timeout exceeded; try restarting transaction
-COMMIT;
-connection default;
-COMMIT;
-SELECT * FROM t1;
-i1
-SELECT * FROM t2;
-i2
-1
-2
-DROP TABLE t1, t2;
-disconnect con1;
-CREATE TABLE t1 (i1 INT) ENGINE=InnoDB;
-INSERT INTO t1 VALUES (1),(2);
-CREATE TABLE t2 (i2 int) ENGINE=MyISAM;
-BEGIN;
-DELETE FROM t1;
-connect con1,localhost,root,,test;
-connection con1;
-BEGIN;
-INSERT INTO t2 VALUES (1),(2);
-SELECT * FROM t1;
-i1
-1
-2
-UPDATE t1 SET i1 = 1;
-ERROR HY000: Lock wait timeout exceeded; try restarting transaction
-connection default;
-COMMIT;
-connection con1;
-COMMIT;
-connection default;
-SELECT * FROM t1;
-i1
-SELECT * FROM t2;
-i2
-1
-2
-DROP TABLE t1, t2;
-disconnect con1;
diff --git a/mysql-test/suite/innodb/t/innodb-lock-schedule-algorithm.opt b/mysql-test/suite/innodb/t/innodb-lock-schedule-algorithm.opt
deleted file mode 100644
index e5d34636ccb..00000000000
--- a/mysql-test/suite/innodb/t/innodb-lock-schedule-algorithm.opt
+++ /dev/null
@@ -1,2 +0,0 @@
---loose-innodb-lock-wait-timeout=1
---loose-innodb-lock-schedule-algorithm=VATS
diff --git a/mysql-test/suite/innodb/t/innodb-lock-schedule-algorithm.test b/mysql-test/suite/innodb/t/innodb-lock-schedule-algorithm.test
deleted file mode 100644
index a14c156546a..00000000000
--- a/mysql-test/suite/innodb/t/innodb-lock-schedule-algorithm.test
+++ /dev/null
@@ -1,106 +0,0 @@
---source include/have_innodb.inc
-
-CREATE TABLE t1 (i1 INT) ENGINE=InnoDB;
-INSERT INTO t1 VALUES (1),(2);
-
-CREATE TABLE t2 (i2 int) ENGINE=MyISAM;
-BEGIN;
-DELETE FROM t1;
-
---connect (con1,localhost,root,,test)
-connection con1;
-BEGIN;
-INSERT INTO t2 VALUES (1),(2);
-SELECT * from t1;
---error 1205
-UPDATE t1 SET i1 = 1;
-COMMIT;
-
-connection default;
-COMMIT;
-SELECT * FROM t1;
-SELECT * FROM t2;
-DROP TABLE t1, t2;
-disconnect con1;
-
-CREATE TABLE t1 (i1 INT) ENGINE=InnoDB;
-INSERT INTO t1 VALUES (1),(2);
-
-CREATE TABLE t2 (i2 int) ENGINE=MyISAM;
-BEGIN;
-DELETE FROM t1;
-
---connect (con1,localhost,root,,test)
-connection con1;
-BEGIN;
-INSERT INTO t2 VALUES (1),(2);
-SELECT * FROM t1;
---error 1205
-UPDATE t1 SET i1 = 1;
-
-connection default;
-COMMIT;
-
-connection con1;
-COMMIT;
-
-connection default;
-SELECT * FROM t1;
-SELECT * FROM t2;
-DROP TABLE t1, t2;
-disconnect con1;
-
---echo # "restart: --loose-innodb-lock-schedule-algorithm=FCFS"
---let $restart_parameters=--loose_innodb_lock_schedule_algorithm=FCFS
--- source include/restart_mysqld.inc
-
-CREATE TABLE t1 (i1 INT) ENGINE=InnoDB;
-INSERT INTO t1 VALUES (1),(2);
-
-CREATE TABLE t2 (i2 int) ENGINE=MyISAM;
-BEGIN;
-DELETE FROM t1;
-
---connect (con1,localhost,root,,test)
-connection con1;
-BEGIN;
-INSERT INTO t2 VALUES (1),(2);
-SELECT * from t1;
---error 1205
-UPDATE t1 SET i1 = 1;
-COMMIT;
-
-connection default;
-COMMIT;
-SELECT * FROM t1;
-SELECT * FROM t2;
-DROP TABLE t1, t2;
-disconnect con1;
-
-CREATE TABLE t1 (i1 INT) ENGINE=InnoDB;
-INSERT INTO t1 VALUES (1),(2);
-
-CREATE TABLE t2 (i2 int) ENGINE=MyISAM;
-BEGIN;
-DELETE FROM t1;
-
---connect (con1,localhost,root,,test)
-connection con1;
-BEGIN;
-INSERT INTO t2 VALUES (1),(2);
-SELECT * FROM t1;
---error 1205
-UPDATE t1 SET i1 = 1;
-
-connection default;
-COMMIT;
-
-connection con1;
-COMMIT;
-
-connection default;
-SELECT * FROM t1;
-SELECT * FROM t2;
-DROP TABLE t1, t2;
-disconnect con1;
-
diff --git a/mysql-test/suite/innodb/t/innodb_trx_weight.opt b/mysql-test/suite/innodb/t/innodb_trx_weight.opt
deleted file mode 100644
index bac39c99a74..00000000000
--- a/mysql-test/suite/innodb/t/innodb_trx_weight.opt
+++ /dev/null
@@ -1 +0,0 @@
---loose-innodb-lock-schedule-algorithm=FCFS
diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb.result b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
index 2ef79a39b7a..206a58f269f 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
@@ -1029,18 +1029,6 @@ NUMERIC_BLOCK_SIZE 0
ENUM_VALUE_LIST NULL
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
-VARIABLE_NAME INNODB_LOCK_SCHEDULE_ALGORITHM
-SESSION_VALUE NULL
-DEFAULT_VALUE fcfs
-VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE ENUM
-VARIABLE_COMMENT The algorithm Innodb uses for deciding which locks to grant next when a lock is released. Possible values are FCFS grant the locks in First-Come-First-Served order; VATS use the Variance-Aware-Transaction-Scheduling algorithm, which uses an Eldest-Transaction-First heuristic.
-NUMERIC_MIN_VALUE NULL
-NUMERIC_MAX_VALUE NULL
-NUMERIC_BLOCK_SIZE NULL
-ENUM_VALUE_LIST fcfs,vats
-READ_ONLY YES
-COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME INNODB_LOCK_WAIT_TIMEOUT
SESSION_VALUE 50
DEFAULT_VALUE 50
diff --git a/mysql-test/suite/sys_vars/t/wsrep_on_basic.opt b/mysql-test/suite/sys_vars/t/wsrep_on_basic.opt
deleted file mode 100644
index aa1fb6cb155..00000000000
--- a/mysql-test/suite/sys_vars/t/wsrep_on_basic.opt
+++ /dev/null
@@ -1 +0,0 @@
---innodb-lock-schedule-algorithm=FCFS
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index aa3b1b31172..99ec7c1eb56 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -5043,6 +5043,7 @@ static int init_server_components()
MARIADB_REMOVED_OPTION("innodb-concurrency-tickets"),
MARIADB_REMOVED_OPTION("innodb-file-format"),
MARIADB_REMOVED_OPTION("innodb-large-prefix"),
+ MARIADB_REMOVED_OPTION("innodb-lock-schedule-algorithm"),
MARIADB_REMOVED_OPTION("innodb-log-checksums"),
MARIADB_REMOVED_OPTION("innodb-log-compressed-pages"),
MARIADB_REMOVED_OPTION("innodb-log-files-in-group"),
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index ac952fffae8..e32344115da 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -5037,15 +5037,6 @@ extern "C" enum enum_server_command thd_current_command(MYSQL_THD thd)
return thd->get_command();
}
-
-extern "C" int thd_slave_thread(const MYSQL_THD thd)
-{
- return(thd->slave_thread);
-}
-
-
-
-
/* Returns high resolution timestamp for the start
of the current query. */
extern "C" unsigned long long thd_start_utime(const MYSQL_THD thd)
diff --git a/sql/wsrep_var.cc b/sql/wsrep_var.cc
index 40689b7cf88..8c9170a3745 100644
--- a/sql/wsrep_var.cc
+++ b/sql/wsrep_var.cc
@@ -97,12 +97,6 @@ static void wsrep_set_wsrep_on()
strcmp(wsrep_provider, WSREP_NONE);
}
-/* This is intentionally declared as a weak global symbol, so that
-linking will succeed even if the server is built with a dynamically
-linked InnoDB. */
-ulong innodb_lock_schedule_algorithm __attribute__((weak));
-struct handlerton* innodb_hton_ptr __attribute__((weak));
-
bool wsrep_on_update (sys_var *self, THD* thd, enum_var_type var_type)
{
if (var_type == OPT_GLOBAL) {
@@ -138,18 +132,7 @@ bool wsrep_on_update (sys_var *self, THD* thd, enum_var_type var_type)
bool wsrep_on_check(sys_var *self, THD* thd, set_var* var)
{
- bool new_wsrep_on= (bool)var->save_result.ulonglong_value;
-
- if (check_has_super(self, thd, var))
- return true;
-
- if (new_wsrep_on && innodb_hton_ptr && innodb_lock_schedule_algorithm != 0) {
- my_message(ER_WRONG_ARGUMENTS, " WSREP (galera) can't be enabled "
- "if innodb_lock_schedule_algorithm=VATS. Please configure"
- " innodb_lock_schedule_algorithm=FCFS and restart.", MYF(0));
- return true;
- }
- return false;
+ return check_has_super(self, thd, var);
}
bool wsrep_causal_reads_update (sys_var *self, THD* thd, enum_var_type var_type)
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 3d10ca03f20..400b595dd03 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -326,22 +326,6 @@ static TYPELIB innodb_default_row_format_typelib = {
NULL
};
-/** Possible values of the parameter innodb_lock_schedule_algorithm */
-static const char* innodb_lock_schedule_algorithm_names[] = {
- "fcfs",
- "vats",
- NullS
-};
-
-/** Used to define an enumerate type of the system variable
-innodb_lock_schedule_algorithm. */
-static TYPELIB innodb_lock_schedule_algorithm_typelib = {
- array_elements(innodb_lock_schedule_algorithm_names) - 1,
- "innodb_lock_schedule_algorithm_typelib",
- innodb_lock_schedule_algorithm_names,
- NULL
-};
-
/** Names of allowed values of innodb_flush_method */
const char* innodb_flush_method_names[] = {
"fsync",
@@ -1401,18 +1385,6 @@ innodb_page_size_validate(
}
/******************************************************************//**
-Returns true if the thread is the replication thread on the slave
-server.
-@return true if thd is the replication thread */
-ibool
-thd_is_replication_slave_thread(
-/*============================*/
- THD* thd) /*!< in: thread handle */
-{
- return thd && ((ibool) thd_slave_thread(thd));
-}
-
-/******************************************************************//**
Returns true if transaction should be flagged as read-only.
@return true if the thd is marked as read-only */
bool
@@ -3205,15 +3177,6 @@ static int innodb_init_params()
DBUG_RETURN(HA_ERR_INITIALIZATION);
}
-#ifdef WITH_WSREP
- /* Currently, Galera does not support VATS lock schedule algorithm. */
- if (innodb_lock_schedule_algorithm == INNODB_LOCK_SCHEDULE_ALGORITHM_VATS
- && global_system_variables.wsrep_on) {
- ib::info() << "For Galera, using innodb_lock_schedule_algorithm=fcfs";
- innodb_lock_schedule_algorithm = INNODB_LOCK_SCHEDULE_ALGORITHM_FCFS;
- }
-#endif /* WITH_WSREP */
-
#ifndef HAVE_LZ4
if (innodb_compression_algorithm == PAGE_LZ4_ALGORITHM) {
sql_print_error("InnoDB: innodb_compression_algorithm = %lu unsupported.\n"
@@ -18930,18 +18893,6 @@ static MYSQL_SYSVAR_ULONG(doublewrite_batch_size, srv_doublewrite_batch_size,
NULL, NULL, 120, 1, 127, 0);
#endif /* defined UNIV_DEBUG || defined UNIV_PERF_DEBUG */
-static MYSQL_SYSVAR_ENUM(lock_schedule_algorithm, innodb_lock_schedule_algorithm,
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
- "The algorithm Innodb uses for deciding which locks to grant next when"
- " a lock is released. Possible values are"
- " FCFS"
- " grant the locks in First-Come-First-Served order;"
- " VATS"
- " use the Variance-Aware-Transaction-Scheduling algorithm, which"
- " uses an Eldest-Transaction-First heuristic.",
- NULL, NULL, INNODB_LOCK_SCHEDULE_ALGORITHM_FCFS,
- &innodb_lock_schedule_algorithm_typelib);
-
static MYSQL_SYSVAR_STR(buffer_pool_filename, srv_buf_dump_filename,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
"Filename to/from which to dump/load the InnoDB buffer pool",
@@ -19639,7 +19590,6 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(ft_num_word_optimize),
MYSQL_SYSVAR(ft_sort_pll_degree),
MYSQL_SYSVAR(force_load_corrupted),
- MYSQL_SYSVAR(lock_schedule_algorithm),
MYSQL_SYSVAR(lock_wait_timeout),
MYSQL_SYSVAR(deadlock_detect),
MYSQL_SYSVAR(page_size),
diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h
index fc4b2cf84ac..c8efcf84af9 100644
--- a/storage/innobase/handler/ha_innodb.h
+++ b/storage/innobase/handler/ha_innodb.h
@@ -530,12 +530,6 @@ the definitions are bracketed with #ifdef INNODB_COMPATIBILITY_HOOKS */
extern "C" {
-/** Check if a user thread is a replication slave thread
-@param thd user thread
-@retval 0 the user thread is not a replication slave thread
-@retval 1 the user thread is a replication slave thread */
-int thd_slave_thread(const MYSQL_THD thd);
-
/** Check if a user thread is running a non-transactional update
@param thd user thread
@retval 0 the user thread is not running a non-transactional update
diff --git a/storage/innobase/include/ha_prototypes.h b/storage/innobase/include/ha_prototypes.h
index 0632c0c5140..965bff78795 100644
--- a/storage/innobase/include/ha_prototypes.h
+++ b/storage/innobase/include/ha_prototypes.h
@@ -109,15 +109,6 @@ innobase_convert_name(
THD* thd); /*!< in: MySQL connection thread, or NULL */
/******************************************************************//**
-Returns true if the thread is the replication thread on the slave
-server.
-@return true if thd is the replication thread */
-ibool
-thd_is_replication_slave_thread(
-/*============================*/
- THD* thd); /*!< in: thread handle */
-
-/******************************************************************//**
Returns true if the transaction this thread is processing has edited
non-transactional tables. Used by the deadlock detector when deciding
which transaction to rollback in case of a deadlock - we try to avoid
diff --git a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h
index dd25c52101f..220e697d556 100644
--- a/storage/innobase/include/lock0lock.h
+++ b/storage/innobase/include/lock0lock.h
@@ -39,17 +39,6 @@ Created 5/7/1996 Heikki Tuuri
#include "gis0rtree.h"
#include "lock0prdt.h"
-/** Alternatives for innodb_lock_schedule_algorithm, which can be changed by
- setting innodb_lock_schedule_algorithm. */
-enum innodb_lock_schedule_algorithm_t {
- /*!< First Come First Served */
- INNODB_LOCK_SCHEDULE_ALGORITHM_FCFS,
- /*!< Variance-Aware-Transaction-Scheduling */
- INNODB_LOCK_SCHEDULE_ALGORITHM_VATS
-};
-
-extern ulong innodb_lock_schedule_algorithm;
-
// Forward declaration
class ReadView;
diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc
index df206af34c7..494f4a07036 100644
--- a/storage/innobase/lock/lock0lock.cc
+++ b/storage/innobase/lock/lock0lock.cc
@@ -49,9 +49,6 @@ Created 5/7/1996 Heikki Tuuri
#include <mysql/service_wsrep.h>
#endif /* WITH_WSREP */
-/** Lock scheduling algorithm */
-ulong innodb_lock_schedule_algorithm;
-
/** The value of innodb_deadlock_detect */
my_bool innobase_deadlock_detect;
@@ -554,12 +551,6 @@ lock_get_size(void)
return((ulint) sizeof(lock_t));
}
-static inline void lock_grant_have_trx_mutex(lock_t* lock)
-{
- lock_reset_lock_and_trx_wait(lock);
- lock_grant_after_reset(lock);
-}
-
/*********************************************************************//**
Gets the gap flag of a record lock.
@return LOCK_GAP or 0 */
@@ -1396,16 +1387,8 @@ lock_rec_create_low(
trx_mutex_exit(c_lock->trx);
} else
#endif /* WITH_WSREP */
- if (!(type_mode & (LOCK_WAIT | LOCK_PREDICATE | LOCK_PRDT_PAGE))
- && innodb_lock_schedule_algorithm
- == INNODB_LOCK_SCHEDULE_ALGORITHM_VATS
- && !thd_is_replication_slave_thread(trx->mysql_thd)) {
- HASH_PREPEND(lock_t, hash, &lock_sys.rec_hash,
- page_id.fold(), lock);
- } else {
HASH_INSERT(lock_t, hash, lock_hash_get(type_mode),
page_id.fold(), lock);
- }
if (!holds_trx_mutex) {
trx_mutex_enter(trx);
@@ -1424,139 +1407,6 @@ lock_rec_create_low(
return lock;
}
-/*********************************************************************//**
-Check if lock1 has higher priority than lock2.
-NULL has lowest priority.
-If neither of them is wait lock, the first one has higher priority.
-If only one of them is a wait lock, it has lower priority.
-If either is a high priority transaction, the lock has higher priority.
-Otherwise, the one with an older transaction has higher priority.
-@returns true if lock1 has higher priority, false otherwise. */
-static bool has_higher_priority(lock_t *lock1, lock_t *lock2)
-{
- if (lock1 == NULL) {
- return false;
- } else if (lock2 == NULL) {
- return true;
- }
- // Granted locks has higher priority.
- if (!lock_get_wait(lock1)) {
- return true;
- } else if (!lock_get_wait(lock2)) {
- return false;
- }
- return lock1->trx->start_time_micro <= lock2->trx->start_time_micro;
-}
-
-/*********************************************************************//**
-Insert a lock to the hash list according to the mode (whether it is a wait
-lock) and the age of the transaction the it is associated with.
-If the lock is not a wait lock, insert it to the head of the hash list.
-Otherwise, insert it to the middle of the wait locks according to the age of
-the transaciton. */
-static
-dberr_t
-lock_rec_insert_by_trx_age(
- lock_t *in_lock) /*!< in: lock to be insert */{
- lock_t* node;
- lock_t* next;
- hash_table_t* hash;
- hash_cell_t* cell;
-
- ut_ad(!in_lock->trx->is_wsrep());
- const page_id_t page_id(in_lock->un_member.rec_lock.page_id);
- hash = lock_hash_get(in_lock->type_mode);
- cell = &hash->array[hash->calc_hash(page_id.fold())];
-
- node = (lock_t *) cell->node;
- // If in_lock is not a wait lock, we insert it to the head of the list.
- if (node == NULL || !lock_get_wait(in_lock) || has_higher_priority(in_lock, node)) {
- cell->node = in_lock;
- in_lock->hash = node;
- if (lock_get_wait(in_lock)) {
- lock_grant_have_trx_mutex(in_lock);
- return DB_SUCCESS_LOCKED_REC;
- }
- return DB_SUCCESS;
- }
- while (node != NULL && has_higher_priority((lock_t *) node->hash,
- in_lock)) {
- node = (lock_t *) node->hash;
- }
- next = (lock_t *) node->hash;
- node->hash = in_lock;
- in_lock->hash = next;
-
- if (lock_get_wait(in_lock) && !lock_rec_has_to_wait_in_queue(in_lock)) {
- lock_grant_have_trx_mutex(in_lock);
- if (cell->node != in_lock) {
- // Move it to the front of the queue
- node->hash = in_lock->hash;
- next = (lock_t *) cell->node;
- cell->node = in_lock;
- in_lock->hash = next;
- }
- return DB_SUCCESS_LOCKED_REC;
- }
-
- return DB_SUCCESS;
-}
-
-#ifdef UNIV_DEBUG
-static
-bool
-lock_queue_validate(
- const lock_t *in_lock) /*!< in: lock whose hash list is to be validated */
-{
- hash_table_t* hash;
- hash_cell_t* cell;
- lock_t* next;
- bool wait_lock __attribute__((unused))= false;
-
- if (in_lock == NULL) {
- return true;
- }
-
- const page_id_t page_id(in_lock->un_member.rec_lock.page_id);
- hash = lock_hash_get(in_lock->type_mode);
- cell = &hash->array[hash->calc_hash(page_id.fold())];
- next = (lock_t *) cell->node;
- while (next != NULL) {
- // If this is a granted lock, check that there's no wait lock before it.
- if (!lock_get_wait(next)) {
- ut_ad(!wait_lock);
- } else {
- wait_lock = true;
- }
- next = next->hash;
- }
- return true;
-}
-#endif /* UNIV_DEBUG */
-
-static
-void
-lock_rec_insert_to_head(
- lock_t *in_lock, /*!< in: lock to be insert */
- ulint rec_fold) /*!< in: rec_fold of the page */
-{
- hash_table_t* hash;
- hash_cell_t* cell;
- lock_t* node;
-
- if (in_lock == NULL) {
- return;
- }
-
- hash = lock_hash_get(in_lock->type_mode);
- cell = &hash->array[hash->calc_hash(rec_fold)];
- node = (lock_t *) cell->node;
- if (node != in_lock) {
- cell->node = in_lock;
- in_lock->hash = node;
- }
-}
-
/** Enqueue a waiting request for a lock which cannot be granted immediately.
Check for deadlocks.
@param[in] type_mode the requested lock mode (LOCK_S or LOCK_X)
@@ -1661,18 +1511,6 @@ lock_rec_enqueue_waiting(
MONITOR_INC(MONITOR_LOCKREC_WAIT);
- if (innodb_lock_schedule_algorithm
- == INNODB_LOCK_SCHEDULE_ALGORITHM_VATS
- && !prdt
- && !thd_is_replication_slave_thread(lock->trx->mysql_thd)) {
- HASH_DELETE(lock_t, hash, &lock_sys.rec_hash,
- lock_rec_lock_fold(lock), lock);
- dberr_t res = lock_rec_insert_by_trx_age(lock);
- if (res != DB_SUCCESS) {
- return res;
- }
- }
-
return DB_LOCK_WAIT;
}
@@ -2062,54 +1900,6 @@ lock_rec_cancel(
trx_mutex_exit(lock->trx);
}
-static void lock_grant_and_move_on_page(ulint rec_fold, const page_id_t id)
-{
- lock_t* lock;
- lock_t* previous = static_cast<lock_t*>(
- lock_sys.rec_hash.array[lock_sys.rec_hash.calc_hash(rec_fold)].
- node);
- if (previous == NULL) {
- return;
- }
- if (previous->un_member.rec_lock.page_id == id) {
- lock = previous;
- }
- else {
- while (previous->hash &&
- (previous->hash->un_member.rec_lock.page_id != id)) {
- previous = previous->hash;
- }
- lock = previous->hash;
- }
-
- ut_ad(!lock->trx->is_wsrep());
- ut_ad(previous->hash == lock || previous == lock);
- /* Grant locks if there are no conflicting locks ahead.
- Move granted locks to the head of the list. */
- while (lock) {
- /* If the lock is a wait lock on this page, and it does not need to wait. */
- if (lock_get_wait(lock)
- && lock->un_member.rec_lock.page_id == id
- && !lock_rec_has_to_wait_in_queue(lock)) {
- lock_grant(lock);
-
- if (previous != NULL) {
- /* Move the lock to the head of the list. */
- HASH_GET_NEXT(hash, previous) = HASH_GET_NEXT(hash, lock);
- lock_rec_insert_to_head(lock, rec_fold);
- } else {
- /* Already at the head of the list. */
- previous = lock;
- }
- /* Move on to the next lock. */
- lock = static_cast<lock_t *>(HASH_GET_NEXT(hash, previous));
- } else {
- previous = lock;
- lock = static_cast<lock_t *>(HASH_GET_NEXT(hash, lock));
- }
- }
-}
-
/** Remove a record lock request, waiting or granted, from the queue and
grant locks to other transactions in the queue if they now are entitled
to a lock. NOTE: all record locks contained in in_lock are removed.
@@ -2136,34 +1926,27 @@ static void lock_rec_dequeue_from_page(lock_t* in_lock)
MONITOR_INC(MONITOR_RECLOCK_REMOVED);
MONITOR_DEC(MONITOR_NUM_RECLOCK);
- if (innodb_lock_schedule_algorithm
- == INNODB_LOCK_SCHEDULE_ALGORITHM_FCFS
- || lock_hash != &lock_sys.rec_hash
- || thd_is_replication_slave_thread(in_lock->trx->mysql_thd)) {
- /* Check if waiting locks in the queue can now be granted:
- grant locks if there are no conflicting locks ahead. Stop at
- the first X lock that is waiting or has been granted. */
+ /* Check if waiting locks in the queue can now be granted:
+ grant locks if there are no conflicting locks ahead. Stop at
+ the first X lock that is waiting or has been granted. */
- for (lock_t* lock = lock_sys.get_first(*lock_hash, page_id);
- lock != NULL;
- lock = lock_rec_get_next_on_page(lock)) {
+ for (lock_t* lock = lock_sys.get_first(*lock_hash, page_id);
+ lock != NULL;
+ lock = lock_rec_get_next_on_page(lock)) {
- if (!lock_get_wait(lock)) {
- continue;
- }
- const lock_t* c = lock_rec_has_to_wait_in_queue(lock);
- if (!c) {
- /* Grant the lock */
- ut_ad(lock->trx != in_lock->trx);
- lock_grant(lock);
+ if (!lock_get_wait(lock)) {
+ continue;
+ }
+ const lock_t* c = lock_rec_has_to_wait_in_queue(lock);
+ if (!c) {
+ /* Grant the lock */
+ ut_ad(lock->trx != in_lock->trx);
+ lock_grant(lock);
#ifdef WITH_WSREP
- } else {
- wsrep_assert_no_bf_bf_wait(c, lock, c->trx);
+ } else {
+ wsrep_assert_no_bf_bf_wait(c, lock, c->trx);
#endif /* WITH_WSREP */
- }
}
- } else {
- lock_grant_and_move_on_page(rec_fold, page_id);
}
}
@@ -3940,59 +3723,6 @@ run_again:
}
/*=========================== LOCK RELEASE ==============================*/
-static
-void
-lock_grant_and_move_on_rec(
- lock_t* first_lock,
- ulint heap_no)
-{
- lock_t* lock;
- const page_id_t page_id(first_lock->un_member.rec_lock.page_id);
- const ulint rec_fold= page_id.fold();
- lock_t* previous = static_cast<lock_t*>(
- lock_sys.rec_hash.array[lock_sys.hash(page_id)]
- .node);
- if (previous == NULL) {
- return;
- }
- if (previous == first_lock) {
- lock = previous;
- } else {
- while (previous->hash &&
- previous->hash != first_lock) {
- previous = previous->hash;
- }
- lock = previous->hash;
- }
- ut_ad(!lock->trx->is_wsrep());
- /* Grant locks if there are no conflicting locks ahead.
- Move granted locks to the head of the list. */
- for (;lock != NULL;) {
-
- /* If the lock is a wait lock on this page, and it does not need to wait. */
- if (lock->un_member.rec_lock.page_id == page_id
- && lock_rec_get_nth_bit(lock, heap_no)
- && lock_get_wait(lock)
- && !lock_rec_has_to_wait_in_queue(lock)) {
-
- lock_grant(lock);
-
- if (previous != NULL) {
- /* Move the lock to the head of the list. */
- HASH_GET_NEXT(hash, previous) = HASH_GET_NEXT(hash, lock);
- lock_rec_insert_to_head(lock, rec_fold);
- } else {
- /* Already at the head of the list. */
- previous = lock;
- }
- /* Move on to the next lock. */
- lock = static_cast<lock_t *>(HASH_GET_NEXT(hash, previous));
- } else {
- previous = lock;
- lock = static_cast<lock_t *>(HASH_GET_NEXT(hash, lock));
- }
- }
-}
/*************************************************************//**
Removes a granted record lock of a transaction from the queue and grants
@@ -4055,30 +3785,23 @@ released:
ut_a(!lock_get_wait(lock));
lock_rec_reset_nth_bit(lock, heap_no);
- if (innodb_lock_schedule_algorithm
- == INNODB_LOCK_SCHEDULE_ALGORITHM_FCFS ||
- thd_is_replication_slave_thread(lock->trx->mysql_thd)) {
+ /* Check if we can now grant waiting lock requests */
- /* Check if we can now grant waiting lock requests */
-
- for (lock = first_lock; lock != NULL;
- lock = lock_rec_get_next(heap_no, lock)) {
- if (!lock_get_wait(lock)) {
- continue;
- }
- const lock_t* c = lock_rec_has_to_wait_in_queue(lock);
- if (!c) {
- /* Grant the lock */
- ut_ad(trx != lock->trx);
- lock_grant(lock);
+ for (lock = first_lock; lock != NULL;
+ lock = lock_rec_get_next(heap_no, lock)) {
+ if (!lock_get_wait(lock)) {
+ continue;
+ }
+ const lock_t* c = lock_rec_has_to_wait_in_queue(lock);
+ if (!c) {
+ /* Grant the lock */
+ ut_ad(trx != lock->trx);
+ lock_grant(lock);
#ifdef WITH_WSREP
- } else {
- wsrep_assert_no_bf_bf_wait(c, lock, c->trx);
+ } else {
+ wsrep_assert_no_bf_bf_wait(c, lock, c->trx);
#endif /* WITH_WSREP */
- }
}
- } else {
- lock_grant_and_move_on_rec(first_lock, heap_no);
}
lock_mutex_exit();
@@ -4810,9 +4533,6 @@ func_exit:
}
}
- ut_ad(innodb_lock_schedule_algorithm == INNODB_LOCK_SCHEDULE_ALGORITHM_FCFS ||
- lock_queue_validate(lock));
-
goto func_exit;
}
@@ -6361,10 +6081,7 @@ DeadlockChecker::get_first_lock(ulint* heap_no) const
/* Must find at least two locks, otherwise there cannot be a
waiting lock, secondly the first lock cannot be the wait_lock. */
ut_a(lock != NULL);
- ut_a(lock != m_wait_lock ||
- (innodb_lock_schedule_algorithm
- == INNODB_LOCK_SCHEDULE_ALGORITHM_VATS
- && !thd_is_replication_slave_thread(lock->trx->mysql_thd)));
+ ut_a(lock != m_wait_lock);
/* Check that the lock type doesn't change. */
ut_ad(lock_get_type_low(lock) == lock_get_type_low(m_wait_lock));