List:Commits« Previous MessageNext Message »
From:Satya B Date:July 10 2009 10:36am
Subject:bzr commit into mysql-5.1-bugteam branch (satya.bn:3019) Bug#45749
View as plain text  
#At file:///home/satya/WORK/mysql/mysql-5.1-bugteam/ based on revid:satya.bn@stripped

 3019 Satya B	2009-07-10
      Applying InnoDB snapshot 5.1-ss5488,part 2. Fixes BUG#45749
      
      BUG#45749 - Race condition in SET GLOBAL innodb_commit_concurrency=DEFAULT
      
      Detailed revision comments:
      
      r5419 | marko | 2009-06-25 16:11:57 +0300 (Thu, 25 Jun 2009) | 18 lines
      branches/5.1: Merge r5418 from branches/zip:
      
        ------------------------------------------------------------------------
        r5418 | marko | 2009-06-25 15:55:52 +0300 (Thu, 25 Jun 2009) | 5 lines
        Changed paths:
           M /branches/zip/ChangeLog
           M /branches/zip/handler/ha_innodb.cc
           M /branches/zip/mysql-test/innodb_bug42101-nonzero.result
           M /branches/zip/mysql-test/innodb_bug42101-nonzero.test
           M /branches/zip/mysql-test/innodb_bug42101.result
           M /branches/zip/mysql-test/innodb_bug42101.test
        
        branches/zip: Fix a race condition caused by
        SET GLOBAL innodb_commit_concurrency=DEFAULT. (Bug #45749)
        When innodb_commit_concurrency is initially set nonzero,
        DEFAULT would change it back to 0, triggering Bug #42101.
        rb://139 approved by Heikki Tuuri.
        ------------------------------------------------------------------------
      modified:
        mysql-test/r/innodb_bug42101-nonzero.result
        mysql-test/r/innodb_bug42101.result
        mysql-test/t/innodb_bug42101-nonzero.test
        mysql-test/t/innodb_bug42101.test
        storage/innobase/handler/ha_innodb.cc

=== modified file 'mysql-test/r/innodb_bug42101-nonzero.result'
--- a/mysql-test/r/innodb_bug42101-nonzero.result	2009-05-19 08:20:28 +0000
+++ b/mysql-test/r/innodb_bug42101-nonzero.result	2009-07-10 10:36:07 +0000
@@ -11,11 +11,15 @@ set global innodb_commit_concurrency=42;
 select @@innodb_commit_concurrency;
 @@innodb_commit_concurrency
 42
+set global innodb_commit_concurrency=DEFAULT;
+select @@innodb_commit_concurrency;
+@@innodb_commit_concurrency
+1
 set global innodb_commit_concurrency=0;
 ERROR HY000: Incorrect arguments to SET
 select @@innodb_commit_concurrency;
 @@innodb_commit_concurrency
-42
+1
 set global innodb_commit_concurrency=1;
 select @@innodb_commit_concurrency;
 @@innodb_commit_concurrency

=== modified file 'mysql-test/r/innodb_bug42101.result'
--- a/mysql-test/r/innodb_bug42101.result	2009-05-19 08:20:28 +0000
+++ b/mysql-test/r/innodb_bug42101.result	2009-07-10 10:36:07 +0000
@@ -16,3 +16,7 @@ set global innodb_commit_concurrency=0;
 select @@innodb_commit_concurrency;
 @@innodb_commit_concurrency
 0
+set global innodb_commit_concurrency=DEFAULT;
+select @@innodb_commit_concurrency;
+@@innodb_commit_concurrency
+0

=== modified file 'mysql-test/t/innodb_bug42101-nonzero.test'
--- a/mysql-test/t/innodb_bug42101-nonzero.test	2009-05-19 08:20:28 +0000
+++ b/mysql-test/t/innodb_bug42101-nonzero.test	2009-07-10 10:36:07 +0000
@@ -12,6 +12,8 @@ set global innodb_commit_concurrency=1;
 select @@innodb_commit_concurrency;
 set global innodb_commit_concurrency=42;
 select @@innodb_commit_concurrency;
+set global innodb_commit_concurrency=DEFAULT;
+select @@innodb_commit_concurrency;
 --error ER_WRONG_ARGUMENTS
 set global innodb_commit_concurrency=0;
 select @@innodb_commit_concurrency;

=== modified file 'mysql-test/t/innodb_bug42101.test'
--- a/mysql-test/t/innodb_bug42101.test	2009-05-19 08:20:28 +0000
+++ b/mysql-test/t/innodb_bug42101.test	2009-07-10 10:36:07 +0000
@@ -15,3 +15,5 @@ set global innodb_commit_concurrency=42;
 select @@innodb_commit_concurrency;
 set global innodb_commit_concurrency=0;
 select @@innodb_commit_concurrency;
+set global innodb_commit_concurrency=DEFAULT;
+select @@innodb_commit_concurrency;

=== modified file 'storage/innobase/handler/ha_innodb.cc'
--- a/storage/innobase/handler/ha_innodb.cc	2009-06-25 09:52:46 +0000
+++ b/storage/innobase/handler/ha_innodb.cc	2009-07-10 10:36:07 +0000
@@ -166,6 +166,20 @@ static handler *innobase_create_handler(
 
 static const char innobase_hton_name[]= "InnoDB";
 
+/** @brief Initialize the default value of innodb_commit_concurrency.
+
+Once InnoDB is running, the innodb_commit_concurrency must not change
+from zero to nonzero. (Bug #42101)
+
+The initial default value is 0, and without this extra initialization,
+SET GLOBAL innodb_commit_concurrency=DEFAULT would set the parameter
+to 0, even if it was initially set to nonzero at the command line
+or configuration file. */
+static
+void
+innobase_commit_concurrency_init_default(void);
+/*==========================================*/
+
 /*****************************************************************
 Check for a valid value of innobase_commit_concurrency. */
 static
@@ -1775,6 +1789,8 @@ innobase_init(
 						(char*)"latin1_swedish_ci"));
 	memcpy(srv_latin1_ordering, my_charset_latin1.sort_order, 256);
 
+	innobase_commit_concurrency_init_default();
+
 	/* Since we in this module access directly the fields of a trx
 	struct, and due to different headers and flags it might happen that
 	mutex_t has a different size in this module and in InnoDB
@@ -8464,3 +8480,21 @@ mysql_declare_plugin(innobase)
   NULL /* reserved */
 }
 mysql_declare_plugin_end;
+
+/** @brief Initialize the default value of innodb_commit_concurrency.
+
+Once InnoDB is running, the innodb_commit_concurrency must not change
+from zero to nonzero. (Bug #42101)
+
+The initial default value is 0, and without this extra initialization,
+SET GLOBAL innodb_commit_concurrency=DEFAULT would set the parameter
+to 0, even if it was initially set to nonzero at the command line
+or configuration file. */
+static
+void
+innobase_commit_concurrency_init_default(void)
+/*==========================================*/
+{
+	MYSQL_SYSVAR_NAME(commit_concurrency).def_val
+		= innobase_commit_concurrency;
+}

Thread
bzr commit into mysql-5.1-bugteam branch (satya.bn:3019) Bug#45749Satya B10 Jul