mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
58c33f5514
problems 1) BUG#39320 - innodb crash in file btr/btr0pcur.c line 217 with innodb_locks_unsafe_for_binlog 2) Fixes bug in multi-table semi consistent reads. 3) Fixes email address from dev@innodb.com to innodb_dev_ww@oracle.com 4) Fixes warning message generated by main.innodb test Detailed revision comments: r4399 | marko | 2009-03-12 09:38:05 +0200 (Thu, 12 Mar 2009) | 5 lines branches/5.1: row_sel_get_clust_rec_for_mysql(): Store the cursor position also for unlock_row(). (Bug #39320) rb://96 approved by Heikki Tuuri. r4400 | marko | 2009-03-12 10:06:44 +0200 (Thu, 12 Mar 2009) | 8 lines branches/5.1: Fix a bug in multi-table semi-consistent reads. Remember the acquired record locks per table handle (row_prebuilt_t) rather than per transaction (trx_t), so that unlock_row should successfully unlock all non-matching rows in multi-table operations. This deficiency was found while investigating Bug #39320. rb://94 approved by Heikki Tuuri. r4481 | marko | 2009-03-19 15:01:48 +0200 (Thu, 19 Mar 2009) | 6 lines branches/5.1: row_unlock_for_mysql(): Do not unlock records that were modified by the current transaction. This bug was introduced or unmasked in r4400. rb://97 approved by Heikki Tuuri r4573 | vasil | 2009-03-30 14:17:13 +0300 (Mon, 30 Mar 2009) | 4 lines branches/5.1: Fix email address from dev@innodb.com to innodb_dev_ww@oracle.com r4574 | vasil | 2009-03-30 14:27:08 +0300 (Mon, 30 Mar 2009) | 38 lines branches/5.1: Restore the state of INNODB_THREAD_CONCURRENCY to silence this warning: TEST RESULT TIME (ms) ------------------------------------------------------------ worker[1] Using MTR_BUILD_THREAD 250, with reserved ports 12500..12509 main.innodb [ pass ] 8803 MTR's internal check of the test case 'main.innodb' failed. This means that the test case does not preserve the state that existed before the test case was executed. Most likely the test case did not do a proper clean-up. This is the diff of the states of the servers before and after the test case was executed: mysqltest: Logging to '/tmp/autotest.sh-20090330_033000-5.1.5Hg8CY/mysql-5.1/mysql-test/var/tmp/check-mysqld_1.log'. mysqltest: Results saved in '/tmp/autotest.sh-20090330_033000-5.1.5Hg8CY/mysql-5.1/mysql-test/var/tmp/check-mysqld_1.result'. mysqltest: Connecting to server localhost:12500 (socket /tmp/autotest.sh-20090330_033000-5.1.5Hg8CY/mysql-5.1/mysql-test/var/tmp/mysqld.1.sock) as 'root', connection 'default', attempt 0 ... mysqltest: ... Connected. mysqltest: Start processing test commands from './include/check-testcase.test' ... mysqltest: ... Done processing test commands. --- /tmp/autotest.sh-20090330_033000-5.1.5Hg8CY/mysql-5.1/mysql-test/var/tmp/check-mysqld_1.result 2009-03-30 14:12:31.000000000 +0300 +++ /tmp/autotest.sh-20090330_033000-5.1.5Hg8CY/mysql-5.1/mysql-test/var/tmp/check-mysqld_1.reject 2009-03-30 14:12:41.000000000 +0300 @@ -99,7 +99,7 @@ INNODB_SUPPORT_XA ON INNODB_SYNC_SPIN_LOOPS 20 INNODB_TABLE_LOCKS ON -INNODB_THREAD_CONCURRENCY 8 +INNODB_THREAD_CONCURRENCY 16 INNODB_THREAD_SLEEP_DELAY 10000 INSERT_ID 0 INTERACTIVE_TIMEOUT 28800 mysqltest: Result content mismatch not ok r4576 | vasil | 2009-03-30 16:25:10 +0300 (Mon, 30 Mar 2009) | 4 lines branches/5.1: Revert a change to Makefile.am that I committed accidentally in c4574.
68 lines
1.8 KiB
Text
68 lines
1.8 KiB
Text
-- source include/not_embedded.inc
|
|
-- source include/have_innodb.inc
|
|
|
|
--disable_warnings
|
|
drop table if exists t1;
|
|
--enable_warnings
|
|
|
|
# basic tests of semi-consistent reads
|
|
|
|
connect (a,localhost,root,,);
|
|
connect (b,localhost,root,,);
|
|
connection a;
|
|
set binlog_format=mixed;
|
|
set session transaction isolation level repeatable read;
|
|
create table t1(a int not null) engine=innodb DEFAULT CHARSET=latin1;
|
|
insert into t1 values (1),(2),(3),(4),(5),(6),(7);
|
|
set autocommit=0;
|
|
# this should lock the entire table
|
|
select * from t1 where a=3 lock in share mode;
|
|
connection b;
|
|
set binlog_format=mixed;
|
|
set session transaction isolation level repeatable read;
|
|
set autocommit=0;
|
|
-- error ER_LOCK_WAIT_TIMEOUT
|
|
update t1 set a=10 where a=5;
|
|
connection a;
|
|
commit;
|
|
connection b;
|
|
# perform a semi-consisent read (and unlock non-matching rows)
|
|
set session transaction isolation level read committed;
|
|
update t1 set a=10 where a=5;
|
|
connection a;
|
|
-- error ER_LOCK_WAIT_TIMEOUT
|
|
select * from t1 where a=2 for update;
|
|
# this should lock the records (1),(2)
|
|
select * from t1 where a=2 limit 1 for update;
|
|
connection b;
|
|
# semi-consistent read will skip non-matching locked rows a=1, a=2
|
|
update t1 set a=11 where a=6;
|
|
-- error ER_LOCK_WAIT_TIMEOUT
|
|
update t1 set a=12 where a=2;
|
|
-- error ER_LOCK_WAIT_TIMEOUT
|
|
update t1 set a=13 where a=1;
|
|
connection a;
|
|
commit;
|
|
connection b;
|
|
update t1 set a=14 where a=1;
|
|
commit;
|
|
connection a;
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
connection default;
|
|
disconnect a;
|
|
disconnect b;
|
|
|
|
# Bug 39320
|
|
create table t1 (a int, b int) engine=myisam;
|
|
create table t2 (c int, d int, key (c)) engine=innodb;
|
|
insert into t1 values (1,1);
|
|
insert into t2 values (1,2);
|
|
connect (a,localhost,root,,);
|
|
connection a;
|
|
set session transaction isolation level read committed;
|
|
delete from t1 using t1 join t2 on t1.a = t2.c where t2.d in (1);
|
|
connection default;
|
|
disconnect a;
|
|
drop table t1, t2;
|