diff options
author | unknown <joreland@mysql.com> | 2004-10-05 09:01:22 +0200 |
---|---|---|
committer | unknown <joreland@mysql.com> | 2004-10-05 09:01:22 +0200 |
commit | 7cf1c4d59e126fe3a79efcadffcd29eea6834fd8 (patch) | |
tree | f232980cf94066be96958b99a42849789d20956d | |
parent | e8b47674541488cddc770ab2b6991c8babbefd52 (diff) | |
download | mariadb-git-7cf1c4d59e126fe3a79efcadffcd29eea6834fd8.tar.gz |
wl2135 test prg + bug fixes
ndb/include/ndbapi/NdbConnection.hpp:
Add support for removing op from list
ndb/include/ndbapi/NdbScanOperation.hpp:
virtual destructor
ndb/src/ndbapi/NdbConnection.cpp:
Add support for removing op from list
ndb/src/ndbapi/NdbScanOperation.cpp:
Set magic number to invalid before first prepareSendScan
(so that prepareSendScan is only called once incase of restarts)
ndb/src/ndbapi/Ndblist.cpp:
Use correct type
ndb/test/src/UtilTransactions.cpp:
Update test prg.
- use LM_Read to maintain locks
- set iop = null on temporary error (restart transaction)
-rw-r--r-- | ndb/include/ndbapi/NdbConnection.hpp | 2 | ||||
-rw-r--r-- | ndb/include/ndbapi/NdbScanOperation.hpp | 2 | ||||
-rw-r--r-- | ndb/src/ndbapi/NdbConnection.cpp | 13 | ||||
-rw-r--r-- | ndb/src/ndbapi/NdbScanOperation.cpp | 52 | ||||
-rw-r--r-- | ndb/src/ndbapi/Ndblist.cpp | 4 | ||||
-rw-r--r-- | ndb/test/src/UtilTransactions.cpp | 18 |
6 files changed, 52 insertions, 39 deletions
diff --git a/ndb/include/ndbapi/NdbConnection.hpp b/ndb/include/ndbapi/NdbConnection.hpp index d2ee178c6e1..d23a2e7cc0d 100644 --- a/ndb/include/ndbapi/NdbConnection.hpp +++ b/ndb/include/ndbapi/NdbConnection.hpp @@ -673,6 +673,8 @@ private: void printState(); #endif bool checkState_TransId(const Uint32 * transId) const; + + void remove_list(NdbOperation*& head, NdbOperation*); void define_scan_op(NdbIndexScanOperation*); }; diff --git a/ndb/include/ndbapi/NdbScanOperation.hpp b/ndb/include/ndbapi/NdbScanOperation.hpp index a93c087138a..a1c66b380a7 100644 --- a/ndb/include/ndbapi/NdbScanOperation.hpp +++ b/ndb/include/ndbapi/NdbScanOperation.hpp @@ -87,7 +87,7 @@ protected: CursorType m_cursor_type; NdbScanOperation(Ndb* aNdb); - ~NdbScanOperation(); + virtual ~NdbScanOperation(); int nextResult(bool fetchAllowed = true); virtual void release(); diff --git a/ndb/src/ndbapi/NdbConnection.cpp b/ndb/src/ndbapi/NdbConnection.cpp index b89cc7112f4..5e5d982444c 100644 --- a/ndb/src/ndbapi/NdbConnection.cpp +++ b/ndb/src/ndbapi/NdbConnection.cpp @@ -1129,6 +1129,19 @@ getNdbOp_error1: }//NdbConnection::getNdbScanOperation() void +NdbConnection::remove_list(NdbOperation*& list, NdbOperation* op){ + NdbOperation* tmp= list; + if(tmp == op) + list = op->next(); + else { + while(tmp && tmp->next() != op) tmp = tmp->next(); + if(tmp) + tmp->next(op->next()); + } + op->next(NULL); +} + +void NdbConnection::define_scan_op(NdbIndexScanOperation * tOp){ // Link scan operation into list of cursor operations if (m_theLastScanOperation == NULL) diff --git a/ndb/src/ndbapi/NdbScanOperation.cpp b/ndb/src/ndbapi/NdbScanOperation.cpp index 33118df0160..c8ae63877de 100644 --- a/ndb/src/ndbapi/NdbScanOperation.cpp +++ b/ndb/src/ndbapi/NdbScanOperation.cpp @@ -117,6 +117,8 @@ NdbScanOperation::init(const NdbTableImpl* tab, NdbConnection* myConnection) theStatus = GetValue; theOperationType = OpenScanRequest; + theNdbCon->theMagicNumber = 0xFE11DF; + return 0; } @@ -217,7 +219,10 @@ NdbResultSet* NdbScanOperation::readTuples(NdbScanOperation::LockMode lm, req->transId2 = (Uint32) (transId >> 32); NdbApiSignal* tSignal = - theFirstKEYINFO = theLastKEYINFO = theNdb->getSignal(); + theFirstKEYINFO; + + theFirstKEYINFO = (tSignal ? tSignal : tSignal = theNdb->getSignal()); + theLastKEYINFO = tSignal; tSignal->setSignal(GSN_KEYINFO); theKEYINFOptr = ((KeyInfo*)tSignal->getDataPtrSend())->keyData; @@ -259,18 +264,7 @@ NdbScanOperation::fix_receivers(Uint32 parallel){ m_allocated_receivers = parallel; } - for(Uint32 i = 0; i<parallel; i++){ - m_receivers[i]->m_list_index = i; - m_prepared_receivers[i] = m_receivers[i]->getId(); - m_sent_receivers[i] = m_receivers[i]; - m_conf_receivers[i] = 0; - m_api_receivers[i] = 0; - } - - m_api_receivers_count = 0; - m_current_api_receiver = 0; - m_sent_receivers_count = parallel; - m_conf_receivers_count = 0; + reset_receivers(parallel, 0); return 0; } @@ -414,14 +408,22 @@ NdbScanOperation::executeCursor(int nodeId){ NdbConnection * tCon = theNdbCon; TransporterFacade* tp = TransporterFacade::instance(); Guard guard(tp->theMutexPtr); + + Uint32 magic = tCon->theMagicNumber; Uint32 seq = tCon->theNodeSequence; + if (tp->get_node_alive(nodeId) && (tp->getNodeSequence(nodeId) == seq)) { - - if(prepareSendScan(tCon->theTCConPtr, tCon->theTransactionId) == -1) - return -1; + /** + * Only call prepareSendScan first time (incase of restarts) + * - check with theMagicNumber + */ tCon->theMagicNumber = 0x37412619; + if(magic != 0x37412619 && + prepareSendScan(tCon->theTCConPtr, tCon->theTransactionId) == -1) + return -1; + if (doSendScan(nodeId) == -1) return -1; @@ -718,9 +720,6 @@ int NdbScanOperation::prepareSendScan(Uint32 aTC_ConnectPtr, ((NdbIndexScanOperation*)this)->fix_get_values(); } - const Uint32 transId1 = (Uint32) (aTransactionId & 0xFFFFFFFF); - const Uint32 transId2 = (Uint32) (aTransactionId >> 32); - theCurrentATTRINFO->setLength(theAI_LenInCurrAI); /** @@ -991,13 +990,15 @@ NdbIndexScanOperation::~NdbIndexScanOperation(){ } int -NdbIndexScanOperation::setBound(const char* anAttrName, int type, const void* aValue, Uint32 len) +NdbIndexScanOperation::setBound(const char* anAttrName, int type, + const void* aValue, Uint32 len) { return setBound(m_accessTable->getColumn(anAttrName), type, aValue, len); } int -NdbIndexScanOperation::setBound(Uint32 anAttrId, int type, const void* aValue, Uint32 len) +NdbIndexScanOperation::setBound(Uint32 anAttrId, int type, + const void* aValue, Uint32 len) { return setBound(m_accessTable->getColumn(anAttrId), type, aValue, len); } @@ -1522,6 +1523,7 @@ NdbScanOperation::restart() */ reset_receivers(theParallelism, m_ordered); + theError.code = 0; if (doSendScan(nodeId) == -1) return -1; @@ -1540,12 +1542,16 @@ NdbIndexScanOperation::reset_bounds(){ if(!res) { + theError.code = 0; reset_receivers(theParallelism, m_ordered); theLastKEYINFO = theFirstKEYINFO; theKEYINFOptr = ((KeyInfo*)theFirstKEYINFO->getDataPtrSend())->keyData; - theTotalNrOfKeyWordInSignal= 0; - + theTupKeyLen = 0; + theTotalNrOfKeyWordInSignal = 0; + m_transConnection + ->remove_list((NdbOperation*)m_transConnection->m_firstExecutedScanOp, + this); m_transConnection->define_scan_op(this); return 0; } diff --git a/ndb/src/ndbapi/Ndblist.cpp b/ndb/src/ndbapi/Ndblist.cpp index af98aa09280..b6739b66dce 100644 --- a/ndb/src/ndbapi/Ndblist.cpp +++ b/ndb/src/ndbapi/Ndblist.cpp @@ -649,8 +649,8 @@ Remark: Always release the first item in the free list void Ndb::freeScanOperation() { - NdbScanOperation* tOp = theScanOpIdleList; - theScanOpIdleList = (NdbIndexScanOperation *) theScanOpIdleList->next(); + NdbIndexScanOperation* tOp = theScanOpIdleList; + theScanOpIdleList = (NdbIndexScanOperation *)tOp->next(); delete tOp; } diff --git a/ndb/test/src/UtilTransactions.cpp b/ndb/test/src/UtilTransactions.cpp index 4687d63b72f..52341c0e0e6 100644 --- a/ndb/test/src/UtilTransactions.cpp +++ b/ndb/test/src/UtilTransactions.cpp @@ -1328,12 +1328,8 @@ UtilTransactions::verifyOrderedIndex(Ndb* pNdb, return NDBT_FAILED; } - NdbResultSet* rs; - if(transactional){ + NdbResultSet* rs = pOp->readTuples(NdbScanOperation::LM_Read, 0, parallelism); - } else { - rs = pOp->readTuples(NdbScanOperation::LM_CommittedRead, 0, parallelism); - } if( rs == 0 ) { ERR(pTrans->getNdbError()); @@ -1372,7 +1368,6 @@ UtilTransactions::verifyOrderedIndex(Ndb* pNdb, int eof; int rows = 0; while(check == 0 && (eof = rs->nextResult()) == 0){ - ndbout_c("Row: %d", rows); rows++; bool null_found= false; @@ -1397,8 +1392,7 @@ UtilTransactions::verifyOrderedIndex(Ndb* pNdb, if(!iop && (iop= pTrans->getNdbIndexScanOperation(indexName, tab.getName()))) { - cursor= iop->readTuples(transactional ? NdbScanOperation::LM_Read : - NdbScanOperation::LM_CommittedRead, + cursor= iop->readTuples(NdbScanOperation::LM_CommittedRead, parallelism); iop->interpret_exit_ok(); if(!cursor || get_values(iop, indexRow)) @@ -1411,11 +1405,9 @@ UtilTransactions::verifyOrderedIndex(Ndb* pNdb, if(equal(pIndex, iop, scanRow)) goto error; - else - ndbout_c("equal ok"); } - check = pTrans->execute(Commit); // commit pk read + check = pTrans->execute(NoCommit); if(check) goto error; @@ -1432,6 +1424,7 @@ UtilTransactions::verifyOrderedIndex(Ndb* pNdb, if((res= cursor->nextResult()) != 0){ g_err << "Failed to find row using index: " << res << endl; + ERR(pTrans->getNdbError()); pNdb->closeTransaction(pTrans); return NDBT_FAILED; } @@ -1451,8 +1444,6 @@ UtilTransactions::verifyOrderedIndex(Ndb* pNdb, return NDBT_FAILED; } } - pTrans->restart(); - ndbout_c("row %d ok", rows-1); } if (eof == -1 || check == -1) { @@ -1461,6 +1452,7 @@ UtilTransactions::verifyOrderedIndex(Ndb* pNdb, if (err.status == NdbError::TemporaryError){ ERR(err); + iop = 0; pNdb->closeTransaction(pTrans); NdbSleep_MilliSleep(50); retryAttempt++; |