From acd7132e0ada961d4b47d10f23151b4178f3e80c Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 25 Jun 2006 08:59:44 +0200 Subject: [PATCH 1/2] BUG#20677: Sporadic failure of test case 'ndb_binlog_multi'. Start test case with a dummy table create and drop. This ensures that NDB event subscription is properly set up before the real test starts, which otherwise could sometimes cause INSERT events to be lost. mysql-test/r/ndb_binlog_multi.result: Start test with dummy table create/drop to avoid a race. mysql-test/t/ndb_binlog_multi.test: Start test with dummy table create/drop to avoid a race. --- mysql-test/r/ndb_binlog_multi.result | 6 ++++-- mysql-test/t/ndb_binlog_multi.test | 11 +++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/ndb_binlog_multi.result b/mysql-test/r/ndb_binlog_multi.result index be5dc695d24..119174039f9 100644 --- a/mysql-test/r/ndb_binlog_multi.result +++ b/mysql-test/r/ndb_binlog_multi.result @@ -1,5 +1,7 @@ -drop table if exists t1,t2; -drop table if exists t1,t2; +drop table if exists t1,t2,t3; +drop table if exists t1,t2,t3; +CREATE TABLE t3 (dummy INT PRIMARY KEY) ENGINE = NDB; +DROP TABLE t3; reset master; reset master; CREATE TABLE t2 (a INT PRIMARY KEY, b int) ENGINE = NDB; diff --git a/mysql-test/t/ndb_binlog_multi.test b/mysql-test/t/ndb_binlog_multi.test index 6adacf73208..e023a54b61c 100644 --- a/mysql-test/t/ndb_binlog_multi.test +++ b/mysql-test/t/ndb_binlog_multi.test @@ -4,11 +4,18 @@ --disable_warnings connection server2; -drop table if exists t1,t2; +drop table if exists t1,t2,t3; connection server1; -drop table if exists t1,t2; +drop table if exists t1,t2,t3; --enable_warnings +# Dummy table create/drop to avoid a race where table is created +# before event subscription is set up, causing test failure (BUG#20677). +connection server2; +CREATE TABLE t3 (dummy INT PRIMARY KEY) ENGINE = NDB; +connection server1; +DROP TABLE t3; + # reset for test connection server1; reset master; From 1ef08c91676ece2c6a67babd2303af49463edbdb Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 26 Jun 2006 15:49:58 +0200 Subject: [PATCH 2/2] BUG#20676: debug warnings about too many lock waiters cause test failure. The 250 simultaneous events all accessing the same table caused the events_stress test to fail due to debug warnings about too many table waiters. Fixed by using three different tables. mysql-test/r/events_stress.result: Use three different MyISAM tables to avoid debug warnings about too many locks. mysql-test/t/events_stress.test: Use three different MyISAM tables to avoid debug warnings about too many locks. --- mysql-test/r/events_stress.result | 8 ++++++-- mysql-test/t/events_stress.test | 22 ++++++++++++++-------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/mysql-test/r/events_stress.result b/mysql-test/r/events_stress.result index ead618e8136..050fe324426 100644 --- a/mysql-test/r/events_stress.result +++ b/mysql-test/r/events_stress.result @@ -1,6 +1,8 @@ CREATE DATABASE IF NOT EXISTS events_test; CREATE DATABASE events_conn1_test2; -CREATE TABLE events_test.fill_it(test_name varchar(20), occur datetime); +CREATE TABLE events_test.fill_it1(test_name varchar(20), occur datetime); +CREATE TABLE events_test.fill_it2(test_name varchar(20), occur datetime); +CREATE TABLE events_test.fill_it3(test_name varchar(20), occur datetime); CREATE USER event_user2@localhost; CREATE DATABASE events_conn2_db; GRANT ALL ON *.* TO event_user2@localhost; @@ -57,5 +59,7 @@ SET GLOBAL event_scheduler=2; DROP DATABASE events_conn1_test4; SET GLOBAL event_scheduler=1; USE events_test; -DROP TABLE fill_it; +DROP TABLE fill_it1; +DROP TABLE fill_it2; +DROP TABLE fill_it3; DROP DATABASE events_test; diff --git a/mysql-test/t/events_stress.test b/mysql-test/t/events_stress.test index 8d0034c232e..94aa99592d3 100644 --- a/mysql-test/t/events_stress.test +++ b/mysql-test/t/events_stress.test @@ -3,7 +3,11 @@ CREATE DATABASE IF NOT EXISTS events_test; # DROP DATABASE test start (bug #16406) # CREATE DATABASE events_conn1_test2; -CREATE TABLE events_test.fill_it(test_name varchar(20), occur datetime); +# BUG#20676: MySQL in debug mode has a limit of 100 waiters +# (in mysys/thr_lock.c), so use three different tables to insert into. +CREATE TABLE events_test.fill_it1(test_name varchar(20), occur datetime); +CREATE TABLE events_test.fill_it2(test_name varchar(20), occur datetime); +CREATE TABLE events_test.fill_it3(test_name varchar(20), occur datetime); CREATE USER event_user2@localhost; CREATE DATABASE events_conn2_db; GRANT ALL ON *.* TO event_user2@localhost; @@ -16,7 +20,7 @@ connect (conn2,localhost,event_user2,,events_conn2_db); let $1= 50; while ($1) { - eval CREATE EVENT conn2_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it VALUES("conn2_ev$1", NOW()); + eval CREATE EVENT conn2_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it1 VALUES("conn2_ev$1", NOW()); dec $1; } --enable_query_log @@ -26,7 +30,7 @@ connect (conn3,localhost,event_user3,,events_conn3_db); let $1= 50; while ($1) { - eval CREATE EVENT conn3_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it VALUES("conn3_ev$1", NOW()); + eval CREATE EVENT conn3_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it1 VALUES("conn3_ev$1", NOW()); dec $1; } --enable_query_log @@ -48,7 +52,7 @@ USE events_conn1_test2; let $1= 50; while ($1) { - eval CREATE EVENT conn1_round1_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it VALUES("conn1_round1_ev$1", NOW()); + eval CREATE EVENT conn1_round1_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it2 VALUES("conn1_round1_ev$1", NOW()); dec $1; } --enable_query_log @@ -65,7 +69,7 @@ USE events_conn1_test3; let $1= 50; while ($1) { - eval CREATE EVENT conn1_round2_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it VALUES("conn1_round2_ev$1", NOW()); + eval CREATE EVENT conn1_round2_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it2 VALUES("conn1_round2_ev$1", NOW()); dec $1; } --enable_query_log @@ -77,7 +81,7 @@ USE events_conn1_test4; let $1= 50; while ($1) { - eval CREATE EVENT conn1_round3_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it VALUES("conn1_round3_ev$1", NOW()); + eval CREATE EVENT conn1_round3_ev$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it3 VALUES("conn1_round3_ev$1", NOW()); dec $1; } --enable_query_log @@ -88,7 +92,7 @@ USE events_conn1_test2; let $1= 50; while ($1) { - eval CREATE EVENT ev_round4_drop$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it VALUES("conn1_round4_ev$1", NOW()); + eval CREATE EVENT ev_round4_drop$1 ON SCHEDULE EVERY 1 SECOND DO INSERT INTO events_test.fill_it3 VALUES("conn1_round4_ev$1", NOW()); dec $1; } --enable_query_log @@ -115,7 +119,9 @@ reap; disconnect conn3; connection default; USE events_test; -DROP TABLE fill_it; +DROP TABLE fill_it1; +DROP TABLE fill_it2; +DROP TABLE fill_it3; --disable_query_log DROP USER event_user2@localhost; DROP USER event_user3@localhost;