Commit f6c0acde authored by jonas@perch.ndb.mysql.com's avatar jonas@perch.ndb.mysql.com
Browse files

ndb - bug#29364 - "SQL queries hang while data node in start phase 5"

  In TC init node status for already started nodes during node restart
  (not present in 5.1)
parent 2609e057
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -882,6 +882,12 @@ void Dbtc::execREAD_NODESCONF(Signal* signal)
        hostptr.p->hostStatus = HS_ALIVE;
	c_alive_nodes.set(i);
      }//if

      if (NodeBitmask::get(readNodes->startedNodes, i))
      {
        jam();
        hostptr.p->m_nf_bits = HostRecord::NF_STARTED;
      }
    }//if
  }//for
  ndbsttorry010Lab(signal);
@@ -10108,6 +10114,7 @@ void Dbtc::inithost(Signal* signal)
    hostptr.p->noOfWordsTCINDXCONF = 0;
    hostptr.p->noOfPackedWordsLqh = 0;
    hostptr.p->hostLqhBlockRef = calcLqhBlockRef(hostptr.i);
    hostptr.p->m_nf_bits = 0;
  }//for
  c_alive_nodes.clear();
}//Dbtc::inithost()
+58 −5
Original line number Diff line number Diff line
@@ -944,12 +944,62 @@ int runBug24717(NDBT_Context* ctx, NDBT_Step* step){
    
    restarter.startNodes(&nodeId, 1);
    
    do {
      for (Uint32 i = 0; i < 100; i++)
      {
        hugoTrans.pkReadRecords(pNdb, 100, 1, NdbOperation::LM_CommittedRead);
      }
    } while (restarter.waitClusterStarted(5) != 0);
  }
  
  return NDBT_OK;
}

int 
runBug29364(NDBT_Context* ctx, NDBT_Step* step){
  int result = NDBT_OK;
  int loops = ctx->getNumLoops();
  int records = ctx->getNumRecords();
  NdbRestarter restarter;
  Ndb* pNdb = GETNDB(step);
  
  HugoTransactions hugoTrans(*ctx->getTab());

  if (restarter.getNumDbNodes() < 4)
    return NDBT_OK;

  int dump0[] = { 9000, 0 } ;
  int dump1[] = { 9001, 0 } ;
  Uint32 ownNode = refToNode(pNdb->getReference());
  dump0[1] = ownNode;

  for (; loops; loops --)
  {
    int node0 = restarter.getDbNodeId(rand() % restarter.getNumDbNodes());
    int node1 = restarter.getRandomNodeOtherNodeGroup(node0, rand());

    restarter.restartOneDbNode(node0, false, true, true);
    restarter.waitNodesNoStart(&node0, 1);
    restarter.startNodes(&node0, 1);
    restarter.waitClusterStarted();

    restarter.restartOneDbNode(node1, false, true, true);    
    restarter.waitNodesNoStart(&node1, 1);
    if (restarter.dumpStateOneNode(node1, dump0, 2))
      return NDBT_FAILED;

    restarter.startNodes(&node1, 1);    
    
    do {
      
      for (Uint32 i = 0; i < 100; i++)
      {
        hugoTrans.pkReadRecords(pNdb, 100, 1, NdbOperation::LM_CommittedRead);
      }
    } while (restarter.waitClusterStarted(5) != 0);
    
    if (restarter.dumpStateOneNode(node1, dump1, 1))
      return NDBT_FAILED;
  }
  
  return NDBT_OK;
@@ -1553,6 +1603,9 @@ TESTCASE("Bug27003", ""){
TESTCASE("Bug27283", ""){
  INITIALIZER(runBug27283);
}
TESTCASE("Bug29364", ""){
  INITIALIZER(runBug29364);
}
NDBT_TESTSUITE_END(testNodeRestart);

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

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

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