Loading ndb/include/ndbapi/NdbConnection.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,7 @@ private: // Release all cursor operations in connection void releaseOps(NdbOperation*); void releaseScanOperations(NdbIndexScanOperation*); void releaseExecutedScanOperation(NdbIndexScanOperation*); // Set the transaction identity of the transaction void setTransactionId(Uint64 aTransactionId); Loading ndb/include/ndbapi/NdbScanOperation.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ protected: int nextResult(bool fetchAllowed = true, bool forceSend = false); virtual void release(); void closeScan(bool forceSend = false); void closeScan(bool forceSend = false, bool releaseOp = false); int close_impl(class TransporterFacade*, bool forceSend = false); // Overloaded methods from NdbCursorOperation Loading ndb/src/ndbapi/NdbConnection.cpp +31 −0 Original line number Diff line number Diff line Loading @@ -963,6 +963,37 @@ NdbConnection::releaseScanOperations(NdbIndexScanOperation* cursorOp) } }//NdbConnection::releaseScanOperations() /***************************************************************************** void releaseExecutedScanOperation(); Remark: Release scan op when hupp'ed trans closed (save memory) ******************************************************************************/ void NdbConnection::releaseExecutedScanOperation(NdbIndexScanOperation* cursorOp) { DBUG_ENTER("NdbConnection::releaseExecutedScanOperation"); DBUG_PRINT("enter", ("this=0x%x op=0x%x", (UintPtr)this, (UintPtr)cursorOp)) // here is one reason to make op lists doubly linked if (m_firstExecutedScanOp == cursorOp) { m_firstExecutedScanOp = (NdbIndexScanOperation*)cursorOp->theNext; cursorOp->release(); theNdb->releaseScanOperation(cursorOp); } else if (m_firstExecutedScanOp != NULL) { NdbIndexScanOperation* tOp = m_firstExecutedScanOp; while (tOp->theNext != NULL) { if (tOp->theNext == cursorOp) { tOp->theNext = cursorOp->theNext; cursorOp->release(); theNdb->releaseScanOperation(cursorOp); break; } tOp = (NdbIndexScanOperation*)tOp->theNext; } } DBUG_VOID_RETURN; }//NdbConnection::releaseExecutedScanOperation() /***************************************************************************** NdbOperation* getNdbOperation(const char* aTableName); Loading ndb/src/ndbapi/NdbResultSet.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ int NdbResultSet::nextResult(bool fetchAllowed, bool forceSend) void NdbResultSet::close(bool forceSend) { m_operation->closeScan(forceSend); m_operation->closeScan(forceSend, true); } NdbOperation* Loading ndb/src/ndbapi/NdbScanOperation.cpp +14 −7 Original line number Diff line number Diff line Loading @@ -674,7 +674,7 @@ NdbScanOperation::doSend(int ProcessorId) return 0; } void NdbScanOperation::closeScan(bool forceSend) void NdbScanOperation::closeScan(bool forceSend, bool releaseOp) { if(m_transConnection){ if(DEBUG_NEXT_RESULT) Loading @@ -691,13 +691,20 @@ void NdbScanOperation::closeScan(bool forceSend) Guard guard(tp->theMutexPtr); close_impl(tp, forceSend); } while(0); theNdbCon->theScanningOp = 0; theNdb->closeTransaction(theNdbCon); } theNdbCon = 0; NdbConnection* tCon = theNdbCon; NdbConnection* tTransCon = m_transConnection; theNdbCon = NULL; m_transConnection = NULL; if (releaseOp && tTransCon) { NdbIndexScanOperation* tOp = (NdbIndexScanOperation*)this; tTransCon->releaseExecutedScanOperation(tOp); } tCon->theScanningOp = 0; theNdb->closeTransaction(tCon); } void Loading Loading
ndb/include/ndbapi/NdbConnection.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,7 @@ private: // Release all cursor operations in connection void releaseOps(NdbOperation*); void releaseScanOperations(NdbIndexScanOperation*); void releaseExecutedScanOperation(NdbIndexScanOperation*); // Set the transaction identity of the transaction void setTransactionId(Uint64 aTransactionId); Loading
ndb/include/ndbapi/NdbScanOperation.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ protected: int nextResult(bool fetchAllowed = true, bool forceSend = false); virtual void release(); void closeScan(bool forceSend = false); void closeScan(bool forceSend = false, bool releaseOp = false); int close_impl(class TransporterFacade*, bool forceSend = false); // Overloaded methods from NdbCursorOperation Loading
ndb/src/ndbapi/NdbConnection.cpp +31 −0 Original line number Diff line number Diff line Loading @@ -963,6 +963,37 @@ NdbConnection::releaseScanOperations(NdbIndexScanOperation* cursorOp) } }//NdbConnection::releaseScanOperations() /***************************************************************************** void releaseExecutedScanOperation(); Remark: Release scan op when hupp'ed trans closed (save memory) ******************************************************************************/ void NdbConnection::releaseExecutedScanOperation(NdbIndexScanOperation* cursorOp) { DBUG_ENTER("NdbConnection::releaseExecutedScanOperation"); DBUG_PRINT("enter", ("this=0x%x op=0x%x", (UintPtr)this, (UintPtr)cursorOp)) // here is one reason to make op lists doubly linked if (m_firstExecutedScanOp == cursorOp) { m_firstExecutedScanOp = (NdbIndexScanOperation*)cursorOp->theNext; cursorOp->release(); theNdb->releaseScanOperation(cursorOp); } else if (m_firstExecutedScanOp != NULL) { NdbIndexScanOperation* tOp = m_firstExecutedScanOp; while (tOp->theNext != NULL) { if (tOp->theNext == cursorOp) { tOp->theNext = cursorOp->theNext; cursorOp->release(); theNdb->releaseScanOperation(cursorOp); break; } tOp = (NdbIndexScanOperation*)tOp->theNext; } } DBUG_VOID_RETURN; }//NdbConnection::releaseExecutedScanOperation() /***************************************************************************** NdbOperation* getNdbOperation(const char* aTableName); Loading
ndb/src/ndbapi/NdbResultSet.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ int NdbResultSet::nextResult(bool fetchAllowed, bool forceSend) void NdbResultSet::close(bool forceSend) { m_operation->closeScan(forceSend); m_operation->closeScan(forceSend, true); } NdbOperation* Loading
ndb/src/ndbapi/NdbScanOperation.cpp +14 −7 Original line number Diff line number Diff line Loading @@ -674,7 +674,7 @@ NdbScanOperation::doSend(int ProcessorId) return 0; } void NdbScanOperation::closeScan(bool forceSend) void NdbScanOperation::closeScan(bool forceSend, bool releaseOp) { if(m_transConnection){ if(DEBUG_NEXT_RESULT) Loading @@ -691,13 +691,20 @@ void NdbScanOperation::closeScan(bool forceSend) Guard guard(tp->theMutexPtr); close_impl(tp, forceSend); } while(0); theNdbCon->theScanningOp = 0; theNdb->closeTransaction(theNdbCon); } theNdbCon = 0; NdbConnection* tCon = theNdbCon; NdbConnection* tTransCon = m_transConnection; theNdbCon = NULL; m_transConnection = NULL; if (releaseOp && tTransCon) { NdbIndexScanOperation* tOp = (NdbIndexScanOperation*)this; tTransCon->releaseExecutedScanOperation(tOp); } tCon->theScanningOp = 0; theNdb->closeTransaction(tCon); } void Loading