mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Fixed a bug checksum table locks the InnoDB table and does not use a
consistent read (Bug #12669). This fixes InnoDB part of the bug. mysql-test/r/innodb.result: Added results for a checksum test. mysql-test/t/innodb.test: Addeed a test case for a checksum bug #12669. sql/ha_innodb.cc: Use consistent read for checksum table.
This commit is contained in:
@ -2616,3 +2616,31 @@ SET FOREIGN_KEY_CHECKS=1;
|
||||
INSERT INTO t2 VALUES(3);
|
||||
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test/t2`, CONSTRAINT `c1` FOREIGN KEY (`v`) REFERENCES `t1` (`id`))
|
||||
DROP TABLE t2;
|
||||
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;
|
||||
|
@ -1564,3 +1564,42 @@ SET FOREIGN_KEY_CHECKS=1;
|
||||
INSERT INTO t2 VALUES(3);
|
||||
|
||||
DROP TABLE t2;
|
||||
#
|
||||
# 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;
|
||||
|
@ -6686,6 +6686,11 @@ ha_innobase::store_lock(
|
||||
without FOR UPDATE or IN SHARE MODE in select, then
|
||||
we use consistent read for select. */
|
||||
|
||||
prebuilt->select_lock_type = LOCK_NONE;
|
||||
prebuilt->stored_select_lock_type = LOCK_NONE;
|
||||
} else if (thd->lex->sql_command == SQLCOM_CHECKSUM) {
|
||||
/* Use consistent read for checksum table */
|
||||
|
||||
prebuilt->select_lock_type = LOCK_NONE;
|
||||
prebuilt->stored_select_lock_type = LOCK_NONE;
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user