bug#14199 - ndb leak of index opertaions in TC leading to error 288

parent f3f7f071
...@@ -98,6 +98,8 @@ public: ...@@ -98,6 +98,8 @@ public:
StartTcTimer = 2509, StartTcTimer = 2509,
StopTcTimer = 2510, StopTcTimer = 2510,
StartPeriodicTcTimer = 2511, StartPeriodicTcTimer = 2511,
TcStartDumpIndexOpCount = 2512,
TcDumpIndexOpCount = 2513,
CmvmiDumpConnections = 2600, CmvmiDumpConnections = 2600,
CmvmiDumpLongSignalMemory = 2601, CmvmiDumpLongSignalMemory = 2601,
CmvmiSetRestartOnErrorInsert = 2602, CmvmiSetRestartOnErrorInsert = 2602,
......
...@@ -4607,6 +4607,7 @@ void Dbtc::copyApi(Signal* signal) ...@@ -4607,6 +4607,7 @@ void Dbtc::copyApi(Signal* signal)
regTmpApiPtr->commitAckMarker = RNIL; regTmpApiPtr->commitAckMarker = RNIL;
regTmpApiPtr->firstTcConnect = RNIL; regTmpApiPtr->firstTcConnect = RNIL;
regTmpApiPtr->lastTcConnect = RNIL; regTmpApiPtr->lastTcConnect = RNIL;
releaseAllSeizedIndexOperations(regTmpApiPtr);
}//Dbtc::copyApi() }//Dbtc::copyApi()
void Dbtc::unlinkApiConnect(Signal* signal) void Dbtc::unlinkApiConnect(Signal* signal)
...@@ -10134,7 +10135,7 @@ void Dbtc::releaseAbortResources(Signal* signal) ...@@ -10134,7 +10135,7 @@ void Dbtc::releaseAbortResources(Signal* signal)
// apiConnectptr.p->apiConnectstate = CS_CONNECTED; // apiConnectptr.p->apiConnectstate = CS_CONNECTED;
apiConnectptr.p->apiConnectstate = CS_ABORTING; apiConnectptr.p->apiConnectstate = CS_ABORTING;
apiConnectptr.p->abortState = AS_IDLE; apiConnectptr.p->abortState = AS_IDLE;
releaseAllSeizedIndexOperations(apiConnectptr.p);
if(apiConnectptr.p->m_exec_flag || apiConnectptr.p->apiFailState == ZTRUE){ if(apiConnectptr.p->m_exec_flag || apiConnectptr.p->apiFailState == ZTRUE){
jam(); jam();
bool ok = false; bool ok = false;
...@@ -10707,6 +10708,33 @@ Dbtc::execDUMP_STATE_ORD(Signal* signal) ...@@ -10707,6 +10708,33 @@ Dbtc::execDUMP_STATE_ORD(Signal* signal)
signal->theData[0] = TcContinueB::ZTRANS_EVENT_REP; signal->theData[0] = TcContinueB::ZTRANS_EVENT_REP;
sendSignalWithDelay(cownref, GSN_CONTINUEB, signal, 5000, 1); sendSignalWithDelay(cownref, GSN_CONTINUEB, signal, 5000, 1);
} }
if (dumpState->args[0] == DumpStateOrd::TcStartDumpIndexOpCount)
{
static int frequency = 1;
if (signal->getLength() > 1)
frequency = signal->theData[1];
else
if (refToBlock(signal->getSendersBlockRef()) != DBTC)
frequency = 1;
if (frequency)
{
dumpState->args[0] = DumpStateOrd::TcDumpIndexOpCount;
execDUMP_STATE_ORD(signal);
dumpState->args[0] = DumpStateOrd::TcStartDumpIndexOpCount;
Uint32 delay = 1000 * (frequency > 25 ? 25 : frequency);
sendSignalWithDelay(cownref, GSN_DUMP_STATE_ORD, signal, delay, 1);
}
}
if (dumpState->args[0] == DumpStateOrd::TcDumpIndexOpCount)
{
infoEvent("IndexOpCount: pool: %d free: %d",
c_theIndexOperationPool.getSize(),
c_theIndexOperationPool.getNoOfFree());
}
}//Dbtc::execDUMP_STATE_ORD() }//Dbtc::execDUMP_STATE_ORD()
void Dbtc::execSET_VAR_REQ(Signal* signal) void Dbtc::execSET_VAR_REQ(Signal* signal)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment