List:Commits« Previous MessageNext Message »
From:Leonard Zhou Date:August 6 2008 4:45pm
Subject:bzr commit into mysql-5.1-telco-6.2 branch (leonard:2637) WL#3932
View as plain text  
#At file:///home/zhl/mysql/mysql-5.1-telco-6.2-WL3932/

 2637 Leonard Zhou	2008-08-06
      WL#3932 Node recovery status report
modified:
  storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp
  storage/ndb/include/mgmapi/mgmapi_config_parameters.h
  storage/ndb/include/mgmapi/ndb_logevent.h
  storage/ndb/src/common/debugger/EventLogger.cpp
  storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
  storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
  storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
  storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
  storage/ndb/src/mgmapi/ndb_logevent.cpp
  storage/ndb/src/mgmsrv/ConfigInfo.cpp

per-file messages:
  storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp
    Add node restart status dump type
  storage/ndb/include/mgmapi/mgmapi_config_parameters.h
    Define node startup status report frequency
  storage/ndb/include/mgmapi/ndb_logevent.h
    Define node restart status report variable
  storage/ndb/src/common/debugger/EventLogger.cpp
    Add log function for node restart status report
  storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
    Add dump state order for node restart status
  storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
    Define variables and functions for node restart status report
  storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
    Initialize variables for node restart status report
  storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
    Implement node restart status report
  storage/ndb/src/mgmapi/ndb_logevent.cpp
    Define node restart status report variables
  storage/ndb/src/mgmsrv/ConfigInfo.cpp
    Define startup report frequency parameter
=== modified file 'storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp'
--- a/storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp	2008-05-29 15:58:58 +0000
+++ b/storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp	2008-08-06 16:44:29 +0000
@@ -61,6 +61,10 @@ public:
     _TCMin       = 101000,
     _TCMax       = 101999,
 
+    _LQHMin      = 102000,
+    NRStatus     = 102001,
+    _LQHMax      = 102999,
+
     // 1 QMGR Dump information about phase 1 variables
     // 13 CMVMI Dump signal counter
     // 13 NDBCNTR Dump start phase information

=== modified file 'storage/ndb/include/mgmapi/mgmapi_config_parameters.h'
--- a/storage/ndb/include/mgmapi/mgmapi_config_parameters.h	2008-05-29 13:09:49 +0000
+++ b/storage/ndb/include/mgmapi/mgmapi_config_parameters.h	2008-08-06 16:44:29 +0000
@@ -131,6 +131,7 @@
 #define CFG_DB_SUB_OPERATIONS         181
 #define CFG_DB_MAX_BUFFERED_EPOCHS    182 /* subscriptions */
 #define CFG_DB_SUMA_HANDOVER_TIMEOUT  183
+#define CFG_DB_STARTUP_REPORT_FREQUENCY    184
 
 #define CFG_DB_SGA                    198 /* super pool mem */
 #define CFG_DB_DATA_MEM_2             199 /* used in special build in 5.1 */

=== modified file 'storage/ndb/include/mgmapi/ndb_logevent.h'
--- a/storage/ndb/include/mgmapi/ndb_logevent.h	2008-02-11 14:07:49 +0000
+++ b/storage/ndb/include/mgmapi/ndb_logevent.h	2008-08-06 16:44:29 +0000
@@ -192,9 +192,11 @@ extern "C" {
     /* 68 (used in upcoming patch) */
 
     /** NDB_MGM_EVENT_SEVERITY_WARNING */
-    NDB_LE_SubscriptionStatus = 69
+    NDB_LE_SubscriptionStatus = 69,
+    /** NDB_MGM_EVENT_CATEGORY_NODE_RESTART */
+    NDB_LE_NR_Status = 70
 
-    /* 70 unused */
+    /* 71 unused */
   };
 
   /**
@@ -488,6 +490,13 @@ extern "C" {
       struct {
 	unsigned dest_node;
       } NR_CopyFragsCompleted;
+      /** Log event specific data for for corresponding NDB_LE_ log event */
+      struct {
+        unsigned starting_node;
+        unsigned copy_node;
+        unsigned n_bytes_lo;
+        unsigned n_bytes_hi;
+      } NR_Status;
 
       /** Log event specific data for for corresponding NDB_LE_ log event */
       struct {

=== modified file 'storage/ndb/src/common/debugger/EventLogger.cpp'
--- a/storage/ndb/src/common/debugger/EventLogger.cpp	2008-04-22 19:36:05 +0000
+++ b/storage/ndb/src/common/debugger/EventLogger.cpp	2008-08-06 16:44:29 +0000
@@ -499,6 +499,12 @@ void getTextNR_CopyFragsCompleted(QQQQ) 
 		       "to Node %u", 
 		       theData[1]);
 }
