Commit 45433e78 authored by unknown's avatar unknown
Browse files

Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1

into poseidon.ndb.mysql.com:/home/tomas/mysql-4.1

parents 0a3202be c1c2a892
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -553,7 +553,6 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
#define GSN_STATISTICS_CONF             454

#define GSN_START_ORD                   455
/* 456 unused */
/* 457 unused */

#define GSN_EVENT_SUBSCRIBE_REQ         458
@@ -900,6 +899,7 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
#define GSN_RESUME_REQ                  682
#define GSN_STOP_REQ                    443
#define GSN_STOP_REF                    444
#define GSN_STOP_CONF                   456
#define GSN_API_VERSION_REQ             697
#define GSN_API_VERSION_CONF            698

+3 −3
Original line number Diff line number Diff line
@@ -133,9 +133,9 @@ public:
    CreateLogBytes = 48,
    InfoEvent = 49,

    //GREP
    GrepSubscriptionInfo = 52,
    GrepSubscriptionAlert = 53,
    // SINGLE USER
    SingleUser = 52,
    /* unused 53 */

    //BACKUP
    BackupStarted = 54,
+9 −1
Original line number Diff line number Diff line
@@ -67,6 +67,13 @@ public:
  static bool getStopAbort(const Uint32 & requestInfo);
};

struct StopConf
{
  STATIC_CONST( SignalLength = 2 );
  Uint32 senderData;
  Uint32 nodeState;
};

