Commit 8f6972dd authored by unknown's avatar unknown
Browse files

Merge bk-internal:/home/bk/mysql-5.0

into  production.mysql.com:/usersnfs/mjorgensen/bktrees/mysql-5.0-build

parents e68df7a1 e2d34902
Loading
Loading
Loading
Loading
+46 −0
Original line number Diff line number Diff line
use test;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
create table t1 (a int key, b int unique, c int) engine ndb;
ERROR HY000: Can't create table './test/t1.frm' (errno: 155)
create table t1 (a int key, b int unique, c int) engine ndb;
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0),(6,6,0),(7,7,0),(8,8,0),(9,9,0),(10,10,0);
create table t2 as select * from t1;
select * from t1 where a = 1;
a	b	c
1	1	0
select * from t1 where b = 4;
a	b	c
4	4	0
select * from t1 where a > 4 order by a;
a	b	c
5	5	0
6	6	0
7	7	0
8	8	0
9	9	0
10	10	0
update t1 set b=102 where a = 2;
update t1 set b=103 where b = 3;
update t1 set b=b+100;
update t1 set b=b+100 where a > 7;
delete from t1;
insert into t1 select * from t2;
drop table t1;
ERROR 42S02: Unknown table 't1'
create index new_index on t1 (c);
ERROR 42S02: Table 'test.t1' doesn't exist
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0),(6,6,0),(7,7,0),(8,8,0),(9,9,0),(10,10,0);
ERROR 42S02: Table 'test.t1' doesn't exist
select * from t1 where a = 1;
ERROR 42S02: Table 'test.t1' doesn't exist
select * from t1 where b = 4;
ERROR 42S02: Table 'test.t1' doesn't exist
update t1 set b=102 where a = 2;
ERROR 42S02: Table 'test.t1' doesn't exist
update t1 set b=103 where b = 3;
ERROR 42S02: Table 'test.t1' doesn't exist
update t1 set b=b+100;
ERROR 42S02: Table 'test.t1' doesn't exist
update t1 set b=b+100 where a > 7;
ERROR 42S02: Table 'test.t1' doesn't exist
drop table t1;
+84 −0
Original line number Diff line number Diff line
-- source include/have_ndb.inc
-- source include/have_multi_ndb.inc
-- source include/ndb_default_cluster.inc
-- source include/not_embedded.inc

--disable_warnings
use test;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
--enable_warnings

# operations allowed while cluster is in single user mode

--connection server1
--let $node_id= `SHOW STATUS LIKE 'Ndb_cluster_node_id'`
--disable_query_log
--eval set @node_id= SUBSTRING('$node_id', 20)+0
--enable_query_log
--let $node_id= `SELECT @node_id`
--exec $NDB_MGM --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -e "enter single user mode $node_id" >> $NDB_TOOLS_OUTPUT
--exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" --single-user >> $NDB_TOOLS_OUTPUT

# verify that we are indeed in single user mode
--connection server2
--error 1005
create table t1 (a int key, b int unique, c int) engine ndb;

# test some sql on first mysqld
--connection server1
create table t1 (a int key, b int unique, c int) engine ndb;
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0),(6,6,0),(7,7,0),(8,8,0),(9,9,0),(10,10,0);
create table t2 as select * from t1;
# read with pk
select * from t1 where a = 1;
# read with unique index
select * from t1 where b = 4;
# read with ordered index
select * from t1 where a > 4 order by a;
# update with pk
update t1 set b=102 where a = 2;
# update with unique index
update t1 set b=103 where b = 3;
# update with full table scan
update t1 set b=b+100;
# update with ordered insex scan
update t1 set b=b+100 where a > 7;
# delete with full table scan
delete from t1;
insert into t1 select * from t2;

# test some sql on other mysqld
--connection server2
--error 1051
drop table t1;
--error 1146
#--error 1296
create index new_index on t1 (c);
--error 1146
#--error 1296
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0),(6,6,0),(7,7,0),(8,8,0),(9,9,0),(10,10,0);
--error 1146
#--error 1296
select * from t1 where a = 1;
--error 1146
#--error 1296
select * from t1 where b = 4;
--error 1146
#--error 1296
update t1 set b=102 where a = 2;
--error 1146
#--error 1296
update t1 set b=103 where b = 3;
--error 1146
#--error 1296
update t1 set b=b+100;
--error 1146
#--error 1296
update t1 set b=b+100 where a > 7;

