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