class StopRef 
{
  /**
@@ -86,7 +93,8 @@ public:
    OK = 0,
    NodeShutdownInProgress = 1,
    SystemShutdownInProgress = 2,
    NodeShutdownWouldCauseSystemCrash = 3
    NodeShutdownWouldCauseSystemCrash = 3,
    TransactionAbortFailed = 4
  };
  
public:
+12 −457
Original line number Diff line number Diff line
@@ -105,9 +105,8 @@ const EventLoggerBase::EventRepLogLevelMatrix EventLoggerBase::matrix[] = {
  { EventReport::CreateLogBytes,    LogLevel::llInfo, 11, Logger::LL_INFO },
  { EventReport::InfoEvent,         LogLevel::llInfo,  2, Logger::LL_INFO },

  //Global replication
  { EventReport::GrepSubscriptionInfo,  LogLevel::llGrep, 7, Logger::LL_INFO},
  { EventReport::GrepSubscriptionAlert, LogLevel::llGrep, 7, Logger::LL_ALERT},
  //Single User
  { EventReport::SingleUser,  LogLevel::llInfo, 7, Logger::LL_INFO},

  // Backup
  { EventReport::BackupStarted, LogLevel::llBackup, 7, Logger::LL_INFO },
@@ -800,473 +799,29 @@ EventLogger::getText(char * m_text, size_t m_text_len,
	       );
    break;
  }
  case EventReport::GrepSubscriptionInfo : 
  case EventReport::SingleUser : 
  {   
    GrepEvent::Subscription event  = (GrepEvent::Subscription)theData[1];
    switch(event) {
    case GrepEvent::GrepSS_CreateSubIdConf: 
    switch (theData[1])
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Created subscription id"
		 " (subId=%d,SubKey=%d)"
		 " Return code: %d.",
		 subId,
		 subKey,
		 err);
      break;
    }      
    case GrepEvent::GrepPS_CreateSubIdConf: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: Created subscription id" 
		 " (subId=%d,SubKey=%d)"
		 " Return code: %d.",
		 subId,
		 subKey,
		 err);
      break;
    }
    case GrepEvent::GrepSS_SubCreateConf: 
    {
      const int subId   = theData[2];
      const int subKey  = theData[3];
      const int err     = theData[4];
      const int nodegrp = theData[5];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Created subscription using"
		 " (subId=%d,SubKey=%d)" 
		 " in primary system. Primary system has %d nodegroup(s)."
		 " Return code: %d",
		 subId,
		 subKey,
		 nodegrp,
		 err);
      break;
    }
    case GrepEvent::GrepPS_SubCreateConf: 
    {
      const int subId   = theData[2];
      const int subKey  = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: All participants have created "
		 "subscriptions"
		 " using (subId=%d,SubKey=%d)."
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
      break;
    }      
    case GrepEvent::GrepSS_SubStartMetaConf: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Logging started on meta data changes." 
		 " using (subId=%d,SubKey=%d)"
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
      break;
    }
    case GrepEvent::GrepPS_SubStartMetaConf: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: All participants have started " 
		 "logging meta data" 
		 " changes on the subscription subId=%d,SubKey=%d) "
		 "(N.I yet)."
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
      break;
    }
    case GrepEvent::GrepSS_SubStartDataConf: {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Logging started on table data changes " 
		 " using (subId=%d,SubKey=%d)"
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
      break;
    }
    case GrepEvent::GrepPS_SubStartDataConf: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: All participants have started logging "
		 "table data changes on the subscription " 
		 "subId=%d,SubKey=%d)."
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
      break;
    }
    case GrepEvent::GrepPS_SubSyncMetaConf: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: All participants have started "
		 " synchronization  on meta data (META SCAN) using "
		 "(subId=%d,SubKey=%d)."
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
      break;
    }
    case GrepEvent::GrepSS_SubSyncMetaConf: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Synchronization started (META SCAN) on "
		 " meta data using (subId=%d,SubKey=%d)"
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
      break;
    }
    case GrepEvent::GrepPS_SubSyncDataConf: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: All participants have started " 
		 "synchronization "
		 " on table data (DATA SCAN) using (subId=%d,SubKey=%d)."
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
      break;
    }
    case GrepEvent::GrepSS_SubSyncDataConf: 
    {
      const int subId   =  theData[2];
      const int subKey  =  theData[3];
      const int err     =  theData[4];
      const int gci     =  theData[5];
    case 0:
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Synchronization started (DATA SCAN) on "
		 "table data using (subId=%d,SubKey=%d). GCI = %d"
		 " Return code: %d",
		 subId,
		 subKey,
		 gci,
		 err);
			   "%sEntering single user mode", theNodeId);
      break;
    }      
    case GrepEvent::GrepPS_SubRemoveConf: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
    case 1:
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: All participants have removed "
		 "subscription (subId=%d,SubKey=%d). I have cleaned "
		 "up resources I've used."
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
			   "%sEntered single user mode %d", theNodeId, theData[2]);
      break;
    }	
    case GrepEvent::GrepSS_SubRemoveConf: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
    case 2:
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Removed subscription "
		 "(subId=%d,SubKey=%d)"
		 " Return code: %d",
		 subId,
		 subKey,
		 err);
			   "%sExiting single user mode", theNodeId);
      break;
    }
    default:
      BaseString::snprintf(m_text, 
		 m_text_len, 
		 "%sUnknown GrepSubscriptonInfo event: %d",
		 theNodeId,
		 theData[1]);
    }
    break;
  }
  
  case EventReport::GrepSubscriptionAlert : 
  {
    GrepEvent::Subscription event  = (GrepEvent::Subscription)theData[1];
    switch(event) 
    { 
    case GrepEvent::GrepSS_CreateSubIdRef: 
    {
      const int subId    = theData[2];
      const int subKey   = theData[3];
      const int err      = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord:Error code: %d Error message: %s"
		 " (subId=%d,SubKey=%d)",
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err),
		 subId,
		 subKey);
      break;
    }
    case GrepEvent::GrepSS_SubCreateRef: 
    {
      const int subId   = theData[2];
      const int subKey  = theData[3];
      const int err     = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: FAILED to Created subscription using"
		 " (subId=%d,SubKey=%d)in primary system."
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }
    case GrepEvent::GrepSS_SubStartMetaRef: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Logging failed to start on meta "
		 "data changes." 
		 " using (subId=%d,SubKey=%d)"
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }
    case GrepEvent::GrepSS_SubStartDataRef: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Logging FAILED to start on table data "
		 " changes using (subId=%d,SubKey=%d)"
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }
    case GrepEvent::GrepSS_SubSyncMetaRef: 
    {
      const int subId   = theData[2];
      const int subKey  = theData[3];
      const int err     = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Synchronization FAILED (META SCAN) on "
		 " meta data using (subId=%d,SubKey=%d)"
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }
    case GrepEvent::GrepSS_SubSyncDataRef: 
    {
      const int subId   =  theData[2];
      const int subKey  =  theData[3];
      const int err     =  theData[4];
      const int gci     =  theData[5];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Synchronization FAILED (DATA SCAN) on "
		 "table data using (subId=%d,SubKey=%d). GCI = %d"
		 " Error code: %d Error Message: %s", 
		 subId,
		 subKey,
		 gci,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
			   "%sUnknown single user report %d", theNodeId, theData[1]);
      break;
    }
    case GrepEvent::GrepSS_SubRemoveRef: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::SSCoord: Failed to remove subscription "
		 "(subId=%d,SubKey=%d). "
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err)
		 );
      break;
    }	
	
    case GrepEvent::GrepPS_CreateSubIdRef: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: Error code: %d Error Message: %s"
		 " (subId=%d,SubKey=%d)",
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err),
		 subId,
		 subKey);
      break;
    }
    case GrepEvent::GrepPS_SubCreateRef: 
    {
      const int subId   = theData[2];
      const int subKey  = theData[3];
      const int err     = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: FAILED to Created subscription using"
		 " (subId=%d,SubKey=%d)in primary system."
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }
    case GrepEvent::GrepPS_SubStartMetaRef: 
    {
      const int subId   = theData[2];
      const int subKey  = theData[3];
      const int err     = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: Logging failed to start on meta "
		 "data changes." 
		 " using (subId=%d,SubKey=%d)"
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,		       
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
    break;
  }      
    case GrepEvent::GrepPS_SubStartDataRef: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: Logging FAILED to start on table data "
		 " changes using (subId=%d,SubKey=%d)"
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }
    case GrepEvent::GrepPS_SubSyncMetaRef: 
    {
      const int subId   = theData[2];
      const int subKey  = theData[3];
      const int err     = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: Synchronization FAILED (META SCAN) on "
		 " meta data using (subId=%d,SubKey=%d)"
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }
    case GrepEvent::GrepPS_SubSyncDataRef: 
    {
      const int subId   =  theData[2];
      const int subKey  =  theData[3];
      const int err     =  theData[4];
      const int gci     =  theData[5];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: Synchronization FAILED (DATA SCAN) on "
		 "table data using (subId=%d,SubKey=%d). GCI = %d. "
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 gci,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }
    case GrepEvent::GrepPS_SubRemoveRef: 
    {
      const int subId  = theData[2];
      const int subKey = theData[3];
      const int err    = theData[4];
      BaseString::snprintf(m_text, m_text_len, 
		 "Grep::PSCoord: Failed to remove subscription "
		 "(subId=%d,SubKey=%d)." 
		 " Error code: %d Error Message: %s",
		 subId,
		 subKey,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }	
    case GrepEvent::Rep_Disconnect:
    {
      const int err       = theData[4];
      const int nodeId    = theData[5];   
      BaseString::snprintf(m_text, m_text_len, 
		 "Rep: Node %d."
		 " Error code: %d Error Message: %s",
		 nodeId,
		 err,
		 GrepError::getErrorDesc((GrepError::GE_Code)err));
      break;
    }	
	
	
    default:
      BaseString::snprintf(m_text, 
		 m_text_len, 
		 "%sUnknown GrepSubscriptionAlert event: %d",
		 theNodeId,
		 theData[1]);
    break;
    }
    break;
  }

  case EventReport::BackupStarted:
    BaseString::snprintf(m_text,
	       m_text_len,
+47 −18
Original line number Diff line number Diff line
@@ -1966,6 +1966,11 @@ Ndbcntr::execRESUME_REQ(Signal* signal){
  //ResumeRef * const ref = (ResumeRef *)&signal->theData[0];
  
  jamEntry();

  signal->theData[0] = EventReport::SingleUser;
  signal->theData[1] = 2;
  sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);

  //Uint32 senderData = req->senderData;
  //BlockReference senderRef = req->senderRef;
  NodeState newState(NodeState::SL_STARTED);		  
@@ -2004,12 +2009,11 @@ Ndbcntr::execSTOP_REQ(Signal* signal){
    return;
  }

  if(c_stopRec.stopReq.senderRef != 0 && !singleuser){
    jam();
  if(c_stopRec.stopReq.senderRef != 0){
    /**
     * Requested a system shutdown
     */
    if(StopReq::getSystemStop(req->requestInfo)){
    if(!singleuser && StopReq::getSystemStop(req->requestInfo)){
      jam();
      sendSignalWithDelay(reference(), GSN_STOP_REQ, signal, 100,
			  StopReq::SignalLength);
@@ -2031,22 +2035,27 @@ Ndbcntr::execSTOP_REQ(Signal* signal){
  c_stopRec.stopReq = * req;
  c_stopRec.stopInitiatedTime = NdbTick_CurrentMillisecond();
  
  if(StopReq::getSystemStop(c_stopRec.stopReq.requestInfo) && !singleuser) {
  if(!singleuser) {
    if(StopReq::getSystemStop(c_stopRec.stopReq.requestInfo)) {
      jam();
      if(StopReq::getPerformRestart(c_stopRec.stopReq.requestInfo)){
	((Configuration&)theConfiguration).stopOnError(false);
      }
    }
  if(!singleuser) {
    if(!c_stopRec.checkNodeFail(signal)){
      jam();
      return;
    }
  }
  
    signal->theData[0] = EventReport::NDBStopStarted;
    signal->theData[1] = StopReq::getSystemStop(c_stopRec.stopReq.requestInfo) ? 1 : 0;
    sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
  }
  else
  {
    signal->theData[0] = EventReport::SingleUser;
    signal->theData[1] = 0;
    sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
  }

  NodeState newState(NodeState::SL_STOPPING_1, 
		     StopReq::getSystemStop(c_stopRec.stopReq.requestInfo));
@@ -2129,9 +2138,11 @@ Ndbcntr::StopRecord::checkNodeFail(Signal* signal){
  
  stopReq.senderRef = 0;

  if (cntr.getNodeState().startLevel != NodeState::SL_SINGLEUSER)
  {
    NodeState newState(NodeState::SL_STARTED); 

    cntr.updateNodeState(signal, newState);
  }

  signal->theData[0] = EventReport::NDBStopAborted;
  cntr.sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 1, JBB);
@@ -2227,12 +2238,24 @@ void Ndbcntr::execABORT_ALL_CONF(Signal* signal){
  jamEntry();
  if(c_stopRec.stopReq.singleuser) {
    jam();

    NodeState newState(NodeState::SL_SINGLEUSER);    
    newState.setSingleUser(true);
    newState.setSingleUserApi(c_stopRec.stopReq.singleUserApi);
    updateNodeState(signal, newState);    
    c_stopRec.stopInitiatedTime = NdbTick_CurrentMillisecond();

    StopConf * const stopConf = (StopConf *)&signal->theData[0];
    stopConf->senderData = c_stopRec.stopReq.senderData;
    stopConf->nodeState  = (Uint32) NodeState::SL_SINGLEUSER;
    sendSignal(c_stopRec.stopReq.senderRef, GSN_STOP_CONF, signal, StopConf::SignalLength, JBB);

    c_stopRec.stopReq.senderRef = 0; // the command is done

    signal->theData[0] = EventReport::SingleUser;
    signal->theData[1] = 1;
    signal->theData[2] = c_stopRec.stopReq.singleUserApi;
    sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 3, JBB);
  }
  else 
    {
@@ -2250,7 +2273,13 @@ void Ndbcntr::execABORT_ALL_CONF(Signal* signal){

void Ndbcntr::execABORT_ALL_REF(Signal* signal){
  jamEntry();
  ndbrequire(false);
  AbortAllRef *abortAllRef = (AbortAllRef *)&signal->theData[0];
  AbortAllRef::ErrorCode errorCode = (AbortAllRef::ErrorCode) abortAllRef->errorCode;

  StopRef * const stopRef = (StopRef *)&signal->theData[0];
  stopRef->senderData = c_stopRec.stopReq.senderData;
  stopRef->errorCode = StopRef::TransactionAbortFailed;
  sendSignal(c_stopRec.stopReq.senderRef, GSN_STOP_REF, signal, StopRef::SignalLength, JBB);
}

void
Loading