Commit 11e5f207 authored by unknown's avatar unknown
Browse files

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
+14 −6
Original line number Diff line number Diff line
@@ -2824,9 +2824,11 @@ void Dblqh::execKEYINFO(Signal* signal)
      return;
    }//if
    jam();
    abort();
    terrorCode = errorCode;
    if(state == TcConnectionrec::WAIT_TUPKEYINFO)
      abortErrorLab(signal);
    else
      abort_scan(signal, regTcPtr->tcScanRec, errorCode);
    return;
  }//if
  if(state == TcConnectionrec::WAIT_TUPKEYINFO)
@@ -7602,7 +7604,13 @@ 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;
@@ -7612,13 +7620,13 @@ void Dblqh::scanAttrinfoLab(Signal* signal, Uint32* dataPtr, Uint32 length)
  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    */
+16 −5
Original line number Diff line number Diff line
@@ -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);
    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);
  }
  
  // Simple read is always ignore error
  return theNdbCon->OpCompleteFailure(IgnoreError);
}//NdbOperation::receiveTCKEYREF()
  return -1;
}


void
+2 −0
Original line number Diff line number Diff line
@@ -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;
  }
    
+8 −1
Original line number Diff line number Diff line
@@ -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;
    }