summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/rpl/t/rpl_get_lock.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/rpl/t/rpl_get_lock.test')
-rw-r--r--mysql-test/suite/rpl/t/rpl_get_lock.test47
1 files changed, 47 insertions, 0 deletions
diff --git a/mysql-test/suite/rpl/t/rpl_get_lock.test b/mysql-test/suite/rpl/t/rpl_get_lock.test
new file mode 100644
index 00000000..b5c08858
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_get_lock.test
@@ -0,0 +1,47 @@
+source include/master-slave.inc;
+
+CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
+
+create table t1(n int);
+# Use of get_lock gives a warning for unsafeness if binlog_format=statement
+--disable_warnings
+insert into t1 values(get_lock("lock",2));
+--enable_warnings
+dirty_close master;
+connection master1;
+select get_lock("lock",2);
+
+select release_lock("lock");
+#ignore
+disable_query_log;
+let $1=2000;
+while ($1)
+{
+ do get_lock("lock",2);
+ do release_lock("lock");
+ dec $1;
+}
+enable_query_log;
+sync_slave_with_master;
+select get_lock("lock",3);
+select * from t1;
+# There is no point in testing REPLICATIION of the IS_*_LOCK
+# functions; slave does not run with the same concurrency context as
+# master (generally in slave we can't know that on master this lock
+# was already held by another connection and so that the the
+# get_lock() we're replicating timed out on master hence returned 0,
+# or that the is_free_lock() we're playing returned 0 etc.
+# But here all we do is test these functions outside of replication.
+select is_free_lock("lock"), is_used_lock("lock") = connection_id();
+explain extended select is_free_lock("lock"), is_used_lock("lock");
+# Check lock functions
+select is_free_lock("lock2");
+select is_free_lock(NULL);
+connection master1;
+drop table t1;
+sync_slave_with_master;
+
+
+--source include/rpl_end.inc
+
+# End of 4.1 tests