From b950160a467000340d7a3a55abcc8e6a3c35081d Mon Sep 17 00:00:00 2001 From: "jonas@perch.ndb.mysql.com" <> Date: Wed, 21 Mar 2007 15:34:47 +0100 Subject: [PATCH 1/2] ndb - bug#27283 Additional fix for 2-node case --- ndb/src/kernel/blocks/dbdih/Dbdih.hpp | 2 ++ ndb/src/kernel/blocks/dbdih/DbdihMain.cpp | 7 ++++++- ndb/src/kernel/blocks/dbtc/Dbtc.hpp | 3 +++ ndb/src/kernel/blocks/dbtc/DbtcMain.cpp | 2 ++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ndb/src/kernel/blocks/dbdih/Dbdih.hpp b/ndb/src/kernel/blocks/dbdih/Dbdih.hpp index 41240a2d620..97c123ae3f4 100644 --- a/ndb/src/kernel/blocks/dbdih/Dbdih.hpp +++ b/ndb/src/kernel/blocks/dbdih/Dbdih.hpp @@ -1628,6 +1628,8 @@ private: // NR Uint32 c_dictLockSlavePtrI_nodeRestart; // userPtr for NR void recvDictLockConf_nodeRestart(Signal* signal, Uint32 data, Uint32 ret); + + Uint32 c_error_7181_ref; }; #if (DIH_CDATA_SIZE < _SYSFILE_SIZE32) diff --git a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp index 30749cb5a05..967c00ea50f 100644 --- a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp +++ b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp @@ -4816,6 +4816,7 @@ void Dbdih::execMASTER_GCPREQ(Signal* signal) { ndbout_c("execGCP_TCFINISHED in MASTER_GCPREQ"); CLEAR_ERROR_INSERT_VALUE; + signal->theData[0] = c_error_7181_ref; signal->theData[1] = coldgcp; execGCP_TCFINISHED(signal); } @@ -4891,6 +4892,7 @@ void Dbdih::execMASTER_GCPREQ(Signal* signal) { ndbout_c("execGCP_TCFINISHED in MASTER_GCPREQ"); CLEAR_ERROR_INSERT_VALUE; + signal->theData[0] = c_error_7181_ref; signal->theData[1] = coldgcp; execGCP_TCFINISHED(signal); } @@ -7697,6 +7699,7 @@ void Dbdih::execGCP_COMMIT(Signal* signal) cgckptflag = false; emptyverificbuffer(signal, true); cgcpParticipantState = GCP_PARTICIPANT_COMMIT_RECEIVED; + signal->theData[0] = calcDihBlockRef(masterNodeId); signal->theData[1] = coldgcp; sendSignal(clocaltcblockref, GSN_GCP_NOMORETRANS, signal, 2, JBB); return; @@ -7706,11 +7709,13 @@ void Dbdih::execGCP_TCFINISHED(Signal* signal) { jamEntry(); CRASH_INSERTION(7007); + Uint32 retRef = signal->theData[0]; Uint32 gci = signal->theData[1]; ndbrequire(gci == coldgcp); if (ERROR_INSERTED(7181) || ERROR_INSERTED(7182)) { + c_error_7181_ref = retRef; // Save ref ndbout_c("killing %d", refToNode(cmasterdihref)); signal->theData[0] = 9999; sendSignal(numberToRef(CMVMI, refToNode(cmasterdihref)), @@ -7722,7 +7727,7 @@ void Dbdih::execGCP_TCFINISHED(Signal* signal) signal->theData[0] = cownNodeId; signal->theData[1] = coldgcp; signal->theData[2] = cfailurenr; - sendSignal(cmasterdihref, GSN_GCP_NODEFINISH, signal, 3, JBB); + sendSignal(retRef, GSN_GCP_NODEFINISH, signal, 3, JBB); }//Dbdih::execGCP_TCFINISHED() /*****************************************************************************/ diff --git a/ndb/src/kernel/blocks/dbtc/Dbtc.hpp b/ndb/src/kernel/blocks/dbtc/Dbtc.hpp index 792586d7baf..1e8fcee759c 100644 --- a/ndb/src/kernel/blocks/dbtc/Dbtc.hpp +++ b/ndb/src/kernel/blocks/dbtc/Dbtc.hpp @@ -1952,5 +1952,8 @@ private: // those variables should be removed and exchanged for stack // variable communication. /**************************************************************************/ + + Uint32 c_gcp_ref; }; + #endif diff --git a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp index 9f1426109d4..1185b790bdd 100644 --- a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp +++ b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp @@ -6894,6 +6894,7 @@ void Dbtc::timeOutFoundFragLab(Signal* signal, UintR TscanConPtr) void Dbtc::execGCP_NOMORETRANS(Signal* signal) { jamEntry(); + c_gcp_ref = signal->theData[0]; tcheckGcpId = signal->theData[1]; if (cfirstgcp != RNIL) { jam(); @@ -9937,6 +9938,7 @@ void Dbtc::sendScanTabConf(Signal* signal, ScanRecordPtr scanPtr) { void Dbtc::gcpTcfinished(Signal* signal) { + signal->theData[0] = c_gcp_ref; signal->theData[1] = tcheckGcpId; sendSignal(cdihblockref, GSN_GCP_TCFINISHED, signal, 2, JBB); }//Dbtc::gcpTcfinished() From 702b5dad63ce25f721d9e7963fe75fb82372358a Mon Sep 17 00:00:00 2001 From: "jonas@perch.ndb.mysql.com" <> Date: Thu, 22 Mar 2007 11:12:18 +0100 Subject: [PATCH 2/2] ndb - fix test prg --- ndb/test/ndbapi/testNodeRestart.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ndb/test/ndbapi/testNodeRestart.cpp b/ndb/test/ndbapi/testNodeRestart.cpp index dfb48ea3657..c0bc8b7747c 100644 --- a/ndb/test/ndbapi/testNodeRestart.cpp +++ b/ndb/test/ndbapi/testNodeRestart.cpp @@ -1161,7 +1161,7 @@ runBug27003(NDBT_Context* ctx, NDBT_Step* step) return NDBT_FAILED; res.startNodes(&node, 1); - res.waitNodesStartPhase(&node, 1, 2); + NdbSleep_SecSleep(3); pos++; } pos = 0;