diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp index cb5e3b3c821..a4d66a6c6d2 100644 --- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp +++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp @@ -682,7 +682,7 @@ NdbDictInterface::~NdbDictInterface() { if (m_transporter != NULL){ if (m_blockNumber != -1) - m_transporter->close(m_blockNumber); + m_transporter->close(m_blockNumber, 0); } } diff --git a/ndb/src/ndbapi/Ndbif.cpp b/ndb/src/ndbapi/Ndbif.cpp index 7ad37401b9a..7ad51efdb62 100644 --- a/ndb/src/ndbapi/Ndbif.cpp +++ b/ndb/src/ndbapi/Ndbif.cpp @@ -97,7 +97,7 @@ Ndb::init(int aMaxNoOfTransactions) } theFirstTransId = ((Uint64)theNdbBlockNumber << 52)+((Uint64)theNode << 40); - theFirstTransId += theFacade->m_open_count; + theFirstTransId += theFacade->m_max_trans_id; theFacade->unlock_mutex(); @@ -175,7 +175,7 @@ error_handler: freeOperation(); delete theDictionary; - TransporterFacade::instance()->close(theNdbBlockNumber); + TransporterFacade::instance()->close(theNdbBlockNumber, 0); return -1; } diff --git a/ndb/src/ndbapi/Ndbinit.cpp b/ndb/src/ndbapi/Ndbinit.cpp index be168ddffbe..b09696d5262 100644 --- a/ndb/src/ndbapi/Ndbinit.cpp +++ b/ndb/src/ndbapi/Ndbinit.cpp @@ -195,9 +195,9 @@ Ndb::~Ndb() NdbGlobalEventBuffer_drop(theGlobalEventBufferHandle); if (TransporterFacade::instance() != NULL && theNdbBlockNumber > 0){ - TransporterFacade::instance()->close(theNdbBlockNumber); + TransporterFacade::instance()->close(theNdbBlockNumber, theFirstTransId); } - + NdbMutex_Lock(&createNdbMutex); theNoOfNdbObjects -= 1; diff --git a/ndb/src/ndbapi/TransporterFacade.cpp b/ndb/src/ndbapi/TransporterFacade.cpp index 7ec9a6a55a3..71b0ff02cd9 100644 --- a/ndb/src/ndbapi/TransporterFacade.cpp +++ b/ndb/src/ndbapi/TransporterFacade.cpp @@ -548,7 +548,7 @@ TransporterFacade::TransporterFacade() : theClusterMgr = NULL; theArbitMgr = NULL; theStartNodeId = 1; - m_open_count = 0; + m_max_trans_id = 0; } bool @@ -684,9 +684,11 @@ TransporterFacade::ReportNodeAlive(NodeId tNodeId) } int -TransporterFacade::close(BlockNumber blockNumber) +TransporterFacade::close(BlockNumber blockNumber, Uint64 trans_id) { NdbMutex_Lock(theMutexPtr); + Uint32 low_bits = (Uint32)trans_id; + m_max_trans_id = m_max_trans_id > low_bits ? m_max_trans_id : low_bits; close_local(blockNumber); NdbMutex_Unlock(theMutexPtr); return 0; @@ -703,7 +705,6 @@ TransporterFacade::open(void* objRef, ExecuteFunction fun, NodeStatusFunction statusFun) { - m_open_count++; return m_threads.open(objRef, fun, statusFun); } diff --git a/ndb/src/ndbapi/TransporterFacade.hpp b/ndb/src/ndbapi/TransporterFacade.hpp index 14da4b11aa1..4dee45a1d1c 100644 --- a/ndb/src/ndbapi/TransporterFacade.hpp +++ b/ndb/src/ndbapi/TransporterFacade.hpp @@ -67,7 +67,7 @@ public: int open(void* objRef, ExecuteFunction, NodeStatusFunction); // Close this block number - int close(BlockNumber blockNumber); + int close(BlockNumber blockNumber, Uint64 trans_id); // Only sends to nodes which are alive int sendSignal(NdbApiSignal * signal, NodeId nodeId); @@ -210,9 +210,9 @@ private: return (m_statusNext[index] & (1 << 16)) != 0; } } m_threads; - - Uint32 m_open_count; - + + Uint32 m_max_trans_id; + /** * execute function */