summaryrefslogtreecommitdiff
path: root/dev-db/mariadb/files/MDEV-20247-replication.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-db/mariadb/files/MDEV-20247-replication.patch')
-rw-r--r--dev-db/mariadb/files/MDEV-20247-replication.patch121
1 files changed, 0 insertions, 121 deletions
diff --git a/dev-db/mariadb/files/MDEV-20247-replication.patch b/dev-db/mariadb/files/MDEV-20247-replication.patch
deleted file mode 100644
index 92f8e0e1a67d..000000000000
--- a/dev-db/mariadb/files/MDEV-20247-replication.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 47f8a18fec604983e47fdf7c822d94b26d85cade Mon Sep 17 00:00:00 2001
-From: Thirunarayanan Balathandayuthapani <thiru@mariadb.com>
-Date: Wed, 7 Aug 2019 12:35:04 +0530
-Subject: [PATCH] MDEV-20247 Replication hangs with "preparing" and never
- starts
-
-- The commit ab6dd774082c57f48d998e03655c06b672799b2d wrongly sets the
-condition inside innobase_srv_conc_enter_innodb(). Problem is that
-InnoDB makes the thread to sleep indefinitely if it is a replication
-slave thread.
-
-Thanks to Sujatha Sivakumar for contributing the replication test case.
----
- .../r/rpl_sync_with_innodb_thd_conc.result | 13 ++++++
- .../rpl/t/rpl_sync_with_innodb_thd_conc.test | 41 +++++++++++++++++++
- storage/innobase/handler/ha_innodb.cc | 6 +--
- storage/xtradb/handler/ha_innodb.cc | 6 +--
- 4 files changed, 60 insertions(+), 6 deletions(-)
- create mode 100644 mysql-test/suite/rpl/r/rpl_sync_with_innodb_thd_conc.result
- create mode 100644 mysql-test/suite/rpl/t/rpl_sync_with_innodb_thd_conc.test
-
-diff --git a/mysql-test/suite/rpl/r/rpl_sync_with_innodb_thd_conc.result b/mysql-test/suite/rpl/r/rpl_sync_with_innodb_thd_conc.result
-new file mode 100644
-index 000000000000..0ed894336a1c
---- /dev/null
-+++ b/mysql-test/suite/rpl/r/rpl_sync_with_innodb_thd_conc.result
-@@ -0,0 +1,13 @@
-+include/master-slave.inc
-+[connection master]
-+SET @old_innodb_thread_concurrency := @@innodb_thread_concurrency;
-+SET @old_innodb_thread_sleep_delay := @@innodb_thread_sleep_delay;
-+SET GLOBAL innodb_thread_concurrency = 100;
-+CREATE TABLE t(f INT) ENGINE=INNODB;
-+INSERT INTO t VALUES (10);
-+include/diff_tables.inc [master:t, slave:t]
-+"===== Clean up======="
-+DROP TABLE t;
-+SET GLOBAL innodb_thread_concurrency = @old_innodb_thread_concurrency;
-+SET GLOBAL innodb_thread_sleep_delay = @old_innodb_thread_sleep_delay;
-+include/rpl_end.inc
-diff --git a/mysql-test/suite/rpl/t/rpl_sync_with_innodb_thd_conc.test b/mysql-test/suite/rpl/t/rpl_sync_with_innodb_thd_conc.test
-new file mode 100644
-index 000000000000..b4c2971d2fbc
---- /dev/null
-+++ b/mysql-test/suite/rpl/t/rpl_sync_with_innodb_thd_conc.test
-@@ -0,0 +1,41 @@
-+# ==== Purpose ====
-+#
-+# Test verifies that replication shouldn't hang when number of active threads
-+# on the slave server are less than the allowed innodb_thread_concurrency value.
-+#
-+# ==== Implementation ====
-+#
-+# Steps:
-+# 0 - Have master slave replication setup with engine being Innodb.
-+# 1 - Configure innodb_thread_concurrency = 100.
-+# 2 - Do some DML on master and sync the slave with master.
-+# 3 - Ensure replication doesn't hang.
-+#
-+# ==== References ====
-+#
-+# MDEV-20247: Replication hangs with "preparing" and never starts
-+#
-+
-+--source include/master-slave.inc
-+--source include/have_innodb.inc
-+
-+--connection slave
-+SET @old_innodb_thread_concurrency := @@innodb_thread_concurrency;
-+SET @old_innodb_thread_sleep_delay := @@innodb_thread_sleep_delay;
-+SET GLOBAL innodb_thread_concurrency = 100;
-+
-+--connection master
-+CREATE TABLE t(f INT) ENGINE=INNODB;
-+INSERT INTO t VALUES (10);
-+--sync_slave_with_master
-+
-+--let $diff_tables=master:t, slave:t
-+--source include/diff_tables.inc
-+
-+--echo "===== Clean up======="
-+--connection master
-+DROP TABLE t;
-+--sync_slave_with_master
-+SET GLOBAL innodb_thread_concurrency = @old_innodb_thread_concurrency;
-+SET GLOBAL innodb_thread_sleep_delay = @old_innodb_thread_sleep_delay;
-+--source include/rpl_end.inc
-diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
-index 081fcbd9c51e..5dfe240631b8 100644
---- a/storage/innobase/handler/ha_innodb.cc
-+++ b/storage/innobase/handler/ha_innodb.cc
-@@ -1686,9 +1686,9 @@ innobase_srv_conc_enter_innodb(
- && thd_is_replication_slave_thread(trx->mysql_thd)) {
- const ulonglong end = my_interval_timer()
- + ulonglong(srv_replication_delay) * 1000000;
-- while (srv_conc_get_active_threads()
-- >= srv_thread_concurrency
-- || my_interval_timer() >= end) {
-+ while ((srv_conc_get_active_threads()
-+ >= srv_thread_concurrency)
-+ && my_interval_timer() < end) {
- os_thread_sleep(2000 /* 2 ms */);
- }
- } else {
-diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc
-index 5e7482ff6bfa..b5002187e3b2 100644
---- a/storage/xtradb/handler/ha_innodb.cc
-+++ b/storage/xtradb/handler/ha_innodb.cc
-@@ -1949,9 +1949,9 @@ innobase_srv_conc_enter_innodb(
- && thd_is_replication_slave_thread(trx->mysql_thd)) {
- const ulonglong end = my_interval_timer()
- + ulonglong(srv_replication_delay) * 1000000;
-- while (srv_conc_get_active_threads()
-- >= srv_thread_concurrency
-- || my_interval_timer() >= end) {
-+ while ((srv_conc_get_active_threads()
-+ >= srv_thread_concurrency)
-+ && my_interval_timer() < end) {
- os_thread_sleep(2000 /* 2 ms */);
- }
- } else {