Loading ndb/src/kernel/blocks/dbdih/DbdihMain.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -8338,6 +8338,7 @@ Dbdih::resetReplicaSr(TabRecordPtr tabPtr){ } replicaPtr.i = nextReplicaPtrI; }//while updateNodeInfo(fragPtr); } } Loading ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -2036,6 +2036,11 @@ void Ndbcntr::execSET_VAR_REQ(Signal* signal) { void Ndbcntr::updateNodeState(Signal* signal, const NodeState& newState) const{ NodeStateRep * const stateRep = (NodeStateRep *)&signal->theData[0]; if (newState.startLevel == NodeState::SL_STARTED) { CRASH_INSERTION(1000); } stateRep->nodeState = newState; stateRep->nodeState.masterNodeId = cmasterNodeId; stateRep->nodeState.setNodeGroup(c_nodeGroup); Loading ndb/test/ndbapi/testSystemRestart.cpp +47 −0 Original line number Diff line number Diff line Loading @@ -1121,6 +1121,46 @@ int runClearTable(NDBT_Context* ctx, NDBT_Step* step){ return NDBT_OK; } int runBug21536(NDBT_Context* ctx, NDBT_Step* step) { NdbRestarter restarter; const Uint32 nodeCount = restarter.getNumDbNodes(); if(nodeCount != 2){ g_info << "Bug21536 - 2 nodes to test" << endl; return NDBT_OK; } int node1 = restarter.getDbNodeId(rand() % nodeCount); int node2 = restarter.getRandomNodeSameNodeGroup(node1, rand()); if (node1 == -1 || node2 == -1) return NDBT_OK; int result = NDBT_OK; do { CHECK(restarter.restartOneDbNode(node1, false, true, true) == 0); CHECK(restarter.waitNodesNoStart(&node1, 1) == 0); CHECK(restarter.insertErrorInNode(node1, 1000) == 0); int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 }; CHECK(restarter.dumpStateOneNode(node1, val2, 2) == 0); CHECK(restarter.startNodes(&node1, 1) == 0); restarter.waitNodesStartPhase(&node1, 1, 3, 120); CHECK(restarter.waitNodesNoStart(&node1, 1) == 0); CHECK(restarter.restartOneDbNode(node2, true, true, true) == 0); CHECK(restarter.waitNodesNoStart(&node2, 1) == 0); CHECK(restarter.startNodes(&node1, 1) == 0); CHECK(restarter.waitNodesStarted(&node1, 1) == 0); CHECK(restarter.startNodes(&node2, 1) == 0); CHECK(restarter.waitClusterStarted() == 0); } while(0); g_info << "Bug21536 finished" << endl; return result; } NDBT_TESTSUITE(testSystemRestart); TESTCASE("SR1", Loading Loading @@ -1287,6 +1327,13 @@ TESTCASE("Bug18385", STEP(runBug18385); FINALIZER(runClearTable); } TESTCASE("Bug21536", "Perform partition system restart with other nodes with higher GCI"){ INITIALIZER(runWaitStarted); INITIALIZER(runClearTable); STEP(runBug21536); FINALIZER(runClearTable); } NDBT_TESTSUITE_END(testSystemRestart); int main(int argc, const char** argv){ Loading Loading
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -8338,6 +8338,7 @@ Dbdih::resetReplicaSr(TabRecordPtr tabPtr){ } replicaPtr.i = nextReplicaPtrI; }//while updateNodeInfo(fragPtr); } } Loading
ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -2036,6 +2036,11 @@ void Ndbcntr::execSET_VAR_REQ(Signal* signal) { void Ndbcntr::updateNodeState(Signal* signal, const NodeState& newState) const{ NodeStateRep * const stateRep = (NodeStateRep *)&signal->theData[0]; if (newState.startLevel == NodeState::SL_STARTED) { CRASH_INSERTION(1000); } stateRep->nodeState = newState; stateRep->nodeState.masterNodeId = cmasterNodeId; stateRep->nodeState.setNodeGroup(c_nodeGroup); Loading
ndb/test/ndbapi/testSystemRestart.cpp +47 −0 Original line number Diff line number Diff line Loading @@ -1121,6 +1121,46 @@ int runClearTable(NDBT_Context* ctx, NDBT_Step* step){ return NDBT_OK; } int runBug21536(NDBT_Context* ctx, NDBT_Step* step) { NdbRestarter restarter; const Uint32 nodeCount = restarter.getNumDbNodes(); if(nodeCount != 2){ g_info << "Bug21536 - 2 nodes to test" << endl; return NDBT_OK; } int node1 = restarter.getDbNodeId(rand() % nodeCount); int node2 = restarter.getRandomNodeSameNodeGroup(node1, rand()); if (node1 == -1 || node2 == -1) return NDBT_OK; int result = NDBT_OK; do { CHECK(restarter.restartOneDbNode(node1, false, true, true) == 0); CHECK(restarter.waitNodesNoStart(&node1, 1) == 0); CHECK(restarter.insertErrorInNode(node1, 1000) == 0); int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 }; CHECK(restarter.dumpStateOneNode(node1, val2, 2) == 0); CHECK(restarter.startNodes(&node1, 1) == 0); restarter.waitNodesStartPhase(&node1, 1, 3, 120); CHECK(restarter.waitNodesNoStart(&node1, 1) == 0); CHECK(restarter.restartOneDbNode(node2, true, true, true) == 0); CHECK(restarter.waitNodesNoStart(&node2, 1) == 0); CHECK(restarter.startNodes(&node1, 1) == 0); CHECK(restarter.waitNodesStarted(&node1, 1) == 0); CHECK(restarter.startNodes(&node2, 1) == 0); CHECK(restarter.waitClusterStarted() == 0); } while(0); g_info << "Bug21536 finished" << endl; return result; } NDBT_TESTSUITE(testSystemRestart); TESTCASE("SR1", Loading Loading @@ -1287,6 +1327,13 @@ TESTCASE("Bug18385", STEP(runBug18385); FINALIZER(runClearTable); } TESTCASE("Bug21536", "Perform partition system restart with other nodes with higher GCI"){ INITIALIZER(runWaitStarted); INITIALIZER(runClearTable); STEP(runBug21536); FINALIZER(runClearTable); } NDBT_TESTSUITE_END(testSystemRestart); int main(int argc, const char** argv){ Loading