[arch-commits] Commit in mariadb/trunk (2 files)

Christian Hesse eworm at archlinux.org
Wed Mar 13 10:51:18 UTC 2019


    Date: Wednesday, March 13, 2019 @ 10:51:17
  Author: eworm
Revision: 347827

upgpkg: mariadb 10.3.13-4

MDEV-18577: Indexes problem on import dump SQL
https://jira.mariadb.org/browse/MDEV-18577

Added:
  mariadb/trunk/0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch
Modified:
  mariadb/trunk/PKGBUILD

----------------------------------------------------------+
 0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch |  121 +++++++++++++
 PKGBUILD                                                 |   12 -
 2 files changed, 130 insertions(+), 3 deletions(-)

Added: 0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch
===================================================================
--- 0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch	                        (rev 0)
+++ 0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch	2019-03-13 10:51:17 UTC (rev 347827)
@@ -0,0 +1,121 @@
+commit e73060b6c9b3655cadcd34c66fc7811d214c1673
+Author: Jan Lindström <jan.lindstrom at mariadb.com>
+Date:   Tue Mar 12 15:44:10 2019 +0200
+
+    MDEV-18577: Indexes problem on import dump SQL
+    
+    Problem was that we skipped background persistent statistics calculation
+    on applier nodes if thread is marked as high priority (a.k.a BF).
+    However, on applier nodes all DDL which is replicate will be executed
+    as high priority i.e BF.
+    
+    Fixed by allowing background persistent statistics calculation on
+    applier nodes even when thread is marked as BF. This could lead
+    BF lock waits but for queries on that node needs that statistics.
+
+diff --git a/include/mysql/service_wsrep.h b/include/mysql/service_wsrep.h
+index 267c8cb4e90..ee28856ac73 100644
+--- a/include/mysql/service_wsrep.h
++++ b/include/mysql/service_wsrep.h
+@@ -112,6 +112,7 @@ extern struct wsrep_service_st {
+   int                         (*wsrep_trx_order_before_func)(MYSQL_THD, MYSQL_THD);
+   void                        (*wsrep_unlock_rollback_func)();
+   void                        (*wsrep_set_data_home_dir_func)(const char *data_dir);
++  my_bool                     (*wsrep_thd_is_applier_func)(MYSQL_THD);
+ } *wsrep_service;
+ 
+ #ifdef MYSQL_DYNAMIC_PLUGIN
+@@ -155,6 +156,7 @@ extern struct wsrep_service_st {
+ #define wsrep_trx_order_before(T1,T2) wsrep_service->wsrep_trx_order_before_func(T1,T2)
+ #define wsrep_unlock_rollback() wsrep_service->wsrep_unlock_rollback_func()
+ #define wsrep_set_data_home_dir(A) wsrep_service->wsrep_set_data_home_dir_func(A)
++#define wsrep_thd_is_applier(T) wsrep_service->wsrep_thd_is_applier(T)
+ 
+ #define wsrep_debug get_wsrep_debug()
+ #define wsrep_log_conflicts get_wsrep_log_conflicts()
+@@ -214,7 +216,7 @@ void wsrep_thd_set_conflict_state(THD *thd, enum wsrep_conflict_state state);
+ bool wsrep_thd_ignore_table(THD *thd);
+ void wsrep_unlock_rollback();
+ void wsrep_set_data_home_dir(const char *data_dir);
+-
++my_bool wsrep_thd_is_applier(MYSQL_THD thd);
+ #endif
+ 
+ #ifdef __cplusplus
+diff --git a/sql/sql_plugin_services.ic b/sql/sql_plugin_services.ic
+index 7fb5524016a..3d6cf0a0723 100644
+--- a/sql/sql_plugin_services.ic
++++ b/sql/sql_plugin_services.ic
+@@ -181,7 +181,8 @@ static struct wsrep_service_st wsrep_handler = {
+   wsrep_trx_is_aborting,
+   wsrep_trx_order_before,
+   wsrep_unlock_rollback,
+-  wsrep_set_data_home_dir
++  wsrep_set_data_home_dir,
++  wsrep_thd_is_applier
+ };
+ 
+ static struct thd_specifics_service_st thd_specifics_handler=
+diff --git a/sql/wsrep_dummy.cc b/sql/wsrep_dummy.cc
+index 795e2d19252..7297dbfe0fd 100644
+--- a/sql/wsrep_dummy.cc
++++ b/sql/wsrep_dummy.cc
+@@ -141,3 +141,6 @@ void wsrep_unlock_rollback()
+ 
+ void wsrep_set_data_home_dir(const char *)
+ { }
++
++my_bool wsrep_thd_is_applier(MYSQL_THD thd)
++{ return false; }
+diff --git a/sql/wsrep_thd.cc b/sql/wsrep_thd.cc
+index a3d1961ade2..dab9f91b381 100644
+--- a/sql/wsrep_thd.cc
++++ b/sql/wsrep_thd.cc
+@@ -698,3 +698,13 @@ void wsrep_thd_auto_increment_variables(THD* thd,
+     *increment= thd->variables.auto_increment_increment;
+   }
+ }
++
++my_bool wsrep_thd_is_applier(MYSQL_THD thd)
++{
++  my_bool is_applier= false;
++
++  if (thd && thd->wsrep_applier)
++    is_applier= true;
++
++  return (is_applier);
++}
+diff --git a/storage/innobase/dict/dict0stats_bg.cc b/storage/innobase/dict/dict0stats_bg.cc
+index 55bcafddc70..7d30555748c 100644
+--- a/storage/innobase/dict/dict0stats_bg.cc
++++ b/storage/innobase/dict/dict0stats_bg.cc
+@@ -164,10 +164,26 @@ void dict_stats_update_if_needed_func(dict_table_t* table)
+ 		    && dict_stats_auto_recalc_is_enabled(table)) {
+ 
+ #ifdef WITH_WSREP
+-			if (thd && wsrep_on(thd) && wsrep_thd_is_BF(thd, 0)) {
++			/* Do not add table to background
++			statistic calculation if this thread is not a
++			applier (as all DDL, which is replicated (i.e
++			is binlogged in master node), will be executed
++			with high priority (a.k.a BF) in slave nodes)
++			and is BF. This could again lead BF lock
++			waits in applier node but it is better than
++			no persistent index/table statistics at
++			applier nodes. TODO: allow BF threads
++			wait for these InnoDB internal SQL-parser
++			generated row locks and allow BF thread
++			lock waits to be enqueued at head of waiting
++			queue. */
++			if (thd
++			    && !wsrep_thd_is_applier(thd)
++			    && wsrep_on(thd)
++			    && wsrep_thd_is_BF(thd, 0)) {
+ 				WSREP_DEBUG("Avoiding background statistics"
+-					    " calculation for table %s",
+-					    table->name.m_name);
++					    " calculation for table %s.",
++					table->name.m_name);
+ 				return;
+ 			}
+ #endif /* WITH_WSREP */

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2019-03-13 09:56:40 UTC (rev 347826)
+++ PKGBUILD	2019-03-13 10:51:17 UTC (rev 347827)
@@ -5,7 +5,7 @@
 pkgname=('mariadb-libs' 'mariadb-clients' 'mariadb' 'mytop')
 pkgdesc='Fast SQL database server, derived from MySQL'
 pkgver=10.3.13
-pkgrel=3
+pkgrel=4
 arch=('x86_64')
 license=('GPL')
 url='https://mariadb.org/'
@@ -17,7 +17,8 @@
         '0002-systemd-sysusers-tmpfiles.patch'
         '0004-do-not-break-main-configuration-with-instantiated-one.patch'
         '0005-fix-galera_recovery-with-fs.protected_regular-enabled.patch'
-        '0007-MDEV-18605-Loss-of-column-aliases-by-using-view-and-.patch')
+        '0007-MDEV-18605-Loss-of-column-aliases-by-using-view-and-.patch'
+        '0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch')
 sha256sums=('b2aa857ef5b84f85a7ea60a1eac7b34c0ca5151c71a0d44ce2d7fb028d71459a'
             'SKIP'
             '5b74e328e75369dfb68491a06dd53bd736e34f87281103ae0dd2f50401dc70d3'
@@ -24,7 +25,8 @@
             '1cd009b473d5965c7cbe6d48fff272030a2ccdd9c7e67b4f837d03252786a09a'
             'd12806e4f90cc0fc081205dd4c0a5e0e7c455844f04276811b61b57fd24f5545'
             '66e0acac7436fd8925710ef5cc66ba1a8f63a385ce374f01ae83096cc33d97a0'
-            '98f0bd85e1729133d236831e934a3dd0c9bc6deebbff6aebe8a4bda17e457ac4')
+            '98f0bd85e1729133d236831e934a3dd0c9bc6deebbff6aebe8a4bda17e457ac4'
+            '9862b64ea29d3d94434e6b8f422df97e7528b331b793d7a50f22f176d4886325')
 
 prepare() {
   cd $pkgbase-$pkgver/
@@ -52,6 +54,10 @@
   # MDEV-18605: Loss of column aliases by using view and group
   # https://jira.mariadb.org/browse/MDEV-18605
   patch -Np1 < ../0007-MDEV-18605-Loss-of-column-aliases-by-using-view-and-.patch
+
+  # MDEV-18577: Indexes problem on import dump SQL
+  # https://jira.mariadb.org/browse/MDEV-18577
+  patch -Np1 < ../0008-MDEV-18577-Indexes-problem-on-import-dump-SQL.patch
 }
 
 build() {



More information about the arch-commits mailing list