List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:December 15 2008 8:38pm
Subject:bzr commit into mysql-5.1 branch (jonas:2798)
View as plain text  
#At file:///home/jonas/src/telco-6.3/

 2798 Jonas Oreland	2008-12-15 [merge]
      merge 62 to 63
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-12 14:05:37 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp	2008-12-15 19:38:37 +0000
@@ -5115,6 +5115,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()
 
@@ -5366,6 +5372,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();
@@ -5480,7 +5497,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();
@@ -8239,6 +8255,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, RNIL);
+    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, RNIL);
@@ -15357,6 +15388,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 13:39:11 +0000
+++ b/storage/ndb/test/ndbapi/testNodeRestart.cpp	2008-12-15 19:38:37 +0000
@@ -3448,6 +3448,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; i<loops; i++)
+  {
+    int master = res.getMasterNodeId();
+    int next = res.getNextMasterNodeId(master);
+    
+    if (res.dumpStateOneNode(master, val2, 2))
+      return NDBT_FAILED;
+    
+    ndbout_c("stopping %u, err 7216 (next: %u)", master, next);
+    val0[1] = next;
+    if (res.dumpStateOneNode(master, val0, 2))
+      return NDBT_FAILED;
+    
+    res.waitNodesNoStart(&master, 1);
+    res.startNodes(&master, 1);
+    ndbout_c("waiting for cluster started");
+    if (res.waitClusterStarted())
+    {
+      return NDBT_FAILED;
+    }
+  }
+  ctx->stopTest();
+  return NDBT_OK;
+}
+
 NDBT_TESTSUITE(testNodeRestart);
 TESTCASE("NoLoad", 
 	 "Test that one node at a time can be stopped and then restarted "\
@@ -3919,6 +3959,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-09 15:47:14 +0000
+++ b/storage/ndb/test/run-test/daily-basic-tests.txt	2008-12-15 19:38: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

Thread
bzr commit into mysql-5.1 branch (jonas:2798) Jonas Oreland15 Dec