Merge bk-internal:/home/bk/mysql-5.1-new-ndb

into  mysql.com:/data0/mysqldev/users/tomas/mysql-5.1-new-maint
parents 55aea401 8370b2c5
...@@ -212,7 +212,8 @@ public: ...@@ -212,7 +212,8 @@ public:
NullablePrimaryKey = 740, NullablePrimaryKey = 740,
UnsupportedChange = 741, UnsupportedChange = 741,
BackupInProgress = 762, BackupInProgress = 762,
IncompatibleVersions = 763 IncompatibleVersions = 763,
SingleUser = 299
}; };
private: private:
......
...@@ -208,6 +208,7 @@ public: ...@@ -208,6 +208,7 @@ public:
AllocationError = 4252, AllocationError = 4252,
CreateIndexTableFailed = 4253, CreateIndexTableFailed = 4253,
DuplicateAttributes = 4258, DuplicateAttributes = 4258,
SingleUser = 299,
TableIsTemporary = 776, TableIsTemporary = 776,
TableIsNotTemporary = 777, TableIsNotTemporary = 777,
NoLoggingTemporaryIndex = 778 NoLoggingTemporaryIndex = 778
......
...@@ -92,6 +92,7 @@ public: ...@@ -92,6 +92,7 @@ public:
InvalidPrimaryKeySize = 739, InvalidPrimaryKeySize = 739,
NullablePrimaryKey = 740, NullablePrimaryKey = 740,
InvalidCharset = 743, InvalidCharset = 743,
SingleUser = 299,
InvalidTablespace = 755, InvalidTablespace = 755,
VarsizeBitfieldNotSupported = 757, VarsizeBitfieldNotSupported = 757,
NotATablespace = 758, NotATablespace = 758,
......
...@@ -172,7 +172,8 @@ public: ...@@ -172,7 +172,8 @@ public:
IndexNotFound = 4243, IndexNotFound = 4243,
BadRequestType = 4247, BadRequestType = 4247,
InvalidName = 4248, InvalidName = 4248,
NotAnIndex = 4254 NotAnIndex = 4254,
SingleUser = 299
}; };
STATIC_CONST( SignalLength = DropIndxConf::SignalLength + 3 ); STATIC_CONST( SignalLength = DropIndxConf::SignalLength + 3 );
......
...@@ -58,7 +58,8 @@ public: ...@@ -58,7 +58,8 @@ public:
InvalidTableVersion = 241, InvalidTableVersion = 241,
DropInProgress = 283, DropInProgress = 283,
NoDropTableRecordAvailable = 1229, NoDropTableRecordAvailable = 1229,
BackupInProgress = 761 BackupInProgress = 761,
SingleUser = 299
}; };
}; };
......
...@@ -96,6 +96,8 @@ printPACKED_SIGNAL(FILE * output, const Uint32 * theData, Uint32 len, Uint16 rec ...@@ -96,6 +96,8 @@ printPACKED_SIGNAL(FILE * output, const Uint32 * theData, Uint32 len, Uint16 rec
} }
default: default:
fprintf(output, "Unknown signal type\n"); fprintf(output, "Unknown signal type\n");
i = len; // terminate printing
break;
} }
}//for }//for
fprintf(output, "--------- End Packed Signals ----------\n"); fprintf(output, "--------- End Packed Signals ----------\n");
......
...@@ -3758,6 +3758,15 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ ...@@ -3758,6 +3758,15 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){
break; break;
} }
if(getNodeState().getSingleUserMode() &&
(refToNode(signal->getSendersBlockRef()) !=
getNodeState().getSingleUserApi()))
{
jam();
parseRecord.errorCode = CreateTableRef::SingleUser;
break;
}
CreateTableRecordPtr createTabPtr; CreateTableRecordPtr createTabPtr;
c_opCreateTable.seize(createTabPtr); c_opCreateTable.seize(createTabPtr);
...@@ -3950,6 +3959,15 @@ Dbdict::execALTER_TABLE_REQ(Signal* signal) ...@@ -3950,6 +3959,15 @@ Dbdict::execALTER_TABLE_REQ(Signal* signal)
return; return;
} }
if(getNodeState().getSingleUserMode() &&
(refToNode(signal->getSendersBlockRef()) !=
getNodeState().getSingleUserApi()))
{
jam();
alterTableRef(signal, req, AlterTableRef::SingleUser);
return;
}
const TableRecord::TabState tabState = tablePtr.p->tabState; const TableRecord::TabState tabState = tablePtr.p->tabState;
bool ok = false; bool ok = false;
switch(tabState){ switch(tabState){
...@@ -6542,6 +6560,15 @@ Dbdict::execDROP_TABLE_REQ(Signal* signal){ ...@@ -6542,6 +6560,15 @@ Dbdict::execDROP_TABLE_REQ(Signal* signal){
return; return;
} }
if(getNodeState().getSingleUserMode() &&
(refToNode(signal->getSendersBlockRef()) !=
getNodeState().getSingleUserApi()))
{
jam();
dropTableRef(signal, req, DropTableRef::SingleUser);
return;
}
const TableRecord::TabState tabState = tablePtr.p->tabState; const TableRecord::TabState tabState = tablePtr.p->tabState;
bool ok = false; bool ok = false;
switch(tabState){ switch(tabState){
...@@ -7749,6 +7776,13 @@ Dbdict::execCREATE_INDX_REQ(Signal* signal) ...@@ -7749,6 +7776,13 @@ Dbdict::execCREATE_INDX_REQ(Signal* signal)
jam(); jam();
tmperr = CreateIndxRef::Busy; tmperr = CreateIndxRef::Busy;
} }
else if(getNodeState().getSingleUserMode() &&
(refToNode(senderRef) !=
getNodeState().getSingleUserApi()))
{
jam();
tmperr = CreateIndxRef::SingleUser;
}
if (tmperr != CreateIndxRef::NoError) { if (tmperr != CreateIndxRef::NoError) {
releaseSections(signal); releaseSections(signal);
OpCreateIndex opBusy; OpCreateIndex opBusy;
...@@ -8392,6 +8426,13 @@ Dbdict::execDROP_INDX_REQ(Signal* signal) ...@@ -8392,6 +8426,13 @@ Dbdict::execDROP_INDX_REQ(Signal* signal)
jam(); jam();
tmperr = DropIndxRef::Busy; tmperr = DropIndxRef::Busy;
} }
else if(getNodeState().getSingleUserMode() &&
(refToNode(senderRef) !=
getNodeState().getSingleUserApi()))
{
jam();
tmperr = DropIndxRef::SingleUser;
}
if (tmperr != DropIndxRef::NoError) { if (tmperr != DropIndxRef::NoError) {
err = tmperr; err = tmperr;
goto error; goto error;
......
...@@ -2098,8 +2098,11 @@ void Dbdih::gcpBlockedLab(Signal* signal) ...@@ -2098,8 +2098,11 @@ void Dbdih::gcpBlockedLab(Signal* signal)
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
Uint32 startVersion = getNodeInfo(c_nodeStartMaster.startNode).m_version; Uint32 startVersion = getNodeInfo(c_nodeStartMaster.startNode).m_version;
if ((getMajor(startVersion) == 4 && startVersion >= NDBD_INCL_NODECONF_VERSION_4) || if ((getMajor(startVersion) == 4 &&
(getMajor(startVersion) == 5 && startVersion >= NDBD_INCL_NODECONF_VERSION_5)) startVersion >= NDBD_INCL_NODECONF_VERSION_4) ||
(getMajor(startVersion) == 5 &&
startVersion >= NDBD_INCL_NODECONF_VERSION_5) ||
(getMajor(startVersion) > 5))
{ {
c_INCL_NODEREQ_Counter.setWaitingFor(c_nodeStartMaster.startNode); c_INCL_NODEREQ_Counter.setWaitingFor(c_nodeStartMaster.startNode);
} }
...@@ -2342,8 +2345,11 @@ void Dbdih::execINCL_NODEREQ(Signal* signal) ...@@ -2342,8 +2345,11 @@ void Dbdih::execINCL_NODEREQ(Signal* signal)
CRASH_INSERTION(7171); CRASH_INSERTION(7171);
Uint32 masterVersion = getNodeInfo(refToNode(cmasterdihref)).m_version; Uint32 masterVersion = getNodeInfo(refToNode(cmasterdihref)).m_version;
if ((NDB_VERSION_MAJOR == 4 && masterVersion >= NDBD_INCL_NODECONF_VERSION_4) || if ((NDB_VERSION_MAJOR == 4 &&
(NDB_VERSION_MAJOR == 5 && masterVersion >= NDBD_INCL_NODECONF_VERSION_5)) masterVersion >= NDBD_INCL_NODECONF_VERSION_4) ||
(NDB_VERSION_MAJOR == 5 &&
masterVersion >= NDBD_INCL_NODECONF_VERSION_5) ||
(NDB_VERSION_MAJOR > 5))
{ {
signal->theData[0] = getOwnNodeId(); signal->theData[0] = getOwnNodeId();
signal->theData[1] = getOwnNodeId(); signal->theData[1] = getOwnNodeId();
...@@ -14230,7 +14236,7 @@ Dbdih::execDUMP_STATE_ORD(Signal* signal) ...@@ -14230,7 +14236,7 @@ Dbdih::execDUMP_STATE_ORD(Signal* signal)
} }
if(arg == DumpStateOrd::EnableUndoDelayDataWrite){ if(arg == DumpStateOrd::EnableUndoDelayDataWrite){
g_eventLogger.info("Dbdih:: delay write of datapages for table = %s", g_eventLogger.info("Dbdih:: delay write of datapages for table = %d",
dumpState->args[1]); dumpState->args[1]);
// Send this dump to ACC and TUP // Send this dump to ACC and TUP
EXECUTE_DIRECT(DBACC, GSN_DUMP_STATE_ORD, signal, 2); EXECUTE_DIRECT(DBACC, GSN_DUMP_STATE_ORD, signal, 2);
......
...@@ -283,6 +283,7 @@ ErrorBundle ErrorCodes[] = { ...@@ -283,6 +283,7 @@ ErrorBundle ErrorCodes[] = {
/** /**
* Application error * Application error
*/ */
{ 299, DMEC, AE, "Operation not allowed or aborted due to single user mode" },
{ 763, DMEC, AE, "Alter table requires cluster nodes to have exact same version" }, { 763, DMEC, AE, "Alter table requires cluster nodes to have exact same version" },
{ 823, DMEC, AE, "Too much attrinfo from application in tuple manager" }, { 823, DMEC, AE, "Too much attrinfo from application in tuple manager" },
{ 831, DMEC, AE, "Too many nullable/bitfields in table definition" }, { 831, DMEC, AE, "Too many nullable/bitfields in table definition" },
......
...@@ -669,6 +669,8 @@ err: ...@@ -669,6 +669,8 @@ err:
bool bool
BackupRestore::createSystable(const TableS & tables){ BackupRestore::createSystable(const TableS & tables){
if (!m_restore && !m_restore_meta && !m_restore_epoch)
return true;
const char *tablename = tables.getTableName(); const char *tablename = tables.getTableName();
if( strcmp(tablename, NDB_REP_DB "/def/" NDB_APPLY_TABLE) != 0 && if( strcmp(tablename, NDB_REP_DB "/def/" NDB_APPLY_TABLE) != 0 &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment