List:Commits« Previous MessageNext Message »
From:David Li Date:September 11 2006 3:03am
Subject:bk commit into 5.0 tree (dli:1.2255) BUG#20395
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of dli. When dli does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-09-11 11:03:14+08:00, dli@stripped +5 -0
  Fix for Bug #20395 Cluster datanodes always assigned to nodegroup 0 during single user mode.
  Data node is not allowed to get added in the cluster when it is in single user mode.

  ndb/include/kernel/signaldata/CmRegSignalData.hpp@stripped, 2006-09-11 11:03:12+08:00, dli@stripped +5 -1
    Data node is not allowed to get added in the cluster when it is in single user mode.

  ndb/include/mgmapi/ndbd_exit_codes.h@stripped, 2006-09-11 11:03:12+08:00, dli@stripped +2 -0
    Data node is not allowed to get added in the cluster when it is in single user mode.

  ndb/include/ndb_version.h.in@stripped, 2006-09-11 11:03:12+08:00, dli@stripped +1 -0
    added version macro for version 5.0.25.

  ndb/src/kernel/blocks/qmgr/QmgrMain.cpp@stripped, 2006-09-11 11:03:12+08:00, dli@stripped +49 -2
    Data node is not allowed to get added in the cluster when it is in single user mode.

  ndb/src/kernel/error/ndbd_exit_codes.c@stripped, 2006-09-11 11:03:12+08:00, dli@stripped +3 -0
    Data node is not allowed to get added in the cluster when it is in single user mode.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	dli
# Host:	dev3-76.dev.cn.tlan
# Root:	/home/dli/mysql/mysql-5.0/mysql-5.0-bug-20395

--- 1.4/ndb/include/ndb_version.h.in	2006-09-11 11:03:19 +08:00
+++ 1.5/ndb/include/ndb_version.h.in	2006-09-11 11:03:19 +08:00
@@ -62,5 +62,6 @@
 
 #define NDBD_DICT_LOCK_VERSION_5 MAKE_VERSION(5,0,23)
 
+#define NDBD_QMGR_SINGLEUSER_VERSION_5 MAKE_VERSION(5,0,25)
 #endif
  

--- 1.2/ndb/include/kernel/signaldata/CmRegSignalData.hpp	2006-09-11 11:03:19 +08:00
+++ 1.3/ndb/include/kernel/signaldata/CmRegSignalData.hpp	2006-09-11 11:03:19 +08:00
@@ -90,7 +90,11 @@
     ZNOT_PRESIDENT = 5, /* We are not president */
     ZNOT_DEAD = 6,       /* We are not dead when we are starting  */
     ZINCOMPATIBLE_VERSION = 7,
-    ZINCOMPATIBLE_START_TYPE = 8
+    ZINCOMPATIBLE_START_TYPE = 8,
+    ZSINGLE_USER_MODE = 9, /* The cluster is in single user mode,
+			    * data node is not allowed to get added
+			    * in the cluster while in single user mode */
+    ZGENERIC = 100 /* The generic error code */
   };
 private:
   

--- 1.34/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp	2006-09-11 11:03:19 +08:00
+++ 1.35/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp	2006-09-11 11:03:19 +08:00
@@ -153,6 +153,7 @@
       return;
     }
     Uint64 now = NdbTick_CurrentMillisecond();
+
     if (now > (c_start_election_time + c_restartFailureTimeout))
     {
       jam();
@@ -698,7 +699,40 @@
     sendCmRegrefLab(signal, Tblockref, CmRegRef::ZNOT_IN_CFG);
     return;
   } 
-  
+
+  if (getNodeState().getSingleUserMode()) 
+  {
+    /** 
+     * The cluster is in single user mode.
+     * Data node is not allowed to get added in the cluster 
+     * while in single user mode.
+     */
+    // handle rolling upgrade
+    {
+      unsigned int get_major = getMajor(startingVersion);
+      unsigned int get_minor = getMinor(startingVersion);
+      unsigned int get_build = getBuild(startingVersion);
+
+      if (startingVersion < NDBD_QMGR_SINGLEUSER_VERSION_5) {
+        jam();
+
+        infoEvent("QMGR: detect upgrade: new node %u old version %u.%u.%u",
+          (unsigned int)addNodePtr.i, get_major, get_minor, get_build);
+        /** 
+         * The new node is old version, send ZINCOMPATIBLE_VERSION instead
+         * of ZSINGLE_USER_MODE.
+         */
+        sendCmRegrefLab(signal, Tblockref, CmRegRef::ZINCOMPATIBLE_VERSION);
+      } else {
+        jam();
+
+        sendCmRegrefLab(signal, Tblockref, CmRegRef::ZSINGLE_USER_MODE);
+      }//if
+    }
+
+    return;
+  }//if
+
   ptrCheckGuard(addNodePtr, MAX_NDB_NODES, nodeRec);
   Phase phase = addNodePtr.p->phase;
   if (phase != ZINIT)