+void getTextNR_Status(QQQQ) {
+  BaseString::snprintf(m_text, m_text_len,
+                       "Node restart status: Copy %llu bytes data from node %u to node %u\n",
+                       make_uint64(theData[3], theData[4]),
+                       theData[2],theData[1]);
+}
 void getTextLCPFragmentCompleted(QQQQ) {
   BaseString::snprintf(m_text, m_text_len, 
 		       "Table ID = %u, fragment ID = %u has completed LCP "
@@ -1068,6 +1074,7 @@ const EventLoggerBase::EventRepLogLevelM
   ROW(NR_CopyFragsStarted,     LogLevel::llNodeRestart, 8, Logger::LL_INFO ),
   ROW(NR_CopyFragDone,         LogLevel::llNodeRestart,10, Logger::LL_INFO ),
   ROW(NR_CopyFragsCompleted,   LogLevel::llNodeRestart, 8, Logger::LL_INFO ),
+  ROW(NR_Status,               LogLevel::llNodeRestart, 7, Logger::LL_INFO ),
 
   ROW(NodeFailCompleted,       LogLevel::llNodeRestart, 8, Logger::LL_ALERT),
   ROW(NODE_FAILREP,            LogLevel::llNodeRestart, 8, Logger::LL_ALERT),

=== modified file 'storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp'
--- a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp	2008-04-25 10:56:03 +0000
+++ b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp	2008-08-06 16:44:29 +0000
@@ -923,6 +923,10 @@ Cmvmi::execDUMP_STATE_ORD(Signal* signal
     {
       sendSignal(BACKUP_REF, GSN_DUMP_STATE_ORD, signal, signal->length(), JBB);
     }
+    else if (check_block(LQH, val))
+    {
+      sendSignal(DBLQH_REF, GSN_DUMP_STATE_ORD, signal, signal->length(), JBB);
+    }
     else if (check_block(TC, val))
     {
     }

=== modified file 'storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp	2008-05-30 06:33:46 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp	2008-08-06 16:44:29 +0000
@@ -2896,8 +2896,26 @@ private:
   Uint32 c_diskless;
   Uint32 c_o_direct;
   Uint32 c_error_insert_table_id;
+
+  /*
+    keeps track of total data written into new data node and show backup status
+  */
+  Uint64 m_nr_bytes_total;
+  /* next time to report node start status */
+  Uint32 m_nr_next_report;
+  Uint32 m_nr_report_frequency;
   
 public:
+  /*
+    For periodic node restart status reporting and explicit node restart status reporting
+  */
+  /* Init at start of node restart, timers etc... */
+  void initNRReportStatus(Signal* signal);
+  /* Sheck timers for reporting at certain points */
+  void checkNRReportStatus(Signal* signal, ScanRecordPtr scanptr);
+  /* Send backup status, invoked either periodically, or explicitly */
+  void reportNRStatus(Signal* signal, ScanRecordPtr scanptr);
+
   bool is_same_trans(Uint32 opId, Uint32 trid1, Uint32 trid2);
   void get_op_info(Uint32 opId, Uint32 *hash, Uint32* gci_hi, Uint32* gci_lo);
   void accminupdate(Signal*, Uint32 opPtrI, const Local_key*);

=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp	2007-11-19 10:04:24 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp	2008-08-06 16:44:29 +0000
@@ -63,6 +63,9 @@ void Dblqh::initData() 
   m_backup_ptr = RNIL;
   clogFileSize = 16;
   cmaxLogFilesInPageZero = 40;
+
+  m_nr_bytes_total = 0;
+  m_nr_report_frequency = 0;
 }//Dblqh::initData()
 
 void Dblqh::initRecords() 

=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	2008-07-23 11:15:31 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	2008-08-06 16:44:29 +0000
@@ -948,6 +948,7 @@ void Dblqh::checkStartCompletedLab(Signa
 void Dblqh::startphase4Lab(Signal* signal) 
 {
   sendNdbSttorryLab(signal);
+  initNRReportStatus(signal);
   return;
 }//Dblqh::startphase4Lab()
 
@@ -1049,6 +1050,10 @@ void Dblqh::execREAD_CONFIG_REQ(Signal* 
   ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_LQH_FRAG, &tmp));
   c_fragment_pool.setSize(tmp);
 
+  m_nr_report_frequency = 0;
+  ndb_mgm_get_int_parameter(p, CFG_DB_STARTUP_REPORT_FREQUENCY,
+                            &m_nr_report_frequency);
+
   if (!ndb_mgm_get_int_parameter(p, CFG_DB_REDOLOG_FILE_SIZE,
                                  &clogFileSize))
   {
@@ -10821,6 +10826,8 @@ void Dblqh::copyTupkeyConfLab(Signal* si
   tcConnectptr.p->copyCountWords += TnoOfWords;
   scanptr.p->scanState = ScanRecord::WAIT_LQHKEY_COPY;
   if (tcConnectptr.p->copyCountWords < cmaxWordsAtNodeRec) {
+    m_nr_bytes_total += (TnoOfWords << 2);
+    checkNRReportStatus(signal, scanptr);
     nextRecordCopy(signal);
     return;
   }//if
@@ -19096,6 +19103,24 @@ Dblqh::execDUMP_STATE_ORD(Signal* signal
   jamEntry();
   DumpStateOrd * const dumpState = (DumpStateOrd *)&signal->theData[0];
   Uint32 arg= dumpState->args[0];
+
+  /* Dump commands used in public interfaces */
+  switch(arg) {
+  case DumpStateOrd::NRStatus:
+  {
+    scanptr.i = tcConnectptr.p->tcScanRec;
+    if (scanptr.i != RNIL)
+    {
+      c_scanRecordPool.getPtr(scanptr);
+      reportNRStatus(signal,scanptr);
+    }
+    return;
+  }
+  default:
+    /* continue to debug section */
+    break;
+  }
+
   if(dumpState->args[0] == DumpStateOrd::CommitAckMarkersSize){
     infoEvent("LQH: m_commitAckMarkerPool: %d free size: %d",
 	      m_commitAckMarkerPool.getNoOfFree(),
@@ -19739,6 +19764,51 @@ Dblqh::execDUMP_STATE_ORD(Signal* signal
   }
 }//Dblqh::execDUMP_STATE_ORD()
 
+// Node recovery status report
+void
+Dblqh::initNRReportStatus(Signal *signal)
+{
+  struct timeval the_time;
+  gettimeofday(&the_time, 0);
+  m_nr_next_report = the_time.tv_sec + m_nr_report_frequency;
+}
+
+void
+Dblqh::checkNRReportStatus(Signal *signal, ScanRecordPtr scanptr)
+{
+  if (m_nr_report_frequency == 0)
+    return;
+
+  struct timeval the_time;
+  gettimeofday(&the_time, 0);
+  if (the_time.tv_sec > m_nr_next_report)
+  {
+    reportNRStatus(signal, scanptr);
+    m_nr_next_report = the_time.tv_sec + m_nr_report_frequency;
+  }
+}
+
+void
+Dblqh::reportNRStatus(Signal* signal, ScanRecordPtr scanptr)
+{
+  const int signal_length = 5;
+
+  signal->theData[0] = NDB_LE_NR_Status;
+  for (int i= 1; i < signal_length; i++)
+    signal->theData[i] = 0;
+
+  if (scanptr.i == RNIL)
+  {
+    sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, signal_length, JBB);
+    return;
+  }
+  signal->theData[1] = scanptr.p->scanNodeId;
+  signal->theData[2] = getOwnNodeId();;
+
+  signal->theData[3] = (Uint32)(m_nr_bytes_total & 0xFFFFFFFF);
+  signal->theData[4] = (Uint32)(m_nr_bytes_total >> 32);
+  sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, signal_length, JBB);
+}
 /* **************************************************************** */
 /* ---------------------------------------------------------------- */
 /* ---------------------- TRIGGER HANDLING ------------------------ */

=== modified file 'storage/ndb/src/mgmapi/ndb_logevent.cpp'
--- a/storage/ndb/src/mgmapi/ndb_logevent.cpp	2008-01-24 11:21:39 +0000
+++ b/storage/ndb/src/mgmapi/ndb_logevent.cpp	2008-08-06 16:44:29 +0000
@@ -205,6 +205,11 @@ struct Ndb_logevent_body_row ndb_logeven
 
   ROW( NR_CopyFragsCompleted, "dest_node", 1, dest_node),
 
+  ROW( NR_Status, "starting_node", 1, starting_node),
+  ROW( NR_Status, "copy_node",     2, copy_node),
+  ROW( NR_Status, "n_bytes_lo",    3, n_bytes_lo),
+  ROW( NR_Status, "n_bytes_hi",    4, n_bytes_hi),
+
   ROW( NodeFailCompleted, "block",           1, block), /* 0 = all */
   ROW( NodeFailCompleted, "failed_node",     2, failed_node),
   ROW( NodeFailCompleted, "completing_node", 3, completing_node), /* 0 = all */

=== modified file 'storage/ndb/src/mgmsrv/ConfigInfo.cpp'
--- a/storage/ndb/src/mgmsrv/ConfigInfo.cpp	2008-02-20 15:15:31 +0000
+++ b/storage/ndb/src/mgmsrv/ConfigInfo.cpp	2008-08-06 16:44:29 +0000
@@ -1443,6 +1443,18 @@ const ConfigInfo::ParamInfo ConfigInfo::
     STR_VALUE(MAX_INT_RNIL) },
   
   {
+    CFG_DB_STARTUP_REPORT_FREQUENCY,
+    "StartupStatusReportFrequency",
+    DB_TOKEN,
+    "Frequency of various status reports during startup in seconds",
+    ConfigInfo::CI_USED,
+    false,
+    ConfigInfo::CI_INT,
+    "0",
+    "0",
+    STR_VALUE(MAX_INT_RNIL) },
+
+  {
     CFG_DB_O_DIRECT,
     "ODirect",
     DB_TOKEN,

Thread
bzr commit into mysql-5.1-telco-6.2 branch (leonard:2637) WL#3932Leonard Zhou6 Aug