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,9 +9811,18 @@ Dbdict::execBUILDINDXREQ(Signal* signal)
|
||||
requestType == BuildIndxReq::RT_ALTER_INDEX ||
|
||||
requestType == BuildIndxReq::RT_SYSTEMRESTART) {
|
||||
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) {
|
||||
jam();
|
||||
if (getOwnNodeId() != c_masterNodeId) {
|
||||
|
||||
if (!isLocal && getOwnNodeId() != c_masterNodeId) {
|
||||
jam();
|
||||
|
||||
releaseSections(signal);
|
||||
@@ -9828,7 +9837,7 @@ Dbdict::execBUILDINDXREQ(Signal* signal)
|
||||
}
|
||||
// forward initial request plus operation key to all
|
||||
req->setOpKey(++c_opRecordSequence);
|
||||
NodeReceiverGroup rg(DBDICT, c_aliveNodes);
|
||||
NodeReceiverGroup rg(DBDICT, receiverNodes);
|
||||
sendSignal(rg, GSN_BUILDINDXREQ,
|
||||
signal, BuildIndxReq::SignalLength + 1, JBB);
|
||||
return;
|
||||
@@ -9853,7 +9862,7 @@ Dbdict::execBUILDINDXREQ(Signal* signal)
|
||||
}
|
||||
c_opBuildIndex.add(opPtr);
|
||||
// master expects to hear from all
|
||||
opPtr.p->m_signalCounter = c_aliveNodes;
|
||||
opPtr.p->m_signalCounter = receiverNodes;
|
||||
buildIndex_sendReply(signal, opPtr, false);
|
||||
return;
|
||||
}
|
||||
@@ -10208,11 +10217,21 @@ Dbdict::buildIndex_sendSlaveReq(Signal* signal, OpBuildIndexPtr opPtr)
|
||||
req->setConnectionPtr(opPtr.p->key);
|
||||
req->setRequestType(opPtr.p->m_requestType);
|
||||
req->addRequestFlag(opPtr.p->m_requestFlag);
|
||||
if(opPtr.p->m_requestFlag & RequestFlag::RF_LOCAL)
|
||||
{
|
||||
opPtr.p->m_signalCounter.clearWaitingFor();
|
||||
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
|
||||
Dbdict::buildIndex_sendReply(Signal* signal, OpBuildIndexPtr opPtr,
|
||||
|
@@ -453,7 +453,7 @@ Ndb::handleReceivedSignal(NdbApiSignal* aSignal, LinearSectionPtr ptr[3])
|
||||
tFirstDataPtr = int2void(tFirstData);
|
||||
if(tFirstDataPtr != 0){
|
||||
tOp = void2rec_op(tFirstDataPtr);
|
||||
if (tOp->checkMagicNumber() == 0) {
|
||||
if (tOp->checkMagicNumber(false) == 0) {
|
||||
tCon = tOp->theNdbCon;
|
||||
if (tCon != NULL) {
|
||||
if ((tCon->theSendStatus == NdbConnection::sendTC_OP) ||
|
||||
@@ -466,11 +466,11 @@ Ndb::handleReceivedSignal(NdbApiSignal* aSignal, LinearSectionPtr ptr[3])
|
||||
}//if
|
||||
}//if
|
||||
}//if
|
||||
} else {
|
||||
}
|
||||
#ifdef VM_TRACE
|
||||
ndbout_c("Recevied TCKEY_FAILREF wo/ operation");
|
||||
#endif
|
||||
}
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case GSN_TCKEYREF:
|
||||
|
@@ -1329,7 +1329,7 @@ TESTCASE("NFNR2_O",
|
||||
INITIALIZER(runLoadTable);
|
||||
STEP(runRestarts);
|
||||
STEP(runTransactions2);
|
||||
STEP(runTransactions2);
|
||||
//STEP(runTransactions2);
|
||||
FINALIZER(runVerifyIndex);
|
||||
FINALIZER(createRandomIndex_Drop);
|
||||
FINALIZER(createPkIndex_Drop);
|
||||
|
Reference in New Issue
Block a user