Commit 2dafa483 authored by Rich Prohaska's avatar Rich Prohaska

#90 add a test scenario where the 2nd txn succeeds

parent e84c52de
...@@ -2,13 +2,12 @@ set default_storage_engine='tokudb'; ...@@ -2,13 +2,12 @@ set default_storage_engine='tokudb';
set tokudb_prelock_empty=false; set tokudb_prelock_empty=false;
drop table if exists t; drop table if exists t;
create table t (id int primary key); create table t (id int primary key);
set autocommit=0; select * from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time
select * from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id
set autocommit=0; set autocommit=0;
insert into t values (1); insert into t values (1);
set autocommit=0; set autocommit=0;
...@@ -28,8 +27,41 @@ select * from information_schema.tokudb_locks; ...@@ -28,8 +27,41 @@ select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right
TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000
TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000
select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time
ERROR 23000: Duplicate entry '1' for key 'PRIMARY' ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
commit; commit;
select * from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id
select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right
select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time
set autocommit=0;
replace into t values (1);
set autocommit=0;
replace into t values (1);
select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right
TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000
select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time
REQUEST_TRX_ID BLOCK_TRX_ID ./test/t-main 0001000000 0001000000 LOCK_WAITS_START_TIME
select * from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id
TRX_ID MYSQL_ID
TRX_ID MYSQL_ID
commit;
select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right
TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000
select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time
commit;
select * from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right
select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time
drop table t; drop table t;
...@@ -9,57 +9,99 @@ drop table if exists t; ...@@ -9,57 +9,99 @@ drop table if exists t;
enable_warnings; enable_warnings;
create table t (id int primary key); create table t (id int primary key);
set autocommit=0;
let $default_id=`select connection_id()`; # verify that txn_a insert (1) blocks txn_b insert (1) and txn_b gets a duplicate key error
# should be empty # should be empty
select * from information_schema.tokudb_trx;
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
select * from information_schema.tokudb_trx;
connect (conn_a,localhost,root,,); connect (conn_a,localhost,root,,);
set autocommit=0; set autocommit=0;
let $a_id=`select connection_id()`;
insert into t values (1); insert into t values (1);
connect (conn_b,localhost,root,,); connect (conn_b,localhost,root,,);
set autocommit=0; set autocommit=0;
let $b_id=`select connection_id()`;
send insert into t values (1); send insert into t values (1);
# should find the presence of a lock on 1st transaction # should find the presence of a lock on 1st transaction
connection default; connection default;
replace_column 1 TRX_ID 2 MYSQL_ID; replace_column 1 TRX_ID 2 MYSQL_ID;
eval select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
# should find the presence of a lock_wait on the 2nd transaction # should find the presence of a lock_wait on the 2nd transaction
replace_column 1 REQUEST_TRX_ID 2 BLOCK_TRX_ID 6 LOCK_WAITS_START_TIME; replace_column 1 REQUEST_TRX_ID 2 BLOCK_TRX_ID 6 LOCK_WAITS_START_TIME;
eval select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
# should find the presence of two transactions # should find the presence of two transactions
replace_column 1 TRX_ID 2 MYSQL_ID; replace_column 1 TRX_ID 2 MYSQL_ID;
eval select * from information_schema.tokudb_trx; select * from information_schema.tokudb_trx;
connection conn_a; connection conn_a;
commit; commit;
# verify that the lock on the 1st transaction is released and replaced by the lock for the 2nd transaction # verify that the lock on the 1st transaction is released and replaced by the lock for the 2nd transaction
replace_column 1 TRX_ID 2 MYSQL_ID; replace_column 1 TRX_ID 2 MYSQL_ID;
eval select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits;
connection conn_b; connection conn_b;
--error 1062 --error 1062 # duplicate key
reap; reap;
commit; commit;
connection default;
disconnect conn_a;
disconnect conn_b; disconnect conn_b;
connection default; # verify that txn_a replace (1) blocks txn_b replace (1) and txn_b eventually gets the lock on (1) and completes
# verify that the lock on the 2nd transaction has been released # verify that the lock on the 2nd transaction has been released
# should be be empty # should be be empty
select * from information_schema.tokudb_trx;
select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits;
connect (conn_a,localhost,root,,);
set autocommit=0;
replace into t values (1);
connect (conn_b,localhost,root,,);
set autocommit=0;
send replace into t values (1);
# should find the presence of a lock on 1st transaction
connection default;
replace_column 1 TRX_ID 2 MYSQL_ID;
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
# should find the presence of a lock_wait on the 2nd transaction
replace_column 1 REQUEST_TRX_ID 2 BLOCK_TRX_ID 6 LOCK_WAITS_START_TIME;
select * from information_schema.tokudb_lock_waits;
# should find the presence of two transactions
replace_column 1 TRX_ID 2 MYSQL_ID;
select * from information_schema.tokudb_trx;
connection conn_a;
commit;
# verify that the lock on the 1st transaction is released and replaced by the lock for the 2nd transaction
replace_column 1 TRX_ID 2 MYSQL_ID;
select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits;
connection conn_b;
reap;
commit;
connection default;
disconnect conn_a;
disconnect conn_b;
# verify that the lock on the 2nd transaction has been released
# should be be empty
select * from information_schema.tokudb_trx;
select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits;
drop table t; drop table t;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment