Skip to content

Commit 3e792e6

Browse files
author
Nirbhay Choubey
committed
MDEV-4018 : Feature Request: microseconds in GET_LOCK()
Updated MDL_context's lock methods to accept double precision lock_wait_timeout.
1 parent 5298e21 commit 3e792e6

File tree

5 files changed

+75
-8
lines changed

5 files changed

+75
-8
lines changed

mysql-test/r/func_misc.result

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,6 +1169,46 @@ INET6_NTOA(ip) HEX(ip) LENGTH(ip)
11691169

11701170
DROP TABLE t1;
11711171
DROP TABLE t2;
1172+
#
1173+
# MDEV-4018 : Microseconds in GET_LOCK()
1174+
#
1175+
# -> Switching to connection 'default'
1176+
select is_used_lock('test') = connection_id();
1177+
is_used_lock('test') = connection_id()
1178+
NULL
1179+
# GET_LOCK returns 1 if it manages to acquire a lock
1180+
select get_lock('test', 0);
1181+
get_lock('test', 0)
1182+
1
1183+
# -> Switching to connection 'con1'
1184+
select is_used_lock('test') = connection_id();
1185+
is_used_lock('test') = connection_id()
1186+
0
1187+
select get_lock('test', 0);
1188+
get_lock('test', 0)
1189+
0
1190+
select get_lock('test', 1.0);
1191+
get_lock('test', 1.0)
1192+
0
1193+
select get_lock('test', 1.5);
1194+
get_lock('test', 1.5)
1195+
0
1196+
select get_lock('test', 0.1);
1197+
get_lock('test', 0.1)
1198+
0
1199+
select get_lock('test', 0.000001);
1200+
get_lock('test', 0.000001)
1201+
0
1202+
select get_lock('test', 0.0000000000000001);
1203+
get_lock('test', 0.0000000000000001)
1204+
0
1205+
# -> Switching to connection 'default'
1206+
select is_used_lock('test') = connection_id();
1207+
is_used_lock('test') = connection_id()
1208+
1
1209+
select release_lock('test');
1210+
release_lock('test')
1211+
1
11721212

11731213
# -- Done.
11741214

mysql-test/t/func_misc.test

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -863,6 +863,33 @@ SELECT INET6_NTOA(ip), HEX(ip), LENGTH(ip) FROM t2;
863863
DROP TABLE t1;
864864
DROP TABLE t2;
865865

866+
--echo #
867+
--echo # MDEV-4018 : Microseconds in GET_LOCK()
868+
--echo #
869+
870+
--echo # -> Switching to connection 'default'
871+
connection default;
872+
select is_used_lock('test') = connection_id();
873+
874+
--echo # GET_LOCK returns 1 if it manages to acquire a lock
875+
select get_lock('test', 0);
876+
877+
connect (con1,localhost,root,,);
878+
--echo # -> Switching to connection 'con1'
879+
connection con1;
880+
select is_used_lock('test') = connection_id();
881+
select get_lock('test', 0);
882+
select get_lock('test', 1.0);
883+
select get_lock('test', 1.5);
884+
select get_lock('test', 0.1);
885+
select get_lock('test', 0.000001);
886+
select get_lock('test', 0.0000000000000001);
887+
888+
--echo # -> Switching to connection 'default'
889+
connection default;
890+
select is_used_lock('test') = connection_id();
891+
select release_lock('test');
892+
866893
--echo
867894
--echo # -- Done.
868895
--echo

sql/item_func.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4257,7 +4257,7 @@ longlong Item_func_get_lock::val_int()
42574257
{
42584258
DBUG_ASSERT(fixed == 1);
42594259
String *res= args[0]->val_str(&value);
4260-
ulonglong timeout= args[1]->val_int();
4260+
double timeout= args[1]->val_real();
42614261
THD *thd= current_thd;
42624262
User_level_lock *ull;
42634263
DBUG_ENTER("Item_func_get_lock::val_int");

sql/mdl.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2388,7 +2388,7 @@ void MDL_scoped_lock::notify_conflicting_locks(MDL_context *ctx)
23882388
*/
23892389

23902390
bool
2391-
MDL_context::acquire_lock(MDL_request *mdl_request, ulong lock_wait_timeout)
2391+
MDL_context::acquire_lock(MDL_request *mdl_request, double lock_wait_timeout)
23922392
{
23932393
MDL_lock *lock;
23942394
MDL_ticket *ticket;
@@ -2550,7 +2550,7 @@ extern "C" int mdl_request_ptr_cmp(const void* ptr1, const void* ptr2)
25502550
*/
25512551

25522552
bool MDL_context::acquire_locks(MDL_request_list *mdl_requests,
2553-
ulong lock_wait_timeout)
2553+
double lock_wait_timeout)
25542554
{
25552555
MDL_request_list::Iterator it(*mdl_requests);
25562556
MDL_request **sort_buf, **p_req;
@@ -2623,13 +2623,13 @@ bool MDL_context::acquire_locks(MDL_request_list *mdl_requests,
26232623
bool
26242624
MDL_context::upgrade_shared_lock(MDL_ticket *mdl_ticket,
26252625
enum_mdl_type new_type,
2626-
ulong lock_wait_timeout)
2626+
double lock_wait_timeout)
26272627
{
26282628
MDL_request mdl_xlock_request;
26292629
MDL_savepoint mdl_svp= mdl_savepoint();
26302630
bool is_new_ticket;
26312631
DBUG_ENTER("MDL_context::upgrade_shared_lock");
2632-
DBUG_PRINT("enter",("new_type: %d lock_wait_timeout: %lu", new_type,
2632+
DBUG_PRINT("enter",("new_type: %d lock_wait_timeout: %f", new_type,
26332633
lock_wait_timeout));
26342634
DEBUG_SYNC(get_thd(), "mdl_upgrade_lock");
26352635

sql/mdl.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -752,11 +752,11 @@ class MDL_context
752752
void destroy();
753753

754754
bool try_acquire_lock(MDL_request *mdl_request);
755-
bool acquire_lock(MDL_request *mdl_request, ulong lock_wait_timeout);
756-
bool acquire_locks(MDL_request_list *requests, ulong lock_wait_timeout);
755+
bool acquire_lock(MDL_request *mdl_request, double lock_wait_timeout);
756+
bool acquire_locks(MDL_request_list *requests, double lock_wait_timeout);
757757
bool upgrade_shared_lock(MDL_ticket *mdl_ticket,
758758
enum_mdl_type new_type,
759-
ulong lock_wait_timeout);
759+
double lock_wait_timeout);
760760

761761
bool clone_ticket(MDL_request *mdl_request);
762762

0 commit comments

Comments
 (0)