mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
Merge poseidon.mysql.com:/home/tomas/mysql-5.0
into poseidon.mysql.com:/home/tomas/mysql-5.0-ndb
This commit is contained in:
commit
65a0ee5f8c
12 changed files with 91 additions and 30 deletions
|
@ -130,7 +130,8 @@ public:
|
|||
NullablePrimaryKey = 740,
|
||||
UnsupportedChange = 741,
|
||||
BackupInProgress = 762,
|
||||
IncompatibleVersions = 763
|
||||
IncompatibleVersions = 763,
|
||||
SingleUser = 299
|
||||
};
|
||||
|
||||
private:
|
||||
|
|
|
@ -206,7 +206,8 @@ public:
|
|||
NotUnique = 4251,
|
||||
AllocationError = 4252,
|
||||
CreateIndexTableFailed = 4253,
|
||||
DuplicateAttributes = 4258
|
||||
DuplicateAttributes = 4258,
|
||||
SingleUser = 299
|
||||
};
|
||||
|
||||
CreateIndxConf m_conf;
|
||||
|
|
|
@ -91,7 +91,8 @@ public:
|
|||
RecordTooBig = 738,
|
||||
InvalidPrimaryKeySize = 739,
|
||||
NullablePrimaryKey = 740,
|
||||
InvalidCharset = 743
|
||||
InvalidCharset = 743,
|
||||
SingleUser = 299
|
||||
};
|
||||
|
||||
private:
|
||||
|
|
|
@ -172,7 +172,8 @@ public:
|
|||
IndexNotFound = 4243,
|
||||
BadRequestType = 4247,
|
||||
InvalidName = 4248,
|
||||
NotAnIndex = 4254
|
||||
NotAnIndex = 4254,
|
||||
SingleUser = 299
|
||||
};
|
||||
STATIC_CONST( SignalLength = DropIndxConf::SignalLength + 3 );
|
||||
|
||||
|
|
|
@ -58,7 +58,8 @@ public:
|
|||
InvalidTableVersion = 241,
|
||||
DropInProgress = 283,
|
||||
NoDropTableRecordAvailable = 1229,
|
||||
BackupInProgress = 761
|
||||
BackupInProgress = 761,
|
||||
SingleUser = 299
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -926,7 +926,7 @@ const EventLoggerBase::EventRepLogLevelMatrix EventLoggerBase::matrix[] = {
|
|||
ROW(NDBStopCompleted, LogLevel::llStartUp, 1, Logger::LL_INFO ),
|
||||
ROW(NDBStopForced, LogLevel::llStartUp, 1, Logger::LL_ALERT ),
|
||||
ROW(NDBStopAborted, LogLevel::llStartUp, 1, Logger::LL_INFO ),
|
||||
ROW(StartREDOLog, LogLevel::llStartUp, 10, Logger::LL_INFO ),
|
||||
ROW(StartREDOLog, LogLevel::llStartUp, 4, Logger::LL_INFO ),
|
||||
ROW(StartLog, LogLevel::llStartUp, 10, Logger::LL_INFO ),
|
||||
ROW(UNDORecordsExecuted, LogLevel::llStartUp, 15, Logger::LL_INFO ),
|
||||
ROW(StartReport, LogLevel::llStartUp, 4, Logger::LL_INFO ),
|
||||
|
|
|
@ -96,6 +96,8 @@ printPACKED_SIGNAL(FILE * output, const Uint32 * theData, Uint32 len, Uint16 rec
|
|||
}
|
||||
default:
|
||||
fprintf(output, "Unknown signal type\n");
|
||||
i = len; // terminate printing
|
||||
break;
|
||||
}
|
||||
}//for
|
||||
fprintf(output, "--------- End Packed Signals ----------\n");
|
||||
|
|
|
@ -2910,6 +2910,15 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){
|
|||
break;
|
||||
}
|
||||
|
||||
if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(signal->getSendersBlockRef()) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
{
|
||||
jam();
|
||||
parseRecord.errorCode = CreateTableRef::SingleUser;
|
||||
break;
|
||||
}
|
||||
|
||||
CreateTableRecordPtr createTabPtr;
|
||||
c_opCreateTable.seize(createTabPtr);
|
||||
|
||||
|
@ -3072,6 +3081,15 @@ Dbdict::execALTER_TABLE_REQ(Signal* signal)
|
|||
return;
|
||||
}
|
||||
|
||||
if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(signal->getSendersBlockRef()) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
{
|
||||
jam();
|
||||
alterTableRef(signal, req, AlterTableRef::SingleUser);
|
||||
return;
|
||||
}
|
||||
|
||||
const TableRecord::TabState tabState = tablePtr.p->tabState;
|
||||
bool ok = false;
|
||||
switch(tabState){
|
||||
|
@ -5396,6 +5414,15 @@ Dbdict::execDROP_TABLE_REQ(Signal* signal){
|
|||
return;
|
||||
}
|
||||
|
||||
if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(signal->getSendersBlockRef()) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
{
|
||||
jam();
|
||||
dropTableRef(signal, req, DropTableRef::SingleUser);
|
||||
return;
|
||||
}
|
||||
|
||||
const TableRecord::TabState tabState = tablePtr.p->tabState;
|
||||
bool ok = false;
|
||||
switch(tabState){
|
||||
|
@ -6526,6 +6553,13 @@ Dbdict::execCREATE_INDX_REQ(Signal* signal)
|
|||
jam();
|
||||
tmperr = CreateIndxRef::Busy;
|
||||
}
|
||||
else if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(senderRef) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
{
|
||||
jam();
|
||||
tmperr = CreateIndxRef::SingleUser;
|
||||
}
|
||||
if (tmperr != CreateIndxRef::NoError) {
|
||||
releaseSections(signal);
|
||||
OpCreateIndex opBusy;
|
||||
|
@ -7096,6 +7130,13 @@ Dbdict::execDROP_INDX_REQ(Signal* signal)
|
|||
jam();
|
||||
tmperr = DropIndxRef::Busy;
|
||||
}
|
||||
else if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(senderRef) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
{
|
||||
jam();
|
||||
tmperr = DropIndxRef::SingleUser;
|
||||
}
|
||||
if (tmperr != DropIndxRef::NoError) {
|
||||
err = tmperr;
|
||||
goto error;
|
||||
|
|
|
@ -456,6 +456,7 @@ void Dblqh::execCONTINUEB(Signal* signal)
|
|||
else
|
||||
{
|
||||
jam();
|
||||
cstartRecReq = 2;
|
||||
StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend();
|
||||
conf->startingNodeId = getOwnNodeId();
|
||||
sendSignal(cmasterDihBlockref, GSN_START_RECCONF, signal,
|
||||
|
@ -11665,7 +11666,7 @@ void Dblqh::execGCP_SAVEREQ(Signal* signal)
|
|||
return;
|
||||
}
|
||||
|
||||
if(getNodeState().getNodeRestartInProgress() && cstartRecReq == ZFALSE)
|
||||
if(getNodeState().getNodeRestartInProgress() && cstartRecReq < 2)
|
||||
{
|
||||
GCPSaveRef * const saveRef = (GCPSaveRef*)&signal->theData[0];
|
||||
saveRef->dihPtr = dihPtr;
|
||||
|
@ -11942,6 +11943,10 @@ void Dblqh::execFSCLOSECONF(Signal* signal)
|
|||
// Set the prev file to check if we shall close it.
|
||||
logFilePtr.i = logFilePtr.p->prevLogFile;
|
||||
ptrCheckGuard(logFilePtr, clogFileFileSize, logFileRecord);
|
||||
|
||||
logPartPtr.i = logFilePtr.p->logPartRec;
|
||||
ptrCheckGuard(logPartPtr, clogPartFileSize, logPartRecord);
|
||||
|
||||
exitFromInvalidate(signal);
|
||||
return;
|
||||
case LogFileRecord::CLOSING_INIT:
|
||||
|
@ -13810,7 +13815,7 @@ void Dblqh::srCompletedLab(Signal* signal)
|
|||
* NO MORE FRAGMENTS ARE WAITING FOR SYSTEM RESTART.
|
||||
* -------------------------------------------------------------------- */
|
||||
lcpPtr.p->lcpState = LcpRecord::LCP_IDLE;
|
||||
if (cstartRecReq == ZTRUE) {
|
||||
if (cstartRecReq == 1) {
|
||||
jam();
|
||||
/* ----------------------------------------------------------------
|
||||
* WE HAVE ALSO RECEIVED AN INDICATION THAT NO MORE FRAGMENTS
|
||||
|
@ -13880,7 +13885,7 @@ void Dblqh::execSTART_RECREQ(Signal* signal)
|
|||
ndbrequire(req->receivingNodeId == cownNodeid);
|
||||
|
||||
cnewestCompletedGci = cnewestGci;
|
||||
cstartRecReq = ZTRUE;
|
||||
cstartRecReq = 1;
|
||||
for (logPartPtr.i = 0; logPartPtr.i < 4; logPartPtr.i++) {
|
||||
ptrAss(logPartPtr, logPartRecord);
|
||||
logPartPtr.p->logPartNewestCompletedGCI = cnewestCompletedGci;
|
||||
|
@ -13901,6 +13906,7 @@ void Dblqh::execSTART_RECREQ(Signal* signal)
|
|||
}//if
|
||||
if(cstartType == NodeState::ST_INITIAL_NODE_RESTART){
|
||||
jam();
|
||||
cstartRecReq = 2;
|
||||
StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend();
|
||||
conf->startingNodeId = getOwnNodeId();
|
||||
sendSignal(cmasterDihBlockref, GSN_START_RECCONF, signal,
|
||||
|
@ -15719,6 +15725,7 @@ void Dblqh::srFourthComp(Signal* signal)
|
|||
else
|
||||
{
|
||||
jam();
|
||||
cstartRecReq = 2;
|
||||
StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend();
|
||||
conf->startingNodeId = getOwnNodeId();
|
||||
sendSignal(cmasterDihBlockref, GSN_START_RECCONF, signal,
|
||||
|
@ -16685,7 +16692,7 @@ void Dblqh::initialiseRecordsLab(Signal* signal, Uint32 data,
|
|||
cCommitBlocked = false;
|
||||
ccurrentGcprec = RNIL;
|
||||
caddNodeState = ZFALSE;
|
||||
cstartRecReq = ZFALSE;
|
||||
cstartRecReq = 0;
|
||||
cnewestGci = (UintR)-1;
|
||||
cnewestCompletedGci = (UintR)-1;
|
||||
crestartOldestGci = 0;
|
||||
|
|
|
@ -346,27 +346,27 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
|
|||
}
|
||||
break;
|
||||
case NdbDictionary::Column::Blob:
|
||||
{
|
||||
const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef();
|
||||
out << h->length << ":";
|
||||
const unsigned char* p = (const unsigned char*)(h + 1);
|
||||
unsigned n = r.arraySize() - sizeof(*h);
|
||||
for (unsigned k = 0; k < n && k < h->length; k++)
|
||||
out.print("%02X", (int)p[k]);
|
||||
j = length;
|
||||
}
|
||||
break;
|
||||
case NdbDictionary::Column::Text:
|
||||
{
|
||||
const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef();
|
||||
out << h->length << ":";
|
||||
const unsigned char* p = (const unsigned char*)(h + 1);
|
||||
unsigned n = r.arraySize() - sizeof(*h);
|
||||
for (unsigned k = 0; k < n && k < h->length; k++)
|
||||
out.print("%c", (int)p[k]);
|
||||
j = length;
|
||||
{
|
||||
// user defined aRef() may not be aligned to Uint64
|
||||
NdbBlob::Head head;
|
||||
memcpy(&head, r.aRef(), sizeof(head));
|
||||
out << head.length << ":";
|
||||
const unsigned char* p = (const unsigned char*)r.aRef() + sizeof(head);
|
||||
if (r.arraySize() < sizeof(head))
|
||||
out << "***error***"; // really cannot happen
|
||||
else {
|
||||
unsigned n = r.arraySize() - sizeof(head);
|
||||
for (unsigned k = 0; k < n && k < head.length; k++) {
|
||||
if (r.getType() == NdbDictionary::Column::Blob)
|
||||
out.print("%02X", (int)p[k]);
|
||||
else
|
||||
out.print("%c", (int)p[k]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
j = length;
|
||||
}
|
||||
break;
|
||||
case NdbDictionary::Column::Longvarchar:
|
||||
{
|
||||
unsigned len = uint2korr(r.aRef());
|
||||
|
|
|
@ -264,6 +264,7 @@ ErrorBundle ErrorCodes[] = {
|
|||
/**
|
||||
* Application error
|
||||
*/
|
||||
{ 299, AE, "Operation not allowed or aborted due to single user mode" },
|
||||
{ 763, AE, "Alter table requires cluster nodes to have exact same version" },
|
||||
{ 823, AE, "Too much attrinfo from application in tuple manager" },
|
||||
{ 831, AE, "Too many nullable/bitfields in table definition" },
|
||||
|
|
|
@ -54,7 +54,12 @@ BackupFile::Twiddle(const AttributeDesc* attr_desc, AttributeData* attr_data, Ui
|
|||
return true;
|
||||
case 64:
|
||||
for(i = 0; i<arraySize; i++){
|
||||
attr_data->u_int64_value[i] = Twiddle64(attr_data->u_int64_value[i]);
|
||||
// allow unaligned
|
||||
char* p = (char*)&attr_data->u_int64_value[i];
|
||||
Uint64 x;
|
||||
memcpy(&x, p, sizeof(Uint64));
|
||||
x = Twiddle64(x);
|
||||
memcpy(p, &x, sizeof(Uint64));
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue