1set default_storage_engine='tokudb'; 2set tokudb_prelock_empty=false; 3drop table if exists t; 4create table t (id int primary key); 5t should be empty 6select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx; 7trx_id trx_mysql_thread_id 8select * from information_schema.tokudb_locks; 9locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name 10select * from information_schema.tokudb_lock_waits; 11requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name 12set autocommit=0; 13set tokudb_prelock_empty=OFF; 14set tokudb_lock_timeout=600000; 15insert into t values (1); 16set autocommit=0; 17set tokudb_lock_timeout=600000; 18insert into t values (1); 19should find the presence of a lock on 1st transaction 20select * from information_schema.tokudb_locks; 21locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name 22TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main 23should find the presence of a lock_wait on the 2nd transaction 24select * from information_schema.tokudb_lock_waits; 25requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name 26REQUEST_TRX_ID BLOCK_TRX_ID ./test/t-main 0001000000 0001000000 LOCK_WAITS_START_TIME test t main 27should find the presence of two transactions 28select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx; 29trx_id trx_mysql_thread_id 30TRX_ID MYSQL_ID 31TRX_ID MYSQL_ID 32commit; 33verify that the lock on the 1st transaction is released and replaced by the lock for the 2nd transaction 34select * from information_schema.tokudb_locks; 35locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name 36TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main 37select * from information_schema.tokudb_lock_waits; 38requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name 39ERROR 23000: Duplicate entry '1' for key 'PRIMARY' 40commit; 41verify that txn_a replace (1) blocks txn_b replace (1) and txn_b eventually gets the lock on (1) and completes 42verify that the lock on the 2nd transaction has been released, should be be empty 43select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx; 44trx_id trx_mysql_thread_id 45select * from information_schema.tokudb_locks; 46locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name 47select * from information_schema.tokudb_lock_waits; 48requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name 49set autocommit=0; 50set tokudb_lock_timeout=600000; 51set tokudb_prelock_empty=OFF; 52replace into t values (1); 53set autocommit=0; 54set tokudb_lock_timeout=600000; 55replace into t values (1); 56should find the presence of a lock on 1st transaction 57select * from information_schema.tokudb_locks; 58locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name 59TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main 60should find the presence of a lock_wait on the 2nd transaction 61select * from information_schema.tokudb_lock_waits; 62requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name 63REQUEST_TRX_ID BLOCK_TRX_ID ./test/t-main 0001000000 0001000000 LOCK_WAITS_START_TIME test t main 64should find the presence of two transactions 65select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx; 66trx_id trx_mysql_thread_id 67TRX_ID MYSQL_ID 68TRX_ID MYSQL_ID 69commit; 70verify that the lock on the 1st transaction is released and replaced by the lock for the 2nd transaction 71select * from information_schema.tokudb_locks; 72locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name 73TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main 74select * from information_schema.tokudb_lock_waits; 75requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name 76commit; 77verify that the lock on the 2nd transaction has been released, should be be empty 78select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx; 79trx_id trx_mysql_thread_id 80select * from information_schema.tokudb_locks; 81locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name 82select * from information_schema.tokudb_lock_waits; 83requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name 84drop table t; 85