Current Path : /home/usr.opt/mysql57/mysql-test/suite/federated/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //home/usr.opt/mysql57/mysql-test/suite/federated/federated_get_table_share.result |
CREATE DATABASE federated; CREATE DATABASE federated; ########################################################### # # Test cases for wl#7593: Don't hold LOCK_open... # # Most of the tests related to this wl are in a different # test file main.get_table_share.test. One scenario is relevant # for the federated storage engine, which is why it is put into # this file. # # This test case is based on two threads: One thread master # opening table tb, being paused while opening the share, # while another thread issues a ALTER and DROP SERVER commands # to make sure the tables related to the dropped server are # being closed. # # Please note that the include files federated.inc and # federated_cleanup.inc creates an cleans up various resources # related to the federated engine (connections, schemas, etc). # # connection slave; # Create a database and the tables on the slave: CREATE DATABASE new_federated; CREATE TABLE federated.ta (pk integer primary key); CREATE TABLE federated.tb (pk integer primary key); CREATE TABLE new_federated.ta (pk integer primary key); CREATE TABLE new_federated.tb (pk integer primary key); # connection master; # Create one server and two local, federated tables on the master: CREATE SERVER s FOREIGN DATA WRAPPER 'mysql' OPTIONS (USER 'root', HOST '127.0.0.1', PORT SLAVE_PORT, DATABASE 'federated'); CREATE TABLE federated.ta (pk integer primary key) ENGINE= FEDERATED CONNECTION= 's'; CREATE TABLE federated.tb (pk integer primary key) ENGINE= FEDERATED CONNECTION= 's'; # # Check that the server is created, and do an insert into ta to make # sure it is open and in the cache, then show open federated tables: SELECT * from mysql.servers; Server_name Host Db Username Password Port Socket Wrapper Owner s 127.0.0.1 federated root SLAVE_PORT mysql INSERT INTO federated.ta VALUES(0); SELECT * from federated.ta; pk 0 SHOW OPEN TABLES IN federated; Database Table In_use Name_locked federated ta 0 0 # # Wait after releasing LOCK_open for tb, and make sure we never # end up at the 'found_share' sync point: SET DEBUG_SYNC= 'get_share_before_open SIGNAL open_master WAIT_FOR cont_master'; SET DEBUG_SYNC= 'get_share_found_share HIT_LIMIT 1'; INSERT INTO federated.tb VALUES(1); # connection default; # Wait for open_master, then issue an ALTER SERVER command, which will # close the tables for the server being altered. The table ta is open, # and will be closed, while tb is in the process of being opened, and # will therefore be skipped (i.e. not closed): SET DEBUG_SYNC= 'now WAIT_FOR open_master'; ALTER SERVER s OPTIONS (DATABASE 'new_federated'); # # Then, we show open federated tables to verify that neither tb nor # ta are open, then we let the master open the tb share and insert, # then we reap the master to be sure it is done with the insert: SHOW OPEN TABLES IN federated; Database Table In_use Name_locked SET DEBUG_SYNC= 'now SIGNAL cont_master'; connection master; # connection default; # Now, tb should be open: SHOW OPEN TABLES IN federated; Database Table In_use Name_locked federated tb 0 0 # # A select from tb will show the inserted data since the # actual server information from after the ALTER SERVER is used # to open the table: SELECT * from federated.tb; pk 1 # # A select from ta will now be empty since we switched # remote table: SELECT * from federated.ta; pk # # Now, both ta and tb should be open: SHOW OPEN TABLES IN federated; Database Table In_use Name_locked federated ta 0 0 federated tb 0 0 # connection master; # Back to the master, we flush table tb and do a new insert, # pausing before opening the share, just like we did above: FLUSH TABLE federated.tb; SHOW OPEN TABLES IN federated; Database Table In_use Name_locked federated ta 0 0 SET DEBUG_SYNC= 'get_share_before_open SIGNAL open_master WAIT_FOR cont_master'; SET DEBUG_SYNC= 'get_share_found_share HIT_LIMIT 1'; INSERT INTO federated.tb VALUES(2); # connection default; # Wait for open_master, then issue a DROP SERVER command: SET DEBUG_SYNC= 'now WAIT_FOR open_master'; DROP SERVER s; # # Let the master finish opening the tb share, and then reap it, which # will fail since the server has been deleted: SET DEBUG_SYNC= 'now SIGNAL cont_master'; connection master; ERROR HY000: server name: 's' doesn't exist! SET DEBUG_SYNC= 'RESET'; # connection default; # Then, we show open tables to verify that tb is left opened, # while ta is not open anymore: SHOW OPEN TABLES IN federated; Database Table In_use Name_locked federated tb 0 0 # connection slave; # Drop remote tables and database: DROP TABLE federated.ta, federated.tb; DROP TABLE new_federated.ta, new_federated.tb; DROP DATABASE new_federated; # connection default; # Reset DEBUG_SYNC and drop local tables: SET DEBUG_SYNC= 'RESET'; DROP TABLE federated.ta, federated.tb; # # Disconnecting slave and master is handled in federated_cleanup.inc DROP TABLE IF EXISTS federated.t1; DROP DATABASE federated; DROP TABLE IF EXISTS federated.t1; DROP DATABASE federated;