mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
bug#9892
Make BUILDINDX RF_LOCAL aware ndb/src/ndbapi/Ndbif.cpp: allow TCKEY_FAILREF w/ invalid magic number also when NDB_NODROPPED_SIGNAL ndb/test/ndbapi/testIndex.cpp: Run only 1 update thread during NFNR2_O
This commit is contained in:
@@ -9811,11 +9811,20 @@ Dbdict::execBUILDINDXREQ(Signal* signal)
|
|||||||
requestType == BuildIndxReq::RT_ALTER_INDEX ||
|
requestType == BuildIndxReq::RT_ALTER_INDEX ||
|
||||||
requestType == BuildIndxReq::RT_SYSTEMRESTART) {
|
requestType == BuildIndxReq::RT_SYSTEMRESTART) {
|
||||||
jam();
|
jam();
|
||||||
|
|
||||||
|
const bool isLocal = req->getRequestFlag() & RequestFlag::RF_LOCAL;
|
||||||
|
NdbNodeBitmask receiverNodes = c_aliveNodes;
|
||||||
|
if (isLocal) {
|
||||||
|
receiverNodes.clear();
|
||||||
|
receiverNodes.set(getOwnNodeId());
|
||||||
|
}
|
||||||
|
|
||||||
if (signal->getLength() == BuildIndxReq::SignalLength) {
|
if (signal->getLength() == BuildIndxReq::SignalLength) {
|
||||||
jam();
|
jam();
|
||||||
if (getOwnNodeId() != c_masterNodeId) {
|
|
||||||
|
if (!isLocal && getOwnNodeId() != c_masterNodeId) {
|
||||||
jam();
|
jam();
|
||||||
|
|
||||||
releaseSections(signal);
|
releaseSections(signal);
|
||||||
OpBuildIndex opBad;
|
OpBuildIndex opBad;
|
||||||
opPtr.p = &opBad;
|
opPtr.p = &opBad;
|
||||||
@@ -9828,9 +9837,9 @@ Dbdict::execBUILDINDXREQ(Signal* signal)
|
|||||||
}
|
}
|
||||||
// forward initial request plus operation key to all
|
// forward initial request plus operation key to all
|
||||||
req->setOpKey(++c_opRecordSequence);
|
req->setOpKey(++c_opRecordSequence);
|
||||||
NodeReceiverGroup rg(DBDICT, c_aliveNodes);
|
NodeReceiverGroup rg(DBDICT, receiverNodes);
|
||||||
sendSignal(rg, GSN_BUILDINDXREQ,
|
sendSignal(rg, GSN_BUILDINDXREQ,
|
||||||
signal, BuildIndxReq::SignalLength + 1, JBB);
|
signal, BuildIndxReq::SignalLength + 1, JBB);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// seize operation record
|
// seize operation record
|
||||||
@@ -9853,7 +9862,7 @@ Dbdict::execBUILDINDXREQ(Signal* signal)
|
|||||||
}
|
}
|
||||||
c_opBuildIndex.add(opPtr);
|
c_opBuildIndex.add(opPtr);
|
||||||
// master expects to hear from all
|
// master expects to hear from all
|
||||||
opPtr.p->m_signalCounter = c_aliveNodes;
|
opPtr.p->m_signalCounter = receiverNodes;
|
||||||
buildIndex_sendReply(signal, opPtr, false);
|
buildIndex_sendReply(signal, opPtr, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -10208,10 +10217,20 @@ Dbdict::buildIndex_sendSlaveReq(Signal* signal, OpBuildIndexPtr opPtr)
|
|||||||
req->setConnectionPtr(opPtr.p->key);
|
req->setConnectionPtr(opPtr.p->key);
|
||||||
req->setRequestType(opPtr.p->m_requestType);
|
req->setRequestType(opPtr.p->m_requestType);
|
||||||
req->addRequestFlag(opPtr.p->m_requestFlag);
|
req->addRequestFlag(opPtr.p->m_requestFlag);
|
||||||
opPtr.p->m_signalCounter = c_aliveNodes;
|
if(opPtr.p->m_requestFlag & RequestFlag::RF_LOCAL)
|
||||||
NodeReceiverGroup rg(DBDICT, c_aliveNodes);
|
{
|
||||||
sendSignal(rg, GSN_BUILDINDXREQ,
|
opPtr.p->m_signalCounter.clearWaitingFor();
|
||||||
signal, BuildIndxReq::SignalLength, JBB);
|
opPtr.p->m_signalCounter.setWaitingFor(getOwnNodeId());
|
||||||
|
sendSignal(reference(), GSN_BUILDINDXREQ,
|
||||||
|
signal, BuildIndxReq::SignalLength, JBB);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
opPtr.p->m_signalCounter = c_aliveNodes;
|
||||||
|
NodeReceiverGroup rg(DBDICT, c_aliveNodes);
|
||||||
|
sendSignal(rg, GSN_BUILDINDXREQ,
|
||||||
|
signal, BuildIndxReq::SignalLength, JBB);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -453,7 +453,7 @@ Ndb::handleReceivedSignal(NdbApiSignal* aSignal, LinearSectionPtr ptr[3])
|
|||||||
tFirstDataPtr = int2void(tFirstData);
|
tFirstDataPtr = int2void(tFirstData);
|
||||||
if(tFirstDataPtr != 0){
|
if(tFirstDataPtr != 0){
|
||||||
tOp = void2rec_op(tFirstDataPtr);
|
tOp = void2rec_op(tFirstDataPtr);
|
||||||
if (tOp->checkMagicNumber() == 0) {
|
if (tOp->checkMagicNumber(false) == 0) {
|
||||||
tCon = tOp->theNdbCon;
|
tCon = tOp->theNdbCon;
|
||||||
if (tCon != NULL) {
|
if (tCon != NULL) {
|
||||||
if ((tCon->theSendStatus == NdbConnection::sendTC_OP) ||
|
if ((tCon->theSendStatus == NdbConnection::sendTC_OP) ||
|
||||||
@@ -466,11 +466,11 @@ Ndb::handleReceivedSignal(NdbApiSignal* aSignal, LinearSectionPtr ptr[3])
|
|||||||
}//if
|
}//if
|
||||||
}//if
|
}//if
|
||||||
}//if
|
}//if
|
||||||
} else {
|
|
||||||
#ifdef VM_TRACE
|
|
||||||
ndbout_c("Recevied TCKEY_FAILREF wo/ operation");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#ifdef VM_TRACE
|
||||||
|
ndbout_c("Recevied TCKEY_FAILREF wo/ operation");
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GSN_TCKEYREF:
|
case GSN_TCKEYREF:
|
||||||
|
@@ -1329,7 +1329,7 @@ TESTCASE("NFNR2_O",
|
|||||||
INITIALIZER(runLoadTable);
|
INITIALIZER(runLoadTable);
|
||||||
STEP(runRestarts);
|
STEP(runRestarts);
|
||||||
STEP(runTransactions2);
|
STEP(runTransactions2);
|
||||||
STEP(runTransactions2);
|
//STEP(runTransactions2);
|
||||||
FINALIZER(runVerifyIndex);
|
FINALIZER(runVerifyIndex);
|
||||||
FINALIZER(createRandomIndex_Drop);
|
FINALIZER(createRandomIndex_Drop);
|
||||||
FINALIZER(createPkIndex_Drop);
|
FINALIZER(createPkIndex_Drop);
|
||||||
|
Reference in New Issue
Block a user