Commit 4b2aa105 authored by joreland@mysql.com's avatar joreland@mysql.com

bug#5702

Check index version already in master
to prevent "non-atmoic" failing drop index
parent cb235151
...@@ -6545,6 +6545,8 @@ Dbdict::execDROP_INDX_REQ(Signal* signal) ...@@ -6545,6 +6545,8 @@ Dbdict::execDROP_INDX_REQ(Signal* signal)
jamEntry(); jamEntry();
DropIndxReq* const req = (DropIndxReq*)signal->getDataPtrSend(); DropIndxReq* const req = (DropIndxReq*)signal->getDataPtrSend();
OpDropIndexPtr opPtr; OpDropIndexPtr opPtr;
int err = DropIndxRef::BadRequestType;
const Uint32 senderRef = signal->senderBlockRef(); const Uint32 senderRef = signal->senderBlockRef();
const DropIndxReq::RequestType requestType = req->getRequestType(); const DropIndxReq::RequestType requestType = req->getRequestType();
if (requestType == DropIndxReq::RT_USER) { if (requestType == DropIndxReq::RT_USER) {
...@@ -6559,6 +6561,20 @@ Dbdict::execDROP_INDX_REQ(Signal* signal) ...@@ -6559,6 +6561,20 @@ Dbdict::execDROP_INDX_REQ(Signal* signal)
return; return;
} }
// forward initial request plus operation key to all // forward initial request plus operation key to all
Uint32 indexId= req->getIndexId();
Uint32 indexVersion= req->getIndexVersion();
TableRecordPtr tmp;
int res = getMetaTablePtr(tmp, indexId, indexVersion);
switch(res){
case MetaData::InvalidArgument:
case MetaData::TableNotFound:
err = DropTableRef::NoSuchTable;
goto error;
case MetaData::InvalidTableVersion:
err = DropIndxRef::InvalidIndexVersion;
goto error;
}
req->setOpKey(++c_opRecordSequence); req->setOpKey(++c_opRecordSequence);
NodeReceiverGroup rg(DBDICT, c_aliveNodes); NodeReceiverGroup rg(DBDICT, c_aliveNodes);
sendSignal(rg, GSN_DROP_INDX_REQ, sendSignal(rg, GSN_DROP_INDX_REQ,
...@@ -6608,12 +6624,13 @@ Dbdict::execDROP_INDX_REQ(Signal* signal) ...@@ -6608,12 +6624,13 @@ Dbdict::execDROP_INDX_REQ(Signal* signal)
return; return;
} }
} }
error:
jam(); jam();
// return to sender // return to sender
OpDropIndex opBad; OpDropIndex opBad;
opPtr.p = &opBad; opPtr.p = &opBad;
opPtr.p->save(req); opPtr.p->save(req);
opPtr.p->m_errorCode = DropIndxRef::BadRequestType; opPtr.p->m_errorCode = (DropIndxRef::ErrorCode)err;
opPtr.p->m_errorLine = __LINE__; opPtr.p->m_errorLine = __LINE__;
dropIndex_sendReply(signal, opPtr, true); dropIndex_sendReply(signal, opPtr, true);
} }
......
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