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