mirror of
https://github.com/MariaDB/server.git
synced 2025-07-03 01:48:12 +02:00

* handler::get_auto_increment() was not expecting any errors from the storage engine. That was wrong, errors could happen. * ha_partition::get_auto_increment() was doing index lookups in partition under a mutex. This was redundant (engine transaction isolation was covering that anyway) and harmful (causing deadlocks).
51 lines
1.1 KiB
Text
51 lines
1.1 KiB
Text
#
|
|
# MDEV-6605 Multiple Clients Inserting Causing Error: Failed to read auto-increment value from storage engine
|
|
#
|
|
|
|
--source include/have_partition.inc
|
|
create table t1 (a int auto_increment, b bigint(20), primary key (b,a)) engine=tokudb;
|
|
|
|
# first, without partitions
|
|
start transaction;
|
|
insert t1 (b) values (1);
|
|
|
|
--connect(con2,localhost,root)
|
|
set tokudb_lock_timeout=1;
|
|
# auto-inc value is locked
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
insert t1 (b) values (1);
|
|
# but no deadlock
|
|
set tokudb_lock_timeout=default;
|
|
--send insert t1 (b) values (1)
|
|
--connection default
|
|
insert t1 (b) values (1);
|
|
commit;
|
|
--connection con2
|
|
--reap
|
|
commit;
|
|
select * from t1;
|
|
|
|
# now with partitions
|
|
--connection default
|
|
alter table t1 partition by range (b) (partition p0 values less than (9));
|
|
start transaction;
|
|
insert t1 (b) values (2);
|
|
|
|
--connection con2
|
|
set tokudb_lock_timeout=1;
|
|
# auto-inc value is locked
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
insert t1 (b) values (2);
|
|
# but no deadlock
|
|
set tokudb_lock_timeout=default;
|
|
--send insert t1 (b) values (2)
|
|
--connection default
|
|
insert t1 (b) values (2);
|
|
commit;
|
|
--connection con2
|
|
--reap
|
|
commit;
|
|
select * from t1;
|
|
|
|
drop table t1;
|
|
|