List:Internals« Previous MessageNext Message »
From:Jan Lindstrom Date:September 28 2005 12:29pm
Subject:bk commit into 4.1 tree (jan:1.2459) BUG#12669
View as plain text  
Below is the list of changes that have just been committed into a local
4.1 repository of jan. When jan does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2459 05/09/28 13:29:34 jan@stripped +3 -0
  Fixed a bug checksum table locks the InnoDB table and does not use a
  consistent read (Bug #12669).

  sql/ha_innodb.cc
    1.208 05/09/28 13:29:25 jan@stripped +11 -2
    Use consistent read for checksum table and convert MySQL lock type
    to the TL_READ because at the moment MySQL uses TL_READ_NO_INSERT.

  mysql-test/t/innodb.test
    1.76 05/09/28 13:29:25 jan@stripped +41 -0
    Added test case for a checksum bug #12669.

  mysql-test/r/innodb.result
    1.105 05/09/28 13:29:25 jan@stripped +28 -0
    Added test results for a checksum test.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	jan
# Host:	hundin.mysql.fi
# Root:	/home/jan/mysql-4.1

--- 1.104/mysql-test/r/innodb.result	2005-09-19 03:39:25 +03:00
+++ 1.105/mysql-test/r/innodb.result	2005-09-28 13:29:25 +03:00
@@ -1694,3 +1694,31 @@
 min(b)
 6
 drop table t1;
+create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1;
+insert into test_checksum values (1),(2);
+set autocommit=0;
+checksum table test_checksum;
+Table	Checksum
+test.test_checksum	1531596814
+insert into test_checksum values(3);
+checksum table test_checksum;
+Table	Checksum
+test.test_checksum	1531596814
+commit;
+checksum table test_checksum;
+Table	Checksum
+test.test_checksum	2050879373
+commit;
+drop table test_checksum;
+create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1;
+insert into test_checksum values (1),(2);
+set autocommit=1;
+checksum table test_checksum;
+Table	Checksum
+test.test_checksum	1531596814
+set autocommit=1;
+insert into test_checksum values(3);
+checksum table test_checksum;
+Table	Checksum
+test.test_checksum	2050879373
+drop table test_checksum;

--- 1.75/mysql-test/t/innodb.test	2005-09-19 03:39:17 +03:00
+++ 1.76/mysql-test/t/innodb.test	2005-09-28 13:29:25 +03:00
@@ -1239,4 +1239,45 @@
 select min(a) from t1;
 select min(b) from t1 where a='8';
 drop table t1;
+
+#
+# Test that checksum table uses a consistent read Bug #12669
+#
+connect (a,localhost,root,,);
+connect (b,localhost,root,,);
+connection a;
+create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1;
+insert into test_checksum values (1),(2);
+set autocommit=0;
+checksum table test_checksum;
+connection b;
+insert into test_checksum values(3);
+connection a;
+#
+# Here checksum should not see insert
+#
+checksum table test_checksum;
+connection a;
+commit;
+checksum table test_checksum;
+commit;
+drop table test_checksum;
+#
+# autocommit = 1
+#
+connection a;
+create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1;
+insert into test_checksum values (1),(2);
+set autocommit=1;
+checksum table test_checksum;
+connection b;
+set autocommit=1;
+insert into test_checksum values(3);
+connection a;
+#
+# Here checksum sees insert
+#
+checksum table test_checksum;
+drop table test_checksum;
+
 # End of 4.1 tests

--- 1.207/sql/ha_innodb.cc	2005-08-31 14:27:26 +03:00
+++ 1.208/sql/ha_innodb.cc	2005-09-28 13:29:25 +03:00
@@ -5422,8 +5422,17 @@
 			prebuilt->select_lock_type = LOCK_NONE;
 			prebuilt->stored_select_lock_type = LOCK_NONE;
 		} else {
-			prebuilt->select_lock_type = LOCK_S;
-			prebuilt->stored_select_lock_type = LOCK_S;
+			if (thd->lex->sql_command == SQLCOM_CHECKSUM) {
+				/* Use consistent read for checksum table and
+				convert lock type to the TL_READ */
+
+				prebuilt->select_lock_type = LOCK_NONE;
+				prebuilt->stored_select_lock_type = LOCK_NONE;
+				lock.type = TL_READ;
+			} else {
+				prebuilt->select_lock_type = LOCK_S;
+				prebuilt->stored_select_lock_type = LOCK_S;
+			}
 		}
 
 	} else if (lock_type != TL_IGNORE) {
Thread
bk commit into 4.1 tree (jan:1.2459) BUG#12669Jan Lindstrom28 Sep