Loading ndb/include/ndbapi/NdbConnection.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -449,6 +449,8 @@ public: NdbIndexScanOperation* getNdbIndexScanOperation(const NdbDictionary::Index * index, const NdbDictionary::Table * table); Uint32 getConnectedNodeId(); // Get Connected node id private: /** * Release completed operations Loading Loading @@ -480,7 +482,6 @@ private: */ void setConnectedNodeId( Uint32 nodeId, Uint32 sequence); Uint32 getConnectedNodeId(); // Get Connected node id void setMyBlockReference( int ); // Set my block refrerence void setTC_ConnectPtr( Uint32 ); // Sets TC Connect pointer int getTC_ConnectPtr(); // Gets TC Connect pointer Loading ndb/src/kernel/blocks/dbtc/DbtcMain.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -5194,6 +5194,7 @@ void Dbtc::execTC_COMMITREQ(Signal* signal) const Uint32 transId2 = regApiPtr->transid[1]; Uint32 errorCode = 0; regApiPtr->m_exec_flag = 1; switch (regApiPtr->apiConnectstate) { case CS_STARTED: tcConnectptr.i = regApiPtr->firstTcConnect; Loading ndb/test/ndbapi/testNodeRestart.cpp +71 −0 Original line number Diff line number Diff line Loading @@ -344,6 +344,71 @@ int runDirtyRead(NDBT_Context* ctx, NDBT_Step* step){ return NDBT_FAILED; } int runLateCommit(NDBT_Context* ctx, NDBT_Step* step){ int result = NDBT_OK; int loops = ctx->getNumLoops(); int records = ctx->getNumRecords(); NdbRestarter restarter; HugoOperations hugoOps(*ctx->getTab()); Ndb* pNdb = GETNDB(step); int i = 0; while(i<loops && result != NDBT_FAILED && !ctx->isTestStopped()){ g_info << i << ": "; if(hugoOps.startTransaction(pNdb) != 0) return NDBT_FAILED; if(hugoOps.pkUpdateRecord(pNdb, 1) != 0) return NDBT_FAILED; if(hugoOps.execute_NoCommit(pNdb) != 0) return NDBT_FAILED; Uint32 transNode= hugoOps.getTransaction()->getConnectedNodeId(); int id = i % restarter.getNumDbNodes(); int nodeId; while((nodeId = restarter.getDbNodeId(id)) == transNode) id = (id + 1) % restarter.getNumDbNodes(); ndbout << "Restart node " << nodeId << endl; restarter.restartOneDbNode(nodeId, /** initial */ false, /** nostart */ true, /** abort */ true); restarter.waitNodesNoStart(&nodeId, 1); int res; if(i & 1) res= hugoOps.execute_Commit(pNdb); else res= hugoOps.execute_Rollback(pNdb); ndbout_c("res= %d", res); hugoOps.closeTransaction(pNdb); restarter.startNodes(&nodeId, 1); restarter.waitNodesStarted(&nodeId, 1); if(i & 1) { if(res != 286) return NDBT_FAILED; } else { if(res != 0) return NDBT_FAILED; } i++; } return NDBT_OK; } NDBT_TESTSUITE(testNodeRestart); TESTCASE("NoLoad", "Test that one node at a time can be stopped and then restarted "\ Loading Loading @@ -600,6 +665,12 @@ TESTCASE("CommittedRead", STEP(runDirtyRead); FINALIZER(runClearTable); } TESTCASE("LateCommit", "Test commit after node failure"){ INITIALIZER(runLoadTable); STEP(runLateCommit); FINALIZER(runClearTable); } NDBT_TESTSUITE_END(testNodeRestart); int main(int argc, const char** argv){ Loading ndb/test/run-test/daily-devel-tests.txt +4 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,10 @@ max-time: 2500 cmd: testNodeRestart args: -n CommittedRead T1 max-time: 2500 cmd: testNodeRestart args: -n LateCommit T1 max-time: 2500 cmd: testNodeRestart args: -n Terror T6 T13 Loading Loading
ndb/include/ndbapi/NdbConnection.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -449,6 +449,8 @@ public: NdbIndexScanOperation* getNdbIndexScanOperation(const NdbDictionary::Index * index, const NdbDictionary::Table * table); Uint32 getConnectedNodeId(); // Get Connected node id private: /** * Release completed operations Loading Loading @@ -480,7 +482,6 @@ private: */ void setConnectedNodeId( Uint32 nodeId, Uint32 sequence); Uint32 getConnectedNodeId(); // Get Connected node id void setMyBlockReference( int ); // Set my block refrerence void setTC_ConnectPtr( Uint32 ); // Sets TC Connect pointer int getTC_ConnectPtr(); // Gets TC Connect pointer Loading
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -5194,6 +5194,7 @@ void Dbtc::execTC_COMMITREQ(Signal* signal) const Uint32 transId2 = regApiPtr->transid[1]; Uint32 errorCode = 0; regApiPtr->m_exec_flag = 1; switch (regApiPtr->apiConnectstate) { case CS_STARTED: tcConnectptr.i = regApiPtr->firstTcConnect; Loading
ndb/test/ndbapi/testNodeRestart.cpp +71 −0 Original line number Diff line number Diff line Loading @@ -344,6 +344,71 @@ int runDirtyRead(NDBT_Context* ctx, NDBT_Step* step){ return NDBT_FAILED; } int runLateCommit(NDBT_Context* ctx, NDBT_Step* step){ int result = NDBT_OK; int loops = ctx->getNumLoops(); int records = ctx->getNumRecords(); NdbRestarter restarter; HugoOperations hugoOps(*ctx->getTab()); Ndb* pNdb = GETNDB(step); int i = 0; while(i<loops && result != NDBT_FAILED && !ctx->isTestStopped()){ g_info << i << ": "; if(hugoOps.startTransaction(pNdb) != 0) return NDBT_FAILED; if(hugoOps.pkUpdateRecord(pNdb, 1) != 0) return NDBT_FAILED; if(hugoOps.execute_NoCommit(pNdb) != 0) return NDBT_FAILED; Uint32 transNode= hugoOps.getTransaction()->getConnectedNodeId(); int id = i % restarter.getNumDbNodes(); int nodeId; while((nodeId = restarter.getDbNodeId(id)) == transNode) id = (id + 1) % restarter.getNumDbNodes(); ndbout << "Restart node " << nodeId << endl; restarter.restartOneDbNode(nodeId, /** initial */ false, /** nostart */ true, /** abort */ true); restarter.waitNodesNoStart(&nodeId, 1); int res; if(i & 1) res= hugoOps.execute_Commit(pNdb); else res= hugoOps.execute_Rollback(pNdb); ndbout_c("res= %d", res); hugoOps.closeTransaction(pNdb); restarter.startNodes(&nodeId, 1); restarter.waitNodesStarted(&nodeId, 1); if(i & 1) { if(res != 286) return NDBT_FAILED; } else { if(res != 0) return NDBT_FAILED; } i++; } return NDBT_OK; } NDBT_TESTSUITE(testNodeRestart); TESTCASE("NoLoad", "Test that one node at a time can be stopped and then restarted "\ Loading Loading @@ -600,6 +665,12 @@ TESTCASE("CommittedRead", STEP(runDirtyRead); FINALIZER(runClearTable); } TESTCASE("LateCommit", "Test commit after node failure"){ INITIALIZER(runLoadTable); STEP(runLateCommit); FINALIZER(runClearTable); } NDBT_TESTSUITE_END(testNodeRestart); int main(int argc, const char** argv){ Loading
ndb/test/run-test/daily-devel-tests.txt +4 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,10 @@ max-time: 2500 cmd: testNodeRestart args: -n CommittedRead T1 max-time: 2500 cmd: testNodeRestart args: -n LateCommit T1 max-time: 2500 cmd: testNodeRestart args: -n Terror T6 T13 Loading