Loading mysql-test/mysql-test-run.sh +3 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,7 @@ if [ x$SOURCE_DIST = x1 ] ; then INSTALL_DB="./install_test_db" MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables" NDB_TOOLS_DIR="$BASEDIR/ndb/tools" NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm" else if test -x "$BASEDIR/libexec/mysqld" then Loading @@ -566,6 +567,7 @@ else INSTALL_DB="./install_test_db --bin" MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables" NDB_TOOLS_DIR="$CLIENT_BINDIR" NDB_MGM="$CLIENT_BINDIR/ndb_mgm" if test -d "$BASEDIR/share/mysql/english" then LANGUAGE="$BASEDIR/share/mysql/english/" Loading Loading @@ -615,6 +617,7 @@ MYSQL="$MYSQL --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --u export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES export CLIENT_BINDIR TESTS_BINDIR CHARSETSDIR export NDB_TOOLS_DIR export NDB_MGM MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \ --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \ Loading mysql-test/r/ndb_autodiscover.result +10 −0 Original line number Diff line number Diff line Loading @@ -359,6 +359,16 @@ information_schema mysql test use test; drop database if exists test_only_ndb_tables; create database test_only_ndb_tables; use test_only_ndb_tables; create table t1 (a int primary key) engine=ndb; select * from t1; a select * from t1; ERROR HY000: Can't lock file (errno: 4009) use test; drop database test_only_ndb_tables; CREATE TABLE t9 ( a int NOT NULL PRIMARY KEY, b int Loading mysql-test/t/ndb_autodiscover.test +20 −0 Original line number Diff line number Diff line Loading @@ -452,6 +452,26 @@ drop database test2; show databases; use test; ######################################################### # Bug#8035 # mysqld would segfault on second select * before bug was fixed # --disable_warnings drop database if exists test_only_ndb_tables; --enable_warnings create database test_only_ndb_tables; use test_only_ndb_tables; create table t1 (a int primary key) engine=ndb; select * from t1; --exec $NDB_MGM --no-defaults -e "all restart -n" > /dev/null --exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults --not-started > /dev/null --error 1015 select * from t1; --exec $NDB_MGM --no-defaults -e "all start" > /dev/null --exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults > /dev/null use test; drop database test_only_ndb_tables; ###################################################### # Note! This should always be the last step in this # file, the table t9 will be used and dropped Loading ndb/tools/waiter.cpp +21 −6 Original line number Diff line number Diff line Loading @@ -31,11 +31,13 @@ waitClusterStatus(const char* _addr, ndb_mgm_node_status _status, unsigned int _timeout); enum ndb_waiter_options { NDB_STD_OPTS_OPTIONS NDB_STD_OPTS_OPTIONS, OPT_WAIT_STATUS_NOT_STARTED }; NDB_STD_OPTS_VARS; static int _no_contact = 0; static int _not_started = 0; static int _timeout = 120; static struct my_option my_long_options[] = { Loading @@ -43,6 +45,9 @@ static struct my_option my_long_options[] = { "no-contact", 'n', "Wait for cluster no contact", (gptr*) &_no_contact, (gptr*) &_no_contact, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "not-started", OPT_WAIT_STATUS_NOT_STARTED, "Wait for cluster not started", (gptr*) &_not_started, (gptr*) &_not_started, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "timeout", 't', "Timeout to wait", (gptr*) &_timeout, (gptr*) &_timeout, 0, GET_INT, REQUIRED_ARG, 120, 0, 0, 0, 0, 0 }, Loading Loading @@ -91,12 +96,22 @@ int main(int argc, char** argv){ if (_hostName == 0) _hostName= opt_connect_str; if (_no_contact) { if (waitClusterStatus(_hostName, NDB_MGM_NODE_STATUS_NO_CONTACT, _timeout) != 0) return NDBT_ProgramExit(NDBT_FAILED); } else if (waitClusterStatus(_hostName, NDB_MGM_NODE_STATUS_STARTED, _timeout) != 0) return NDBT_ProgramExit(NDBT_FAILED); enum ndb_mgm_node_status wait_status; if (_no_contact) { wait_status= NDB_MGM_NODE_STATUS_NO_CONTACT; } else if (_not_started) { wait_status= NDB_MGM_NODE_STATUS_NOT_STARTED; } else { wait_status= NDB_MGM_NODE_STATUS_STARTED; } if (waitClusterStatus(_hostName, wait_status, _timeout) != 0) return NDBT_ProgramExit(NDBT_FAILED); return NDBT_ProgramExit(NDBT_OK); } Loading sql/lock.cc +4 −3 Original line number Diff line number Diff line Loading @@ -182,12 +182,12 @@ static int lock_external(THD *thd, TABLE **tables, uint count) if ((error=(*tables)->file->external_lock(thd,lock_type))) { print_lock_error(error, (*tables)->file->table_type()); for (; i-- ; tables--) { (*tables)->file->external_lock(thd, F_UNLCK); (*tables)->current_lock=F_UNLCK; } print_lock_error(error, (*tables)->file->table_type()); DBUG_RETURN(error); } else Loading Loading @@ -375,12 +375,13 @@ static int unlock_external(THD *thd, TABLE **table,uint count) { (*table)->current_lock = F_UNLCK; if ((error=(*table)->file->external_lock(thd, F_UNLCK))) { error_code=error; print_lock_error(error_code, (*table)->file->table_type()); } } table++; } while (--count); if (error_code) print_lock_error(error_code, (*table)->file->table_type()); DBUG_RETURN(error_code); } Loading Loading
mysql-test/mysql-test-run.sh +3 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,7 @@ if [ x$SOURCE_DIST = x1 ] ; then INSTALL_DB="./install_test_db" MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables" NDB_TOOLS_DIR="$BASEDIR/ndb/tools" NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm" else if test -x "$BASEDIR/libexec/mysqld" then Loading @@ -566,6 +567,7 @@ else INSTALL_DB="./install_test_db --bin" MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables" NDB_TOOLS_DIR="$CLIENT_BINDIR" NDB_MGM="$CLIENT_BINDIR/ndb_mgm" if test -d "$BASEDIR/share/mysql/english" then LANGUAGE="$BASEDIR/share/mysql/english/" Loading Loading @@ -615,6 +617,7 @@ MYSQL="$MYSQL --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --u export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES export CLIENT_BINDIR TESTS_BINDIR CHARSETSDIR export NDB_TOOLS_DIR export NDB_MGM MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \ --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \ Loading
mysql-test/r/ndb_autodiscover.result +10 −0 Original line number Diff line number Diff line Loading @@ -359,6 +359,16 @@ information_schema mysql test use test; drop database if exists test_only_ndb_tables; create database test_only_ndb_tables; use test_only_ndb_tables; create table t1 (a int primary key) engine=ndb; select * from t1; a select * from t1; ERROR HY000: Can't lock file (errno: 4009) use test; drop database test_only_ndb_tables; CREATE TABLE t9 ( a int NOT NULL PRIMARY KEY, b int Loading
mysql-test/t/ndb_autodiscover.test +20 −0 Original line number Diff line number Diff line Loading @@ -452,6 +452,26 @@ drop database test2; show databases; use test; ######################################################### # Bug#8035 # mysqld would segfault on second select * before bug was fixed # --disable_warnings drop database if exists test_only_ndb_tables; --enable_warnings create database test_only_ndb_tables; use test_only_ndb_tables; create table t1 (a int primary key) engine=ndb; select * from t1; --exec $NDB_MGM --no-defaults -e "all restart -n" > /dev/null --exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults --not-started > /dev/null --error 1015 select * from t1; --exec $NDB_MGM --no-defaults -e "all start" > /dev/null --exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults > /dev/null use test; drop database test_only_ndb_tables; ###################################################### # Note! This should always be the last step in this # file, the table t9 will be used and dropped Loading
ndb/tools/waiter.cpp +21 −6 Original line number Diff line number Diff line Loading @@ -31,11 +31,13 @@ waitClusterStatus(const char* _addr, ndb_mgm_node_status _status, unsigned int _timeout); enum ndb_waiter_options { NDB_STD_OPTS_OPTIONS NDB_STD_OPTS_OPTIONS, OPT_WAIT_STATUS_NOT_STARTED }; NDB_STD_OPTS_VARS; static int _no_contact = 0; static int _not_started = 0; static int _timeout = 120; static struct my_option my_long_options[] = { Loading @@ -43,6 +45,9 @@ static struct my_option my_long_options[] = { "no-contact", 'n', "Wait for cluster no contact", (gptr*) &_no_contact, (gptr*) &_no_contact, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "not-started", OPT_WAIT_STATUS_NOT_STARTED, "Wait for cluster not started", (gptr*) &_not_started, (gptr*) &_not_started, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "timeout", 't', "Timeout to wait", (gptr*) &_timeout, (gptr*) &_timeout, 0, GET_INT, REQUIRED_ARG, 120, 0, 0, 0, 0, 0 }, Loading Loading @@ -91,12 +96,22 @@ int main(int argc, char** argv){ if (_hostName == 0) _hostName= opt_connect_str; if (_no_contact) { if (waitClusterStatus(_hostName, NDB_MGM_NODE_STATUS_NO_CONTACT, _timeout) != 0) return NDBT_ProgramExit(NDBT_FAILED); } else if (waitClusterStatus(_hostName, NDB_MGM_NODE_STATUS_STARTED, _timeout) != 0) return NDBT_ProgramExit(NDBT_FAILED); enum ndb_mgm_node_status wait_status; if (_no_contact) { wait_status= NDB_MGM_NODE_STATUS_NO_CONTACT; } else if (_not_started) { wait_status= NDB_MGM_NODE_STATUS_NOT_STARTED; } else { wait_status= NDB_MGM_NODE_STATUS_STARTED; } if (waitClusterStatus(_hostName, wait_status, _timeout) != 0) return NDBT_ProgramExit(NDBT_FAILED); return NDBT_ProgramExit(NDBT_OK); } Loading
sql/lock.cc +4 −3 Original line number Diff line number Diff line Loading @@ -182,12 +182,12 @@ static int lock_external(THD *thd, TABLE **tables, uint count) if ((error=(*tables)->file->external_lock(thd,lock_type))) { print_lock_error(error, (*tables)->file->table_type()); for (; i-- ; tables--) { (*tables)->file->external_lock(thd, F_UNLCK); (*tables)->current_lock=F_UNLCK; } print_lock_error(error, (*tables)->file->table_type()); DBUG_RETURN(error); } else Loading Loading @@ -375,12 +375,13 @@ static int unlock_external(THD *thd, TABLE **table,uint count) { (*table)->current_lock = F_UNLCK; if ((error=(*table)->file->external_lock(thd, F_UNLCK))) { error_code=error; print_lock_error(error_code, (*table)->file->table_type()); } } table++; } while (--count); if (error_code) print_lock_error(error_code, (*table)->file->table_type()); DBUG_RETURN(error_code); } Loading