mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
added variable NDB_MGM to be able to run the management client in tests
added testcase for Bug#8035 added option to wait for not-started Bug#8035
This commit is contained in:
parent
c449637cea
commit
ac53ecce1c
5 changed files with 58 additions and 9 deletions
|
@ -540,6 +540,7 @@ if [ x$SOURCE_DIST = x1 ] ; then
|
||||||
INSTALL_DB="./install_test_db"
|
INSTALL_DB="./install_test_db"
|
||||||
MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables"
|
MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables"
|
||||||
NDB_TOOLS_DIR="$BASEDIR/ndb/tools"
|
NDB_TOOLS_DIR="$BASEDIR/ndb/tools"
|
||||||
|
NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm"
|
||||||
else
|
else
|
||||||
if test -x "$BASEDIR/libexec/mysqld"
|
if test -x "$BASEDIR/libexec/mysqld"
|
||||||
then
|
then
|
||||||
|
@ -566,6 +567,7 @@ else
|
||||||
INSTALL_DB="./install_test_db --bin"
|
INSTALL_DB="./install_test_db --bin"
|
||||||
MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables"
|
MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables"
|
||||||
NDB_TOOLS_DIR="$CLIENT_BINDIR"
|
NDB_TOOLS_DIR="$CLIENT_BINDIR"
|
||||||
|
NDB_MGM="$CLIENT_BINDIR/ndb_mgm"
|
||||||
if test -d "$BASEDIR/share/mysql/english"
|
if test -d "$BASEDIR/share/mysql/english"
|
||||||
then
|
then
|
||||||
LANGUAGE="$BASEDIR/share/mysql/english/"
|
LANGUAGE="$BASEDIR/share/mysql/english/"
|
||||||
|
@ -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 MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
|
||||||
export CLIENT_BINDIR TESTS_BINDIR CHARSETSDIR
|
export CLIENT_BINDIR TESTS_BINDIR CHARSETSDIR
|
||||||
export NDB_TOOLS_DIR
|
export NDB_TOOLS_DIR
|
||||||
|
export NDB_MGM
|
||||||
|
|
||||||
MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \
|
MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \
|
||||||
--user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \
|
--user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \
|
||||||
|
|
|
@ -359,6 +359,16 @@ information_schema
|
||||||
mysql
|
mysql
|
||||||
test
|
test
|
||||||
use 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 (
|
CREATE TABLE t9 (
|
||||||
a int NOT NULL PRIMARY KEY,
|
a int NOT NULL PRIMARY KEY,
|
||||||
b int
|
b int
|
||||||
|
|
|
@ -452,6 +452,26 @@ drop database test2;
|
||||||
show databases;
|
show databases;
|
||||||
use test;
|
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
|
# Note! This should always be the last step in this
|
||||||
# file, the table t9 will be used and dropped
|
# file, the table t9 will be used and dropped
|
||||||
|
|
|
@ -31,11 +31,13 @@ waitClusterStatus(const char* _addr, ndb_mgm_node_status _status,
|
||||||
unsigned int _timeout);
|
unsigned int _timeout);
|
||||||
|
|
||||||
enum ndb_waiter_options {
|
enum ndb_waiter_options {
|
||||||
NDB_STD_OPTS_OPTIONS
|
NDB_STD_OPTS_OPTIONS,
|
||||||
|
OPT_WAIT_STATUS_NOT_STARTED
|
||||||
};
|
};
|
||||||
NDB_STD_OPTS_VARS;
|
NDB_STD_OPTS_VARS;
|
||||||
|
|
||||||
static int _no_contact = 0;
|
static int _no_contact = 0;
|
||||||
|
static int _not_started = 0;
|
||||||
static int _timeout = 120;
|
static int _timeout = 120;
|
||||||
static struct my_option my_long_options[] =
|
static struct my_option my_long_options[] =
|
||||||
{
|
{
|
||||||
|
@ -43,6 +45,9 @@ static struct my_option my_long_options[] =
|
||||||
{ "no-contact", 'n', "Wait for cluster no contact",
|
{ "no-contact", 'n', "Wait for cluster no contact",
|
||||||
(gptr*) &_no_contact, (gptr*) &_no_contact, 0,
|
(gptr*) &_no_contact, (gptr*) &_no_contact, 0,
|
||||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 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",
|
{ "timeout", 't', "Timeout to wait",
|
||||||
(gptr*) &_timeout, (gptr*) &_timeout, 0,
|
(gptr*) &_timeout, (gptr*) &_timeout, 0,
|
||||||
GET_INT, REQUIRED_ARG, 120, 0, 0, 0, 0, 0 },
|
GET_INT, REQUIRED_ARG, 120, 0, 0, 0, 0, 0 },
|
||||||
|
@ -91,12 +96,22 @@ int main(int argc, char** argv){
|
||||||
if (_hostName == 0)
|
if (_hostName == 0)
|
||||||
_hostName= opt_connect_str;
|
_hostName= opt_connect_str;
|
||||||
|
|
||||||
if (_no_contact) {
|
enum ndb_mgm_node_status wait_status;
|
||||||
if (waitClusterStatus(_hostName, NDB_MGM_NODE_STATUS_NO_CONTACT, _timeout) != 0)
|
if (_no_contact)
|
||||||
return NDBT_ProgramExit(NDBT_FAILED);
|
{
|
||||||
} else if (waitClusterStatus(_hostName, NDB_MGM_NODE_STATUS_STARTED, _timeout) != 0)
|
wait_status= NDB_MGM_NODE_STATUS_NO_CONTACT;
|
||||||
return NDBT_ProgramExit(NDBT_FAILED);
|
}
|
||||||
|
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);
|
return NDBT_ProgramExit(NDBT_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -182,12 +182,12 @@ static int lock_external(THD *thd, TABLE **tables, uint count)
|
||||||
|
|
||||||
if ((error=(*tables)->file->external_lock(thd,lock_type)))
|
if ((error=(*tables)->file->external_lock(thd,lock_type)))
|
||||||
{
|
{
|
||||||
|
print_lock_error(error, (*tables)->file->table_type());
|
||||||
for (; i-- ; tables--)
|
for (; i-- ; tables--)
|
||||||
{
|
{
|
||||||
(*tables)->file->external_lock(thd, F_UNLCK);
|
(*tables)->file->external_lock(thd, F_UNLCK);
|
||||||
(*tables)->current_lock=F_UNLCK;
|
(*tables)->current_lock=F_UNLCK;
|
||||||
}
|
}
|
||||||
print_lock_error(error, (*tables)->file->table_type());
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -375,12 +375,13 @@ static int unlock_external(THD *thd, TABLE **table,uint count)
|
||||||
{
|
{
|
||||||
(*table)->current_lock = F_UNLCK;
|
(*table)->current_lock = F_UNLCK;
|
||||||
if ((error=(*table)->file->external_lock(thd, F_UNLCK)))
|
if ((error=(*table)->file->external_lock(thd, F_UNLCK)))
|
||||||
|
{
|
||||||
error_code=error;
|
error_code=error;
|
||||||
|
print_lock_error(error_code, (*table)->file->table_type());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
table++;
|
table++;
|
||||||
} while (--count);
|
} while (--count);
|
||||||
if (error_code)
|
|
||||||
print_lock_error(error_code, (*table)->file->table_type());
|
|
||||||
DBUG_RETURN(error_code);
|
DBUG_RETURN(error_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue