403Webshell
Server IP : 104.21.38.3  /  Your IP : 172.68.164.42
Web Server : Apache
System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64
User : www ( 1000)
PHP Version : 7.4.33
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /www/server/mysql/src/mysql-test/suite/federated/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/server/mysql/src/mysql-test/suite/federated/federated_get_table_share.test
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source suite/federated/include/federated.inc
--enable_connect_log

--echo ###########################################################
--echo #
--echo # Test cases for wl#7593: Don't hold LOCK_open...
--echo #
--echo # Most of the tests related to this wl are in a different
--echo # test file main.get_table_share.test. One scenario is relevant
--echo # for the federated storage engine, which is why it is put into
--echo # this file.
--echo #
--echo # This test case is based on two threads: One thread master
--echo # opening table tb, being paused while opening the share,
--echo # while another thread issues a ALTER and DROP SERVER commands
--echo # to make sure the tables related to the dropped server are
--echo # being closed.
--echo #
--echo # Please note that the include files federated.inc and
--echo # federated_cleanup.inc creates an cleans up various resources
--echo # related to the federated engine (connections, schemas, etc).
--echo #

--echo #
--connection slave
--echo # 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);

--echo #
--connection master
--echo # Create one server and two local, federated tables on the master:
--replace_result $SLAVE_MYPORT SLAVE_PORT
eval CREATE SERVER s FOREIGN DATA WRAPPER 'mysql' OPTIONS
  (USER 'root', HOST '127.0.0.1', PORT $SLAVE_MYPORT, 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';

--echo #
--echo # Check that the server is created, and do an insert into ta to make
--echo # sure it is open and in the cache, then show open federated tables:
--replace_result $SLAVE_MYPORT SLAVE_PORT
SELECT * from mysql.servers;
INSERT INTO federated.ta VALUES(0);
SELECT * from federated.ta;
SHOW OPEN TABLES IN federated;

--echo #
--echo # Wait after releasing LOCK_open for tb, and make sure we never
--echo # 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';
--send INSERT INTO federated.tb VALUES(1)

--echo #
--connection default
--echo # Wait for open_master, then issue an ALTER SERVER command, which will
--echo # close the tables for the server being altered. The table ta is open,
--echo # and will be closed, while tb is in the process of being opened, and
--echo # will therefore be skipped (i.e. not closed):
SET DEBUG_SYNC= 'now WAIT_FOR open_master';
ALTER SERVER s OPTIONS (DATABASE 'new_federated');

--echo #
--echo # Then, we show open federated tables to verify that neither tb nor
--echo # ta are open, then we let the master open the tb share and insert,
--echo # then we reap the master to be sure it is done with the insert:
SHOW OPEN TABLES IN federated;
SET DEBUG_SYNC= 'now SIGNAL cont_master';
--connection master
--reap

--echo #
--connection default
--echo # Now, tb should be open:
SHOW OPEN TABLES IN federated;

--echo #
--echo # A select from tb will show the inserted data since the
--echo # actual server information from after the ALTER SERVER is used
--echo # to open the table:
SELECT * from federated.tb;

--echo #
--echo # A select from ta will now be empty since we switched
--echo # remote table:
SELECT * from federated.ta;

--echo #
--echo # Now, both ta and tb should be open:
--sorted_result
SHOW OPEN TABLES IN federated;

--echo #
--connection master
--echo # Back to the master, we flush table tb and do a new insert,
--echo # pausing before opening the share, just like we did above:
FLUSH TABLE federated.tb;
SHOW OPEN TABLES IN federated;
SET DEBUG_SYNC= 'get_share_before_open SIGNAL open_master WAIT_FOR cont_master';
SET DEBUG_SYNC= 'get_share_found_share HIT_LIMIT 1';
--send INSERT INTO federated.tb VALUES(2)

--echo #
--connection default
--echo # Wait for open_master, then issue a DROP SERVER command:
SET DEBUG_SYNC= 'now WAIT_FOR open_master';
DROP SERVER s;

--echo #
--echo # Let the master finish opening the tb share, and then reap it, which
--echo # will fail since the server has been deleted:
SET DEBUG_SYNC= 'now SIGNAL cont_master';
--connection master
--error ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE
--reap
# Not resetting DEBUG_SYNC for "master" was resulting in failure of subsequent
# statement execution.
# Reason is, when table_open_cache_instances <> 1 then tables accessed including
# mysql.* may not exists in the table open cache instance of "master". So while
# opening those tables DEBUG_SYNC='get_share_found_share HIT_LIMIT 1' was hit
# more than once and subsequent statements execution was failing. 
# This worked well with table_open_cache_instances=1 as tables opened by other
# connections also exists in the single cache.
SET DEBUG_SYNC= 'RESET';

--echo #
--connection default
--echo # Then, we show open tables to verify that tb is left opened,
--echo # while ta is not open anymore:
SHOW OPEN TABLES IN federated;

--echo #
--connection slave
--echo # Drop remote tables and database:
DROP TABLE federated.ta, federated.tb;
DROP TABLE new_federated.ta, new_federated.tb;
DROP DATABASE new_federated;

--echo #
--connection default
--echo # Reset DEBUG_SYNC and drop local tables:
SET DEBUG_SYNC= 'RESET';
DROP TABLE federated.ta, federated.tb;

--echo #
--echo # Disconnecting slave and master is handled in federated_cleanup.inc
--disable_connect_log
--source suite/federated/include/federated_cleanup.inc

Youez - 2016 - github.com/yon3zu
LinuXploit