Commit 55c9c4d7 authored by unknown's avatar unknown
Browse files

Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.com:/home/jonas/src/mysql-4.1

parents 184f4137 e46360ba
Loading
Loading
Loading
Loading
+2 −28
Original line number Diff line number Diff line
@@ -585,34 +585,8 @@ public:
   */
  ArrayPool<TcIndexOperation> c_theIndexOperationPool;

  /**
   * The list of index operations
   */  
  ArrayList<TcIndexOperation> c_theIndexOperations;

  UintR c_maxNumberOfIndexOperations;   

  struct TcSeizedIndexOperation {
    /**
     * Next ptr (used in pool/list)
     */
    union {
      Uint32 nextPool;
      Uint32 nextList;
    };
    /**
     * Prev pointer (used in list)
     */
    Uint32 prevList;
  };

  /**
   * Pool of seized index operations
   */
  ArrayPool<TcSeizedIndexOperation> c_theSeizedIndexOperationPool;

  typedef Ptr<TcSeizedIndexOperation> TcSeizedIndexOperationPtr;

  /************************** API CONNECT RECORD ***********************
   * The API connect record contains the connection record to which the
   * application connects.  
@@ -650,7 +624,7 @@ public:

  struct ApiConnectRecord {
    ApiConnectRecord(ArrayPool<TcFiredTriggerData> & firedTriggerPool,
		     ArrayPool<TcSeizedIndexOperation> & seizedIndexOpPool):
		     ArrayPool<TcIndexOperation> & seizedIndexOpPool):
      theFiredTriggers(firedTriggerPool),
      isIndexOp(false),
      theSeizedIndexOperations(seizedIndexOpPool) 
@@ -763,7 +737,7 @@ public:
    UintR accumulatingIndexOp;
    UintR executingIndexOp;
    UintR tcIndxSendArray[6];
    ArrayList<TcSeizedIndexOperation> theSeizedIndexOperations;
    ArrayList<TcIndexOperation> theSeizedIndexOperations;
  };
  
  typedef Ptr<ApiConnectRecord> ApiConnectRecordPtr;
+1 −3
Original line number Diff line number Diff line
@@ -65,7 +65,6 @@ void Dbtc::initData()
  c_theFiredTriggerPool.setSize(c_maxNumberOfFiredTriggers);
  c_theIndexPool.setSize(c_maxNumberOfIndexes);
  c_theIndexOperationPool.setSize(c_maxNumberOfIndexOperations);
  c_theSeizedIndexOperationPool.setSize(c_maxNumberOfIndexOperations);
  c_theAttributeBufferPool.setSize(c_transactionBufferSpace);
  c_firedTriggerHash.setSize((c_maxNumberOfFiredTriggers+10)/10);
}//Dbtc::initData()
@@ -85,7 +84,7 @@ void Dbtc::initRecords()
  for(unsigned i = 0; i<capiConnectFilesize; i++) {
    p = &apiConnectRecord[i];
    new (p) ApiConnectRecord(c_theFiredTriggerPool, 
			     c_theSeizedIndexOperationPool);
			     c_theIndexOperationPool);
  }
  // Init all fired triggers
  DLFifoList<TcFiredTriggerData> triggers(c_theFiredTriggerPool);
@@ -177,7 +176,6 @@ Dbtc::Dbtc(const class Configuration & conf):
  c_maxNumberOfFiredTriggers(0),
  c_theIndexes(c_theIndexPool),
  c_maxNumberOfIndexes(0),
  c_theIndexOperations(c_theIndexOperationPool),
  c_maxNumberOfIndexOperations(0),
  m_commitAckMarkerHash(m_commitAckMarkerPool)
{
+39 −42
Original line number Diff line number Diff line
@@ -11161,8 +11161,13 @@ void Dbtc::execTCINDXREQ(Signal* signal)
    jam();
    // This is a newly started transaction, clean-up
    releaseAllSeizedIndexOperations(regApiPtr);

    regApiPtr->transid[0] = tcIndxReq->transId1;
    regApiPtr->transid[1] = tcIndxReq->transId2;
  }//if
  if (!seizeIndexOperation(regApiPtr, indexOpPtr)) {
  ndbout_c("here");

  if (ERROR_INSERTED(8036) || !seizeIndexOperation(regApiPtr, indexOpPtr)) {
    jam();
    // Failed to allocate index operation
    TcIndxRef * const tcIndxRef = (TcIndxRef *)signal->getDataPtrSend();
@@ -11170,7 +11175,7 @@ void Dbtc::execTCINDXREQ(Signal* signal)
    tcIndxRef->connectPtr = tcIndxReq->senderData;
    tcIndxRef->transId[0] = regApiPtr->transid[0];
    tcIndxRef->transId[1] = regApiPtr->transid[1];
    tcIndxRef->errorCode = 4000;
    tcIndxRef->errorCode = 288;
    sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal, 
	       TcIndxRef::SignalLength, JBB);
    return;
@@ -11307,8 +11312,9 @@ void Dbtc::execINDXKEYINFO(Signal* signal)
  TcIndexOperationPtr indexOpPtr;
  TcIndexOperation* indexOp;

  indexOpPtr.i = regApiPtr->accumulatingIndexOp;
  indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
  if((indexOpPtr.i = regApiPtr->accumulatingIndexOp) != RNIL)
  {
    indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
    if (saveINDXKEYINFO(signal,
			indexOp, 
			src, 
@@ -11318,6 +11324,7 @@ void Dbtc::execINDXKEYINFO(Signal* signal)
      readIndexTable(signal, regApiPtr, indexOp);
    }
  }
}

void Dbtc::execINDXATTRINFO(Signal* signal)
{
@@ -11338,8 +11345,9 @@ void Dbtc::execINDXATTRINFO(Signal* signal)
  TcIndexOperationPtr indexOpPtr;
  TcIndexOperation* indexOp;

  indexOpPtr.i = regApiPtr->accumulatingIndexOp;
  indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
  if((indexOpPtr.i = regApiPtr->accumulatingIndexOp) != RNIL)
  {
    indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
    if (saveINDXATTRINFO(signal,
			 indexOp, 
			 src, 
@@ -11349,6 +11357,7 @@ void Dbtc::execINDXATTRINFO(Signal* signal)
      readIndexTable(signal, regApiPtr, indexOp);
    }
  }
}

/**
 * Save signal INDXKEYINFO
@@ -11371,7 +11380,7 @@ bool Dbtc::saveINDXKEYINFO(Signal* signal,
    releaseIndexOperation(apiConnectptr.p, indexOp);
    terrorCode = 4000;
    abortErrorLab(signal);
    return true;
    return false;
  }
  if (receivedAllINDXKEYINFO(indexOp) && receivedAllINDXATTRINFO(indexOp)) {
    jam();
@@ -11404,7 +11413,7 @@ bool Dbtc::saveINDXATTRINFO(Signal* signal,
    releaseIndexOperation(apiConnectptr.p, indexOp);
    terrorCode = 4000;
    abortErrorLab(signal);
    return true;
    return false;
  }
  if (receivedAllINDXKEYINFO(indexOp) && receivedAllINDXATTRINFO(indexOp)) {
    jam();
@@ -11464,7 +11473,7 @@ void Dbtc::execTCKEYCONF(Signal* signal)

  jamEntry();
  indexOpPtr.i = tcKeyConf->apiConnectPtr;
  TcIndexOperation* indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
  TcIndexOperation* indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
  Uint32 confInfo = tcKeyConf->confInfo;

  /**
@@ -11553,7 +11562,7 @@ void Dbtc::execTCKEYREF(Signal* signal)

  jamEntry();
  indexOpPtr.i = tcKeyRef->connectPtr;
  TcIndexOperation* indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
  TcIndexOperation* indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
  indexOpPtr.p = indexOp;
  if (!indexOp) {
    jam();    
@@ -11654,7 +11663,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
  jamEntry();
  TcIndexOperationPtr indexOpPtr;
  indexOpPtr.i = transIdAI->connectPtr;
  TcIndexOperation* indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
  TcIndexOperation* indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
  indexOpPtr.p = indexOp;
  if (!indexOp) {
    jam();
@@ -11762,7 +11771,7 @@ void Dbtc::execTCROLLBACKREP(Signal* signal)
  jamEntry();
  TcIndexOperationPtr indexOpPtr;
  indexOpPtr.i = tcRollbackRep->connectPtr;
  TcIndexOperation* indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
  TcIndexOperation* indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
  indexOpPtr.p = indexOp;
  tcRollbackRep =  (TcRollbackRep *)signal->getDataPtrSend();
  tcRollbackRep->connectPtr = indexOp->tcIndxReq.senderData;
@@ -12090,16 +12099,7 @@ void Dbtc::executeIndexOperation(Signal* signal,
bool Dbtc::seizeIndexOperation(ApiConnectRecord* regApiPtr,
			       TcIndexOperationPtr& indexOpPtr)
{
  bool seizeOk;

  seizeOk = c_theIndexOperations.seize(indexOpPtr);
  if (seizeOk) {
    jam();
    TcSeizedIndexOperationPtr seizedIndexOpPtr;
    seizeOk &= regApiPtr->theSeizedIndexOperations.seizeId(seizedIndexOpPtr,
							   indexOpPtr.i);
  }
  return seizeOk;
  return regApiPtr->theSeizedIndexOperations.seize(indexOpPtr);
}

void Dbtc::releaseIndexOperation(ApiConnectRecord* regApiPtr,
@@ -12113,18 +12113,16 @@ void Dbtc::releaseIndexOperation(ApiConnectRecord* regApiPtr,
  indexOp->expectedTransIdAI = 0;
  indexOp->transIdAI.release();
  regApiPtr->theSeizedIndexOperations.release(indexOp->indexOpId);
  c_theIndexOperations.release(indexOp->indexOpId);
}

void Dbtc::releaseAllSeizedIndexOperations(ApiConnectRecord* regApiPtr)
{
  TcSeizedIndexOperationPtr seizedIndexOpPtr;
  TcIndexOperationPtr seizedIndexOpPtr;

  regApiPtr->theSeizedIndexOperations.first(seizedIndexOpPtr);
  while(seizedIndexOpPtr.i != RNIL) {
    jam();
    TcIndexOperation* indexOp = 
      c_theIndexOperations.getPtr(seizedIndexOpPtr.i);
    TcIndexOperation* indexOp = seizedIndexOpPtr.p;

    indexOp->indexOpState = IOS_NOOP;
    indexOp->expectedKeyInfo = 0;
@@ -12133,7 +12131,6 @@ void Dbtc::releaseAllSeizedIndexOperations(ApiConnectRecord* regApiPtr)
    indexOp->attrInfo.release();
    indexOp->expectedTransIdAI = 0;
    indexOp->transIdAI.release();
    c_theIndexOperations.release(seizedIndexOpPtr.i);  
    regApiPtr->theSeizedIndexOperations.next(seizedIndexOpPtr);    
  }
  regApiPtr->theSeizedIndexOperations.release();
+3 −2
Original line number Diff line number Diff line
@@ -130,7 +130,7 @@ ErrorReporter::formatMessage(ErrorCategory type,
	   "Date/Time: %s\nType of error: %s\n"
	   "Message: %s\nFault ID: %d\nProblem data: %s"
	   "\nObject of reference: %s\nProgramName: %s\n"
	   "ProcessID: %d\nTraceFile: %s\n***EOM***\n", 
	   "ProcessID: %d\nTraceFile: %s\n%s\n***EOM***\n", 
	   formatTimeStampString() , 
	   errorType[type], 
	   lookupErrorMessage(faultID),
@@ -139,7 +139,8 @@ ErrorReporter::formatMessage(ErrorCategory type,
	   objRef, 
	   my_progname, 
	   processId, 
	   theNameOfTheTraceFile ? theNameOfTheTraceFile : "<no tracefile>");
	   theNameOfTheTraceFile ? theNameOfTheTraceFile : "<no tracefile>",
		       NDB_VERSION_STRING);

  // Add trailing blanks to get a fixed lenght of the message
  while (strlen(messptr) <= MESSAGE_LENGTH-3){
+1 −1
Original line number Diff line number Diff line
@@ -752,5 +752,5 @@ NdbIndexOperation::receiveTCINDXREF( NdbApiSignal* aSignal)
  Uint32 errorCode = tcIndxRef->errorCode;
  theError.code = errorCode;
  theNdbCon->setOperationErrorCodeAbort(errorCode);
  return theNdbCon->OpCompleteFailure(theNdbCon->m_abortOption);
  return theNdbCon->OpCompleteFailure(AbortOnError);
}//NdbIndexOperation::receiveTCINDXREF()
Loading