Commit e6585a2a authored by unknown's avatar unknown
Browse files

Merge perch.ndb.mysql.com:/home/jonas/src/51-telco-gca

into  perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb


storage/ndb/src/kernel/blocks/ERROR_codes.txt:
  Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Auto merged
storage/ndb/src/mgmsrv/ConfigInfo.cpp:
  Auto merged
storage/ndb/test/ndbapi/testNodeRestart.cpp:
  merge
storage/ndb/test/run-test/daily-basic-tests.txt:
  merge
parents 5948a569 d0942af8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ Next DBACC 3002
Next DBTUP 4029
Next DBLQH 5045
Next DBDICT 6007
Next DBDIH 7181
Next DBDIH 7183
Next DBTC 8039
Next CMVMI 9000
Next BACKUP 10038
+29 −3
Original line number Diff line number Diff line
@@ -5096,6 +5096,15 @@ void Dbdih::execMASTER_GCPREQ(Signal* signal)
  } else {
    ndbrequire(failedNodePtr.p->nodeStatus == NodeRecord::DYING);
  }//if
  if (ERROR_INSERTED(7181))
  {
    ndbout_c("execGCP_TCFINISHED in MASTER_GCPREQ");
    CLEAR_ERROR_INSERT_VALUE;
    signal->theData[1] = coldgcp;
    execGCP_TCFINISHED(signal);
  }
  
  MasterGCPConf::State gcpState;
  switch (cgcpParticipantState) {
  case GCP_PARTICIPANT_READY:
@@ -5162,6 +5171,14 @@ void Dbdih::execMASTER_GCPREQ(Signal* signal)
    masterGCPConf->lcpActive[i] = SYSFILE->lcpActive[i];
  sendSignal(newMasterBlockref, GSN_MASTER_GCPCONF, signal, 
             MasterGCPConf::SignalLength, JBB);
  if (ERROR_INSERTED(7182))
  {
    ndbout_c("execGCP_TCFINISHED in MASTER_GCPREQ");
    CLEAR_ERROR_INSERT_VALUE;
    signal->theData[1] = coldgcp;
    execGCP_TCFINISHED(signal);
  }
}//Dbdih::execMASTER_GCPREQ()
void Dbdih::execMASTER_GCPCONF(Signal* signal) 
@@ -7923,10 +7940,10 @@ void Dbdih::execGCP_NODEFINISH(Signal* signal)
  } else if (cmasterState == MASTER_TAKE_OVER_GCP) {
    jam();
    //-------------------------------------------------------------
    // We are currently taking over as master. We will delay the
    // signal until we have completed the take over gcp handling.
    // We are currently taking over as master. Ignore
    // signal in this case since we will discover it in reception of 
    // MASTER_GCPCONF.
    //-------------------------------------------------------------
    sendSignalWithDelay(reference(), GSN_GCP_NODEFINISH, signal, 20, 3);
    return;
  } else {
    ndbrequire(cmasterState == MASTER_ACTIVE);
@@ -8073,6 +8090,15 @@ void Dbdih::execGCP_TCFINISHED(Signal* signal)
  Uint32 gci = signal->theData[1];
  ndbrequire(gci == coldgcp);
  if (ERROR_INSERTED(7181) || ERROR_INSERTED(7182))
  {
    ndbout_c("killing %d", refToNode(cmasterdihref));
    signal->theData[0] = 9999;
    sendSignal(numberToRef(CMVMI, refToNode(cmasterdihref)),
	       GSN_NDB_TAMPER, signal, 1, JBB);
    return;
  }
  cgcpParticipantState = GCP_PARTICIPANT_TC_FINISHED;
  signal->theData[0] = cownNodeId;
  signal->theData[1] = coldgcp;
+1 −1
Original line number Diff line number Diff line
@@ -556,7 +556,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
    true,
    ConfigInfo::CI_INT,
    "0",
    "1",
    "0",
    "2" },

  {
+46 −0
Original line number Diff line number Diff line
@@ -1475,6 +1475,49 @@ runBug27003(NDBT_Context* ctx, NDBT_Step* step)
  return NDBT_OK;
}


int
runBug27283(NDBT_Context* ctx, NDBT_Step* step)
{
  int result = NDBT_OK;
  int loops = ctx->getNumLoops();
  int records = ctx->getNumRecords();
  NdbRestarter res;

  if (res.getNumDbNodes() < 2)
  {
    return NDBT_OK;
  }

  static const int errnos[] = { 7181, 7182, 0 };
  
  Uint32 pos = 0;
  for (Uint32 i = 0; i<loops; i++)
  {
    while (errnos[pos] != 0)
    {
      int master = res.getMasterNodeId();
      int next = res.getNextMasterNodeId(master);
      int next2 = res.getNextMasterNodeId(next);
      
      int node = (i & 1) ? next : next2;
      ndbout_c("Tesing err: %d", errnos[pos]);
      if (res.insertErrorInNode(next, errnos[pos]))
	return NDBT_FAILED;

      NdbSleep_SecSleep(3);
      
      if (res.waitClusterStarted())
	return NDBT_FAILED;
      
      pos++;
    }
    pos = 0;
  }
  
  return NDBT_OK;
}

NDBT_TESTSUITE(testNodeRestart);
TESTCASE("NoLoad", 
	 "Test that one node at a time can be stopped and then restarted "\
@@ -1826,6 +1869,9 @@ TESTCASE("Bug26450", ""){
TESTCASE("Bug27003", ""){
  INITIALIZER(runBug27003);
}
TESTCASE("Bug27283", ""){
  INITIALIZER(runBug27283);
}
NDBT_TESTSUITE_END(testNodeRestart);

int main(int argc, const char** argv){
+4 −0
Original line number Diff line number Diff line
@@ -473,6 +473,10 @@ max-time: 1000
cmd: testNodeRestart
args: -n Bug27003 T1

max-time: 1000
cmd: testNodeRestart
args: -n Bug27283 T1

max-time: 500
cmd: testNodeRestart
args: -n Bug15587 T1