@@ -1093,6 +1127,19 @@
     jam();
     progError(__LINE__, NDBD_EXIT_NODE_NOT_DEAD);
     break;
+  case CmRegRef::ZSINGLE_USER_MODE:
+    jam();
+    progError(__LINE__, NDBD_EXIT_SINGLE_USER_MODE);
+    break;
+  /**
+   * For generic refuse error.
+   * e.g. in online upgrade, we can use this error code instead
+   * of the incompatible error code.
+   */
+  case CmRegRef::ZGENERIC:
+    jam();
+    progError(__LINE__, NDBD_EXIT_GENERIC);
+    break;
   case CmRegRef::ZELECTION:
     jam();
     if (candidate_gci > c_start.m_president_candidate_gci ||
@@ -2025,7 +2072,7 @@
 			    &c_restartPartionedTimeout);
   ndb_mgm_get_int_parameter(p, CFG_DB_START_FAILURE_TIMEOUT,
 			    &c_restartFailureTimeout);
-  
+ 
   if(c_restartPartialTimeout == 0)
   {
     c_restartPartialTimeout = ~0;

--- 1.10/ndb/include/mgmapi/ndbd_exit_codes.h	2006-09-11 11:03:19 +08:00
+++ 1.11/ndb/include/mgmapi/ndbd_exit_codes.h	2006-09-11 11:03:19 +08:00
@@ -65,6 +65,7 @@
 typedef ndbd_exit_classification_enum ndbd_exit_classification;
 
 /* Errorcodes before block division was used */
+#define NDBD_EXIT_GENERIC                     2300
 #define NDBD_EXIT_PRGERR                      2301
 #define NDBD_EXIT_NODE_NOT_IN_CONFIG          2302
 #define NDBD_EXIT_SYSTEM_ERROR                2303
@@ -78,6 +79,7 @@
 #define NDBD_EXIT_SR_RESTARTCONFLICT          2311
 #define NDBD_EXIT_NO_MORE_UNDOLOG             2312 
 #define NDBD_EXIT_SR_UNDOLOG                  2313 
+#define NDBD_EXIT_SINGLE_USER_MODE            2314 
 #define NDBD_EXIT_MEMALLOC                    2327
 #define NDBD_EXIT_BLOCK_JBUFCONGESTION        2334
 #define NDBD_EXIT_TIME_QUEUE_SHORT            2335

--- 1.12/ndb/src/kernel/error/ndbd_exit_codes.c	2006-09-11 11:03:19 +08:00
+++ 1.13/ndb/src/kernel/error/ndbd_exit_codes.c	2006-09-11 11:03:19 +08:00
@@ -45,6 +45,7 @@
 
 static const ErrStruct errArray[] =
 {
+   {NDBD_EXIT_GENERIC, XRE, "Generic error"},
    {NDBD_EXIT_PRGERR, XIE, "Assertion"},
    {NDBD_EXIT_NODE_NOT_IN_CONFIG, XCE,
     "node id in the configuration has the wrong type, (i.e. not an NDB node)"},
@@ -68,6 +69,8 @@
     "No more free UNDO log, increase UndoIndexBuffer"},
    {NDBD_EXIT_SR_UNDOLOG, XFI,
     "Error while reading the datapages and UNDO log"},
+   {NDBD_EXIT_SINGLE_USER_MODE, XRE, "Data node is not allowed to get added "
+    "to the cluster while it is in single user mode"},
    {NDBD_EXIT_MEMALLOC, XCE, "Memory allocation failure, "
     "please decrease some configuration parameters"},
    {NDBD_EXIT_BLOCK_JBUFCONGESTION, XIE, "Job buffer congestion"},
Thread
bk commit into 5.0 tree (dli:1.2255) BUG#20395David Li11 Sep