Commit b34ed3a1 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/Dbdih.hpp:
  Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Auto merged
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
  Auto merged
storage/ndb/src/kernel/blocks/suma/Suma.cpp:
  Auto merged
storage/ndb/test/run-test/daily-basic-tests.txt:
  Auto merged
storage/ndb/test/ndbapi/testNodeRestart.cpp:
  merge
parents 2dab4457 6da1cec0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ private:
  enum ErrorCode
  {
    ZNODE_ALREADY_STARTING_ERROR = 305,
    ZNODE_START_DISALLOWED_ERROR = 309,
    InitialStartRequired = 320
  };
};
+3 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ Next DBTUP 4029
Next DBLQH 5045
Next DBDICT 6007
Next DBDIH 7183
Next DBTC 8039
Next DBTC 8040
Next CMVMI 9000
Next BACKUP 10038
Next DBUTIL 11002
@@ -327,6 +327,8 @@ Test Crashes in handling node restarts

7170: Crash when receiving START_PERMREF (InitialStartRequired)

8039: DBTC delay INCL_NODECONF and kill starting node

7174: Crash starting node before sending DICT_LOCK_REQ
7175: Master sends one fake START_PERMREF (ZNODE_ALREADY_STARTING_ERROR)
7176: Slave NR pretends master does not support DICT lock (rolling upgrade)
+0 −1
Original line number Diff line number Diff line
@@ -74,7 +74,6 @@
#define ZWRONG_FAILURE_NUMBER_ERROR 302
#define ZWRONG_START_NODE_ERROR 303
#define ZNO_REPLICA_FOUND_ERROR 304
#define ZNODE_START_DISALLOWED_ERROR 309

// --------------------------------------
// Codes from LQH
+46 −45
Original line number Diff line number Diff line
@@ -1772,7 +1772,8 @@ void Dbdih::execSTART_PERMREF(Signal* signal)
{
  jamEntry();
  Uint32 errorCode = signal->theData[1];
  if (errorCode == StartPermRef::ZNODE_ALREADY_STARTING_ERROR) {
  if (errorCode == StartPermRef::ZNODE_ALREADY_STARTING_ERROR ||
      errorCode == StartPermRef::ZNODE_START_DISALLOWED_ERROR) {
    jam();
    /*-----------------------------------------------------------------------*/
    // The master was busy adding another node. We will wait for a second and
@@ -2122,50 +2123,50 @@ void Dbdih::execINCL_NODECONF(Signal* signal)
  TstartNode_or_blockref = signal->theData[0];
  TsendNodeId = signal->theData[1];
  if (TstartNode_or_blockref == clocallqhblockref) {
    jam();
    /*-----------------------------------------------------------------------*/
    // THIS SIGNAL CAME FROM THE LOCAL LQH BLOCK. 
    // WE WILL NOW SEND INCLUDE TO THE TC BLOCK.
    /*-----------------------------------------------------------------------*/
    signal->theData[0] = reference();
    signal->theData[1] = c_nodeStartSlave.nodeId;
    sendSignal(clocaltcblockref, GSN_INCL_NODEREQ, signal, 2, JBB);
    return;
  }//if
  if (TstartNode_or_blockref == clocaltcblockref) {
  static Uint32 blocklist[] = {
    clocallqhblockref,
    clocaltcblockref,
    cdictblockref,
    0,
    0,
    0
  };
  blocklist[3] = numberToRef(BACKUP, getOwnNodeId());
  blocklist[4] = numberToRef(SUMA, getOwnNodeId());
  
  Uint32 i = 0;
  for (Uint32 i = 0; blocklist[i] != 0; i++)
  {
    if (TstartNode_or_blockref == blocklist[i])
    {
      jam();
    /*----------------------------------------------------------------------*/
    // THIS SIGNAL CAME FROM THE LOCAL LQH BLOCK. 
    // WE WILL NOW SEND INCLUDE TO THE DICT BLOCK.
    /*----------------------------------------------------------------------*/
    signal->theData[0] = reference();
    signal->theData[1] = c_nodeStartSlave.nodeId;
    sendSignal(cdictblockref, GSN_INCL_NODEREQ, signal, 2, JBB);
    return;
  }//if
  if (TstartNode_or_blockref == cdictblockref) {
      if (getNodeStatus(c_nodeStartSlave.nodeId) == NodeRecord::ALIVE && 
	  blocklist[i+1] != 0)
      {
	/**
	 * Send to next in block list
	 */
	jam();
    /*-----------------------------------------------------------------------*/
    // THIS SIGNAL CAME FROM THE LOCAL DICT BLOCK. WE WILL NOW SEND CONF TO THE
    // BACKUP.
    /*-----------------------------------------------------------------------*/
	signal->theData[0] = reference();
	signal->theData[1] = c_nodeStartSlave.nodeId;
    sendSignal(BACKUP_REF, GSN_INCL_NODEREQ, signal, 2, JBB);
    
    // Suma will not send response to this for now, later...
    sendSignal(SUMA_REF, GSN_INCL_NODEREQ, signal, 2, JBB);
	sendSignal(blocklist[i+1], GSN_INCL_NODEREQ, signal, 2, JBB);
	return;
  }//if
  if (TstartNode_or_blockref == numberToRef(BACKUP, getOwnNodeId())){
      }
      else
      {
	/**
	 * All done, reply to master
	 */
	jam();
	signal->theData[0] = c_nodeStartSlave.nodeId;
	signal->theData[1] = cownNodeId;
	sendSignal(cmasterdihref, GSN_INCL_NODECONF, signal, 2, JBB);
	
	c_nodeStartSlave.nodeId = 0;
	return;
      }
    }
  }
  
  ndbrequire(cmasterdihref = reference());
  receiveLoopMacro(INCL_NODEREQ, TsendNodeId);
@@ -2283,7 +2284,7 @@ void Dbdih::execSTART_INFOREQ(Signal* signal)
    StartInfoRef *const ref =(StartInfoRef*)&signal->theData[0];
    ref->startingNodeId = startNode;
    ref->sendingNodeId = cownNodeId;
    ref->errorCode = ZNODE_START_DISALLOWED_ERROR;
    ref->errorCode = StartPermRef::ZNODE_START_DISALLOWED_ERROR;
    sendSignal(cmasterdihref, GSN_START_INFOREF, signal, 
	       StartInfoRef::SignalLength, JBB);
    return;
+13 −0
Original line number Diff line number Diff line
@@ -311,6 +311,19 @@ void Dbtc::execINCL_NODEREQ(Signal* signal)
  hostptr.p->hostStatus = HS_ALIVE;
  signal->theData[0] = cownref;
  c_alive_nodes.set(hostptr.i);

  if (ERROR_INSERTED(8039))
  {
    CLEAR_ERROR_INSERT_VALUE;
    Uint32 save = signal->theData[0];
    signal->theData[0] = 9999;
    sendSignal(numberToRef(CMVMI, hostptr.i), 
	       GSN_NDB_TAMPER, signal, 1, JBB);
    signal->theData[0] = save;
    sendSignalWithDelay(tblockref, GSN_INCL_NODECONF, signal, 5000, 1);
    return;
  }

  sendSignal(tblockref, GSN_INCL_NODECONF, signal, 1, JBB);
}

Loading