Loading mysql-test/lib/mtr_process.pl +5 −6 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ sub mtr_im_check_alive ($); sub mtr_im_check_main_alive ($); sub mtr_im_check_angel_alive ($); sub mtr_im_check_mysqlds_alive ($); sub mtr_im_check_mysqld_alive ($$); sub mtr_im_check_mysqld_alive ($); sub mtr_im_cleanup ($); sub mtr_im_rm_file ($); sub mtr_im_errlog ($); Loading Loading @@ -1282,21 +1282,20 @@ sub mtr_im_check_mysqlds_alive($) { mtr_debug("Checking mysqld[$idx]..."); return 1 if mtr_im_check_mysqld_alive($instance_manager, $instances->[$idx]); if mtr_im_check_mysqld_alive($instances->[$idx]); } } ########################################################################### sub mtr_im_check_mysqld_alive($$) { my $instance_manager= shift; sub mtr_im_check_mysqld_alive($) { my $mysqld_instance= shift; # Check that the process is dead. if (defined $instance_manager->{'pid'}) if (defined $mysqld_instance->{'pid'}) { if (kill (0, $instance_manager->{'pid'})) if (kill (0, $mysqld_instance->{'pid'})) { mtr_debug("Mysqld instance (PID: $mysqld_instance->{pid}) is alive."); return 1; Loading mysql-test/r/im_daemon_life_cycle.result +14 −0 Original line number Diff line number Diff line Loading @@ -8,3 +8,17 @@ mysqld2 offline Killing the process... Sleeping... Success: the process was restarted. -------------------------------------------------------------------- -- Test for BUG#12751 -------------------------------------------------------------------- START INSTANCE mysqld2; Success: the process has been started. Killing the process... Sleeping... Success: the process was restarted. SHOW INSTANCE STATUS mysqld1; instance_name status version mysqld1 online VERSION STOP INSTANCE mysqld2; Success: the process has been stopped. mysql-test/t/im_daemon_life_cycle.imtest +44 −0 Original line number Diff line number Diff line Loading @@ -14,3 +14,47 @@ # process. --exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30 ########################################################################### # # BUG#12751: Instance Manager: client hangs # --echo --echo -------------------------------------------------------------------- --echo -- Test for BUG#12751 --echo -------------------------------------------------------------------- # Give some time to begin accepting connections after restart. # FIXME: race condition here. --sleep 3 # 1. Start mysqld; START INSTANCE mysqld2; # FIXME: START INSTANCE should be synchronous. --exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started # 2. Restart IM-main: kill it and IM-angel will restart it. --exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30 # 3. Issue some statement -- connection should be re-established. # Give some time to begin accepting connections after restart. # FIXME: race condition here. --sleep 3 --replace_column 3 VERSION SHOW INSTANCE STATUS mysqld1; # 4. Stop mysqld2, because it will not be stopped by IM, as it is nonguarded. # So, if it we do not stop it, it will be stopped by mysql-test-run.pl with # warning. STOP INSTANCE mysqld2; # FIXME: STOP INSTANCE should be synchronous. --exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped mysql-test/t/kill_n_check.sh +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ if [ -z "$pid_path" ]; then exit 0 fi if [ $expected_result = 'killed' -a ! -r "$pid_path" ]; then if [ ! -r "$pid_path" ]; then echo "Error: PID file ($pid_path) does not exist." exit 0 fi Loading server-tools/instance-manager/listener.cc +23 −19 Original line number Diff line number Diff line Loading @@ -36,6 +36,27 @@ #include "portability.h" static void set_non_blocking(int socket) { #ifndef __WIN__ int flags= fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOCK); #else u_long arg= 1; ioctlsocket(socket, FIONBIO, &arg); #endif } static void set_no_inherit(int socket) { #ifndef __WIN__ int flags= fcntl(socket, F_GETFD, 0); fcntl(socket, F_SETFD, flags | FD_CLOEXEC); #endif } /* Listener_thread - incapsulates listening functionality */ Loading Loading @@ -157,6 +178,8 @@ void Listener_thread::run() /* accept may return -1 (failure or spurious wakeup) */ if (client_fd >= 0) // connection established { set_no_inherit(client_fd); Vio *vio= vio_new(client_fd, socket_index == 0 ? VIO_TYPE_SOCKET : VIO_TYPE_TCPIP, socket_index == 0 ? 1 : 0); Loading Loading @@ -198,25 +221,6 @@ void Listener_thread::run() return; } void set_non_blocking(int socket) { #ifndef __WIN__ int flags= fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOCK); #else u_long arg= 1; ioctlsocket(socket, FIONBIO, &arg); #endif } void set_no_inherit(int socket) { #ifndef __WIN__ int flags= fcntl(socket, F_GETFD, 0); fcntl(socket, F_SETFD, flags | FD_CLOEXEC); #endif } int Listener_thread::create_tcp_socket() { /* value to be set by setsockopt */ Loading Loading
mysql-test/lib/mtr_process.pl +5 −6 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ sub mtr_im_check_alive ($); sub mtr_im_check_main_alive ($); sub mtr_im_check_angel_alive ($); sub mtr_im_check_mysqlds_alive ($); sub mtr_im_check_mysqld_alive ($$); sub mtr_im_check_mysqld_alive ($); sub mtr_im_cleanup ($); sub mtr_im_rm_file ($); sub mtr_im_errlog ($); Loading Loading @@ -1282,21 +1282,20 @@ sub mtr_im_check_mysqlds_alive($) { mtr_debug("Checking mysqld[$idx]..."); return 1 if mtr_im_check_mysqld_alive($instance_manager, $instances->[$idx]); if mtr_im_check_mysqld_alive($instances->[$idx]); } } ########################################################################### sub mtr_im_check_mysqld_alive($$) { my $instance_manager= shift; sub mtr_im_check_mysqld_alive($) { my $mysqld_instance= shift; # Check that the process is dead. if (defined $instance_manager->{'pid'}) if (defined $mysqld_instance->{'pid'}) { if (kill (0, $instance_manager->{'pid'})) if (kill (0, $mysqld_instance->{'pid'})) { mtr_debug("Mysqld instance (PID: $mysqld_instance->{pid}) is alive."); return 1; Loading
mysql-test/r/im_daemon_life_cycle.result +14 −0 Original line number Diff line number Diff line Loading @@ -8,3 +8,17 @@ mysqld2 offline Killing the process... Sleeping... Success: the process was restarted. -------------------------------------------------------------------- -- Test for BUG#12751 -------------------------------------------------------------------- START INSTANCE mysqld2; Success: the process has been started. Killing the process... Sleeping... Success: the process was restarted. SHOW INSTANCE STATUS mysqld1; instance_name status version mysqld1 online VERSION STOP INSTANCE mysqld2; Success: the process has been stopped.
mysql-test/t/im_daemon_life_cycle.imtest +44 −0 Original line number Diff line number Diff line Loading @@ -14,3 +14,47 @@ # process. --exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30 ########################################################################### # # BUG#12751: Instance Manager: client hangs # --echo --echo -------------------------------------------------------------------- --echo -- Test for BUG#12751 --echo -------------------------------------------------------------------- # Give some time to begin accepting connections after restart. # FIXME: race condition here. --sleep 3 # 1. Start mysqld; START INSTANCE mysqld2; # FIXME: START INSTANCE should be synchronous. --exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started # 2. Restart IM-main: kill it and IM-angel will restart it. --exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30 # 3. Issue some statement -- connection should be re-established. # Give some time to begin accepting connections after restart. # FIXME: race condition here. --sleep 3 --replace_column 3 VERSION SHOW INSTANCE STATUS mysqld1; # 4. Stop mysqld2, because it will not be stopped by IM, as it is nonguarded. # So, if it we do not stop it, it will be stopped by mysql-test-run.pl with # warning. STOP INSTANCE mysqld2; # FIXME: STOP INSTANCE should be synchronous. --exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped
mysql-test/t/kill_n_check.sh +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ if [ -z "$pid_path" ]; then exit 0 fi if [ $expected_result = 'killed' -a ! -r "$pid_path" ]; then if [ ! -r "$pid_path" ]; then echo "Error: PID file ($pid_path) does not exist." exit 0 fi Loading
server-tools/instance-manager/listener.cc +23 −19 Original line number Diff line number Diff line Loading @@ -36,6 +36,27 @@ #include "portability.h" static void set_non_blocking(int socket) { #ifndef __WIN__ int flags= fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOCK); #else u_long arg= 1; ioctlsocket(socket, FIONBIO, &arg); #endif } static void set_no_inherit(int socket) { #ifndef __WIN__ int flags= fcntl(socket, F_GETFD, 0); fcntl(socket, F_SETFD, flags | FD_CLOEXEC); #endif } /* Listener_thread - incapsulates listening functionality */ Loading Loading @@ -157,6 +178,8 @@ void Listener_thread::run() /* accept may return -1 (failure or spurious wakeup) */ if (client_fd >= 0) // connection established { set_no_inherit(client_fd); Vio *vio= vio_new(client_fd, socket_index == 0 ? VIO_TYPE_SOCKET : VIO_TYPE_TCPIP, socket_index == 0 ? 1 : 0); Loading Loading @@ -198,25 +221,6 @@ void Listener_thread::run() return; } void set_non_blocking(int socket) { #ifndef __WIN__ int flags= fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOCK); #else u_long arg= 1; ioctlsocket(socket, FIONBIO, &arg); #endif } void set_no_inherit(int socket) { #ifndef __WIN__ int flags= fcntl(socket, F_GETFD, 0); fcntl(socket, F_SETFD, flags | FD_CLOEXEC); #endif } int Listener_thread::create_tcp_socket() { /* value to be set by setsockopt */ Loading