Commit 11e5f207 authored by unknown's avatar unknown

autotest failures


ndb/src/kernel/blocks/dblqh/Dblqh.hpp:
  Fix scan out of keyinfo buffers
ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
  Fix scan out of keyinfo buffers
ndb/src/ndbapi/NdbOperationExec.cpp:
  Handle TCKEYREF connect wrt dirty/simple read
ndb/src/ndbapi/NdbScanOperation.cpp:
  Set error code
ndb/test/src/UtilTransactions.cpp:
  Handle temporary errors
parent 6ba2ca2b
...@@ -2433,6 +2433,7 @@ private: ...@@ -2433,6 +2433,7 @@ private:
void abortStateHandlerLab(Signal* signal); void abortStateHandlerLab(Signal* signal);
void writeAttrinfoLab(Signal* signal); void writeAttrinfoLab(Signal* signal);
void scanAttrinfoLab(Signal* signal, Uint32* dataPtr, Uint32 length); void scanAttrinfoLab(Signal* signal, Uint32* dataPtr, Uint32 length);
void abort_scan(Signal* signal, Uint32 scan_ptr_i, Uint32 errcode);
void localAbortStateHandlerLab(Signal* signal); void localAbortStateHandlerLab(Signal* signal);
void logLqhkeyreqLab(Signal* signal); void logLqhkeyreqLab(Signal* signal);
void lqhAttrinfoLab(Signal* signal, Uint32* dataPtr, Uint32 length); void lqhAttrinfoLab(Signal* signal, Uint32* dataPtr, Uint32 length);
......
...@@ -2824,9 +2824,11 @@ void Dblqh::execKEYINFO(Signal* signal) ...@@ -2824,9 +2824,11 @@ void Dblqh::execKEYINFO(Signal* signal)
return; return;
}//if }//if
jam(); jam();
abort();
terrorCode = errorCode; terrorCode = errorCode;
abortErrorLab(signal); if(state == TcConnectionrec::WAIT_TUPKEYINFO)
abortErrorLab(signal);
else
abort_scan(signal, regTcPtr->tcScanRec, errorCode);
return; return;
}//if }//if
if(state == TcConnectionrec::WAIT_TUPKEYINFO) if(state == TcConnectionrec::WAIT_TUPKEYINFO)
...@@ -7602,23 +7604,29 @@ void Dblqh::scanAttrinfoLab(Signal* signal, Uint32* dataPtr, Uint32 length) ...@@ -7602,23 +7604,29 @@ void Dblqh::scanAttrinfoLab(Signal* signal, Uint32* dataPtr, Uint32 length)
}//if }//if
return; return;
}//if }//if
terrorCode = ZGET_ATTRINBUF_ERROR; abort_scan(signal, scanptr.i, ZGET_ATTRINBUF_ERROR);
}
void Dblqh::abort_scan(Signal* signal, Uint32 scan_ptr_i, Uint32 errcode){
jam();
scanptr.i = scan_ptr_i;
c_scanRecordPool.getPtr(scanptr);
finishScanrec(signal); finishScanrec(signal);
releaseScanrec(signal); releaseScanrec(signal);
tcConnectptr.p->transactionState = TcConnectionrec::IDLE; tcConnectptr.p->transactionState = TcConnectionrec::IDLE;
tcConnectptr.p->abortState = TcConnectionrec::ABORT_ACTIVE; tcConnectptr.p->abortState = TcConnectionrec::ABORT_ACTIVE;
ScanFragRef * ref = (ScanFragRef*)&signal->theData[0]; ScanFragRef * ref = (ScanFragRef*)&signal->theData[0];
ref->senderData = tcConnectptr.p->clientConnectrec; ref->senderData = tcConnectptr.p->clientConnectrec;
ref->transId1 = tcConnectptr.p->transid[0]; ref->transId1 = tcConnectptr.p->transid[0];
ref->transId2 = tcConnectptr.p->transid[1]; ref->transId2 = tcConnectptr.p->transid[1];
ref->errorCode = terrorCode; ref->errorCode = errcode;
sendSignal(tcConnectptr.p->clientBlockref, GSN_SCAN_FRAGREF, signal, sendSignal(tcConnectptr.p->clientBlockref, GSN_SCAN_FRAGREF, signal,
ScanFragRef::SignalLength, JBB); ScanFragRef::SignalLength, JBB);
deleteTransidHash(signal); deleteTransidHash(signal);
releaseOprec(signal); releaseOprec(signal);
releaseTcrec(signal, tcConnectptr); releaseTcrec(signal, tcConnectptr);
}//Dblqh::scanAttrinfoLab() }
/*---------------------------------------------------------------------*/ /*---------------------------------------------------------------------*/
/* Send this 'I am alive' signal to TC when it is received from ACC */ /* Send this 'I am alive' signal to TC when it is received from ACC */
......
...@@ -541,6 +541,9 @@ NdbOperation::receiveTCKEYREF( NdbApiSignal* aSignal) ...@@ -541,6 +541,9 @@ NdbOperation::receiveTCKEYREF( NdbApiSignal* aSignal)
return -1; return -1;
}//if }//if
AbortOption ao = (AbortOption)theNdbCon->m_abortOption;
theReceiver.m_received_result_length = ~0;
theStatus = Finished; theStatus = Finished;
theNdbCon->theReturnStatus = NdbConnection::ReturnFailure; theNdbCon->theReturnStatus = NdbConnection::ReturnFailure;
...@@ -548,11 +551,19 @@ NdbOperation::receiveTCKEYREF( NdbApiSignal* aSignal) ...@@ -548,11 +551,19 @@ NdbOperation::receiveTCKEYREF( NdbApiSignal* aSignal)
theNdbCon->setOperationErrorCodeAbort(aSignal->readData(4)); theNdbCon->setOperationErrorCodeAbort(aSignal->readData(4));
if(theOperationType != ReadRequest || !theSimpleIndicator) // not simple read if(theOperationType != ReadRequest || !theSimpleIndicator) // not simple read
return theNdbCon->OpCompleteFailure(theNdbCon->m_abortOption); return theNdbCon->OpCompleteFailure(ao);
// Simple read is always ignore error /**
return theNdbCon->OpCompleteFailure(IgnoreError); * If TCKEYCONF has arrived
}//NdbOperation::receiveTCKEYREF() * op has completed (maybe trans has completed)
*/
if(theReceiver.m_expected_result_length)
{
return theNdbCon->OpCompleteFailure(AbortOnError);
}
return -1;
}
void void
......
...@@ -566,6 +566,8 @@ int NdbScanOperation::nextResult(bool fetchAllowed) ...@@ -566,6 +566,8 @@ int NdbScanOperation::nextResult(bool fetchAllowed)
setErrorCode(4028); // Node fail setErrorCode(4028); // Node fail
break; break;
case -3: // send_next_scan -> return fail (set error-code self) case -3: // send_next_scan -> return fail (set error-code self)
if(theError.code == 0)
setErrorCode(4028); // seq changed = Node fail
break; break;
} }
......
...@@ -951,8 +951,15 @@ UtilTransactions::scanAndCompareUniqueIndex(Ndb* pNdb, ...@@ -951,8 +951,15 @@ UtilTransactions::scanAndCompareUniqueIndex(Ndb* pNdb,
pOp = pTrans->getNdbScanOperation(tab.getName()); pOp = pTrans->getNdbScanOperation(tab.getName());
if (pOp == NULL) { if (pOp == NULL) {
ERR(pTrans->getNdbError()); const NdbError err = pNdb->getNdbError();
pNdb->closeTransaction(pTrans); pNdb->closeTransaction(pTrans);
ERR(err);
if (err.status == NdbError::TemporaryError){
NdbSleep_MilliSleep(50);
retryAttempt++;
continue;
}
return NDBT_FAILED; return NDBT_FAILED;
} }
......
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