From: Date: December 15 2008 8:35pm Subject: bzr commit into mysql-5.1 branch (jonas:2779) Bug#41469 List-Archive: http://lists.mysql.com/commits/61701 X-Bug: 41469 Message-Id: <20081215193547.B471F299FB7@perch.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #At file:///home/jonas/src/telco-6.2/ 2779 Jonas Oreland 2008-12-15 ndb - bug#41469 - incorrectly handling of GCP_SAVE during master-node-failure modified: storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp storage/ndb/test/ndbapi/testNodeRestart.cpp storage/ndb/test/run-test/daily-basic-tests.txt === modified file 'storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp' --- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2008-12-08 12:35:55 +0000 +++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2008-12-15 19:35:37 +0000 @@ -5328,6 +5328,12 @@ void Dbdih::startGcpMasterTakeOver(Signa signal->theData[0] = NDB_LE_GCP_TakeoverStarted; sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 1, JBB); + /** + * save own value... + * to be able to check values returned in MASTER_GCPCONF + */ + m_gcp_save.m_master.m_new_gci = m_gcp_save.m_gci; + setLocalNodefailHandling(signal, oldMasterId, NF_GCP_TAKE_OVER); }//Dbdih::handleNewMaster() @@ -5628,6 +5634,17 @@ void Dbdih::execMASTER_GCPCONF(Signal* s ndbassert(ok); // Unhandled case... ok = false; + /** + * GCI should differ with atmost one + */ + ndbrequire(saveGCI == m_gcp_save.m_gci || + saveGCI == m_gcp_save.m_gci + 1 || + saveGCI + 1 == m_gcp_save.m_gci); + if (saveGCI > m_gcp_save.m_master.m_new_gci) + { + jam(); + m_gcp_save.m_master.m_new_gci = saveGCI; + } switch(saveState){ case MasterGCPConf::GCP_SAVE_IDLE: jam(); @@ -5742,7 +5759,6 @@ void Dbdih::MASTER_GCPhandling(Signal* s else { ok = false; - m_gcp_save.m_master.m_new_gci = m_gcp_save.m_gci; switch(m_gcp_save.m_master.m_state){ case GcpSave::GCP_SAVE_IDLE: jam(); @@ -8510,6 +8526,21 @@ void Dbdih::execGCP_NODEFINISH(Signal* s sendSignalWithDelay(CMVMI_REF, GSN_NDB_TAMPER, signal, 1000, 1); return; } + else if (ERROR_INSERTED(7216)) + { + infoEvent("GCP_SAVE all/%u", c_error_insert_extra); + NodeRecordPtr nodePtr; + nodePtr.i = c_error_insert_extra; + ptrAss(nodePtr, nodeRecord); + + removeAlive(nodePtr); + sendLoopMacro(GCP_SAVEREQ, sendGCP_SAVEREQ); + insertAlive(nodePtr); + signal->theData[0] = 9999; + sendSignalWithDelay(CMVMI_REF, GSN_NDB_TAMPER, signal, 1000, 1); + c_GCP_SAVEREQ_Counter.setWaitingFor(c_error_insert_extra); + return; + } #endif sendLoopMacro(GCP_SAVEREQ, sendGCP_SAVEREQ); @@ -15605,6 +15636,12 @@ Dbdih::execDUMP_STATE_ORD(Signal* signal SET_ERROR_INSERT_VALUE2(7214, signal->theData[1]); return; } + + DECLARE_DUMP0(DBDIH, 7216, "Set error 7216 with extra arg") + { + SET_ERROR_INSERT_VALUE2(7216, signal->theData[1]); + return; + } }//Dbdih::execDUMP_STATE_ORD() void === modified file 'storage/ndb/test/ndbapi/testNodeRestart.cpp' --- a/storage/ndb/test/ndbapi/testNodeRestart.cpp 2008-12-08 12:35:55 +0000 +++ b/storage/ndb/test/ndbapi/testNodeRestart.cpp 2008-12-15 19:35:37 +0000 @@ -3117,6 +3117,46 @@ runBug41295(NDBT_Context* ctx, NDBT_Step return NDBT_OK; } +int +runBug41469(NDBT_Context* ctx, NDBT_Step* step) +{ + NdbRestarter res; + + if (res.getNumDbNodes() < 4) + { + ctx->stopTest(); + return NDBT_OK; + } + + int loops = ctx->getNumLoops(); + + int val0[] = { 7216, 0 }; + int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 }; + for (int i = 0; istopTest(); + return NDBT_OK; +} + NDBT_TESTSUITE(testNodeRestart); TESTCASE("NoLoad", "Test that one node at a time can be stopped and then restarted "\ @@ -3564,6 +3604,12 @@ TESTCASE("Bug41295", "") STEP(runBug41295); FINALIZER(runClearTable); } +TESTCASE("Bug41469", ""){ + INITIALIZER(runLoadTable); + STEP(runBug41469); + STEP(runScanUpdateUntilStopped); + FINALIZER(runClearTable); +} NDBT_TESTSUITE_END(testNodeRestart); int main(int argc, const char** argv){ === modified file 'storage/ndb/test/run-test/daily-basic-tests.txt' --- a/storage/ndb/test/run-test/daily-basic-tests.txt 2008-12-08 12:35:55 +0000 +++ b/storage/ndb/test/run-test/daily-basic-tests.txt 2008-12-15 19:35:37 +0000 @@ -990,6 +990,10 @@ max-time: 5000 cmd: testNodeRestart args: -n GCP T1 +max-time: 1200 +cmd: testNodeRestart +args: -n Bug41469 T1 + max-time: 180 cmd: testIndex args: -n Bug28804 T1 T6