--exec $NDB_MGM --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -e "exit single user mode" >> $NDB_TOOLS_OUTPUT
--exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults >> $NDB_TOOLS_OUTPUT

# cleanup
--connection server1
drop table t1;
+21 −15
Original line number Diff line number Diff line
@@ -2910,9 +2910,7 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){
      break;
    }

    if(getNodeState().getSingleUserMode() &&
       (refToNode(signal->getSendersBlockRef()) !=
        getNodeState().getSingleUserApi()))
    if (checkSingleUserMode(signal->getSendersBlockRef()))
    {
      jam();
      parseRecord.errorCode = CreateTableRef::SingleUser;
@@ -3081,9 +3079,7 @@ Dbdict::execALTER_TABLE_REQ(Signal* signal)
    return;
  }
  
  if(getNodeState().getSingleUserMode() &&
     (refToNode(signal->getSendersBlockRef()) !=
      getNodeState().getSingleUserApi()))
  if (checkSingleUserMode(signal->getSendersBlockRef()))
  {
    jam();
    alterTableRef(signal, req, AlterTableRef::SingleUser);
@@ -5414,9 +5410,7 @@ Dbdict::execDROP_TABLE_REQ(Signal* signal){
    return;
  }
  
  if(getNodeState().getSingleUserMode() &&
     (refToNode(signal->getSendersBlockRef()) !=
      getNodeState().getSingleUserApi()))
  if (checkSingleUserMode(signal->getSendersBlockRef()))
  {
    jam();
    dropTableRef(signal, req, DropTableRef::SingleUser);
@@ -6553,9 +6547,7 @@ Dbdict::execCREATE_INDX_REQ(Signal* signal)
        jam();
        tmperr = CreateIndxRef::Busy;
      }
      else if(getNodeState().getSingleUserMode() &&
              (refToNode(senderRef) !=
               getNodeState().getSingleUserApi()))
      else if (checkSingleUserMode(senderRef))
      {
        jam();
        tmperr = CreateIndxRef::SingleUser;
@@ -7130,9 +7122,7 @@ Dbdict::execDROP_INDX_REQ(Signal* signal)
        jam();
        tmperr = DropIndxRef::Busy;
      }
      else if(getNodeState().getSingleUserMode() &&
              (refToNode(senderRef) !=
               getNodeState().getSingleUserApi()))
      else if (checkSingleUserMode(senderRef))
      {
        jam();
        tmperr = DropIndxRef::SingleUser;
@@ -10574,4 +10564,20 @@ Dbdict::getMetaAttribute(MetaData::Attribute& attr, const MetaData::Table& table
  return 0;
}

/*
  return 1 if all of the below is true
  a) node in single user mode
  b) senderRef is not a db node
  c) senderRef nodeid is not the singleUserApi
*/

int Dbdict::checkSingleUserMode(Uint32 senderRef)
{
  Uint32 nodeId = refToNode(senderRef);
  return
    getNodeState().getSingleUserMode() &&
    (getNodeInfo(nodeId).m_type != NodeInfo::DB) &&
    (nodeId != getNodeState().getSingleUserApi());
}

CArray<KeyDescriptor> g_key_descriptor_pool;
+2 −0
Original line number Diff line number Diff line
@@ -2003,6 +2003,8 @@ private:
  int getMetaTable(MetaData::Table& table, const char* tableName);
  int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, Uint32 attributeId);
  int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, const char* attributeName);

  int checkSingleUserMode(Uint32 senderRef);
};

#endif
+4 −0
Original line number Diff line number Diff line
@@ -880,6 +880,7 @@ NdbDictInterface::dictSignal(NdbApiSignal* signal,
	r = m_transporter->sendSignal(signal, aNodeId);
      }
      if(r != 0){
        m_error.code= 4007;
	m_transporter->unlock_mutex();
	continue;
      }
@@ -903,7 +904,10 @@ NdbDictInterface::dictSignal(NdbApiSignal* signal,
     * Handle error codes
     */
    if(m_waiter.m_state == WAIT_NODE_FAILURE)
    {
      m_error.code = 4013;
      continue;
    }

    if(m_waiter.m_state == WST_WAIT_TIMEOUT)
    {
Loading