mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
ndb - bug#20185
Fix race in testprg...causing random TC crashes
This commit is contained in:
@ -7099,20 +7099,15 @@ Dbtc::nodeFailCheckTransactions(Signal* signal,
|
|||||||
for (transPtr.i = transPtrI; transPtr.i < capiConnectFilesize; transPtr.i++)
|
for (transPtr.i = transPtrI; transPtr.i < capiConnectFilesize; transPtr.i++)
|
||||||
{
|
{
|
||||||
ptrCheckGuard(transPtr, capiConnectFilesize, apiConnectRecord);
|
ptrCheckGuard(transPtr, capiConnectFilesize, apiConnectRecord);
|
||||||
Uint32 state = transPtr.p->apiConnectstate;
|
|
||||||
if (transPtr.p->m_transaction_nodes.get(failedNodeId))
|
if (transPtr.p->m_transaction_nodes.get(failedNodeId))
|
||||||
{
|
{
|
||||||
jam();
|
jam();
|
||||||
|
|
||||||
// avoid assertion in timeoutfoundlab
|
// Force timeout regardless of state
|
||||||
if (state != CS_PREPARE_TO_COMMIT)
|
c_appl_timeout_value = 1;
|
||||||
{
|
setApiConTimer(transPtr.i, TtcTimer - 2, __LINE__);
|
||||||
// Force timeout regardless of state
|
timeOutFoundLab(signal, transPtr.i, ZNODEFAIL_BEFORE_COMMIT);
|
||||||
c_appl_timeout_value = 1;
|
c_appl_timeout_value = TapplTimeout;
|
||||||
setApiConTimer(transPtr.i, TtcTimer - 2, __LINE__);
|
|
||||||
timeOutFoundLab(signal, transPtr.i, ZNODEFAIL_BEFORE_COMMIT);
|
|
||||||
c_appl_timeout_value = TapplTimeout;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send CONTINUEB to continue later
|
// Send CONTINUEB to continue later
|
||||||
|
@ -887,6 +887,9 @@ int runBug20185(NDBT_Context* ctx, NDBT_Step* step){
|
|||||||
return NDBT_FAILED;
|
return NDBT_FAILED;
|
||||||
|
|
||||||
NdbSleep_MilliSleep(3000);
|
NdbSleep_MilliSleep(3000);
|
||||||
|
Vector<int> nodes;
|
||||||
|
for (Uint32 i = 0; i<restarter.getNumDbNodes(); i++)
|
||||||
|
nodes.push_back(restarter.getDbNodeId(i));
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
if(hugoOps.startTransaction(pNdb) != 0)
|
if(hugoOps.startTransaction(pNdb) != 0)
|
||||||
@ -910,11 +913,16 @@ retry:
|
|||||||
nodeId = restarter.getDbNodeId(rand() % restarter.getNumDbNodes());
|
nodeId = restarter.getDbNodeId(rand() % restarter.getNumDbNodes());
|
||||||
} while (nodeId == node);
|
} while (nodeId == node);
|
||||||
|
|
||||||
if (restarter.insertErrorInAllNodes(7030))
|
ndbout_c("7031 to %d", nodeId);
|
||||||
return NDBT_FAILED;
|
|
||||||
|
|
||||||
if (restarter.insertErrorInNode(nodeId, 7031))
|
if (restarter.insertErrorInNode(nodeId, 7031))
|
||||||
return NDBT_FAILED;
|
return NDBT_FAILED;
|
||||||
|
|
||||||
|
for (Uint32 i = 0; i<nodes.size(); i++)
|
||||||
|
{
|
||||||
|
if (nodes[i] != nodeId)
|
||||||
|
if (restarter.insertErrorInNode(nodes[i], 7030))
|
||||||
|
return NDBT_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
NdbSleep_MilliSleep(500);
|
NdbSleep_MilliSleep(500);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user