Commit ee35ef96 authored by dli@dev3-76.dev.cn.tlan's avatar dli@dev3-76.dev.cn.tlan

Merge dev3-76.dev.cn.tlan:/home/dli/mysql/mysql-5.0/mysql-5.0-ndb-bj

into  dev3-76.dev.cn.tlan:/home/dli/mysql/mysql-5.0/mysql-5.0-bug-20395
parents 99395d5d 30251ea3
...@@ -90,7 +90,11 @@ public: ...@@ -90,7 +90,11 @@ public:
ZNOT_PRESIDENT = 5, /* We are not president */ ZNOT_PRESIDENT = 5, /* We are not president */
ZNOT_DEAD = 6, /* We are not dead when we are starting */ ZNOT_DEAD = 6, /* We are not dead when we are starting */
ZINCOMPATIBLE_VERSION = 7, 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: private:
......
...@@ -65,6 +65,7 @@ typedef ndbd_exit_status_enum ndbd_exit_status; ...@@ -65,6 +65,7 @@ typedef ndbd_exit_status_enum ndbd_exit_status;
typedef ndbd_exit_classification_enum ndbd_exit_classification; typedef ndbd_exit_classification_enum ndbd_exit_classification;
/* Errorcodes before block division was used */ /* Errorcodes before block division was used */
#define NDBD_EXIT_GENERIC 2300
#define NDBD_EXIT_PRGERR 2301 #define NDBD_EXIT_PRGERR 2301
#define NDBD_EXIT_NODE_NOT_IN_CONFIG 2302 #define NDBD_EXIT_NODE_NOT_IN_CONFIG 2302
#define NDBD_EXIT_SYSTEM_ERROR 2303 #define NDBD_EXIT_SYSTEM_ERROR 2303
...@@ -78,6 +79,7 @@ typedef ndbd_exit_classification_enum ndbd_exit_classification; ...@@ -78,6 +79,7 @@ typedef ndbd_exit_classification_enum ndbd_exit_classification;
#define NDBD_EXIT_SR_RESTARTCONFLICT 2311 #define NDBD_EXIT_SR_RESTARTCONFLICT 2311
#define NDBD_EXIT_NO_MORE_UNDOLOG 2312 #define NDBD_EXIT_NO_MORE_UNDOLOG 2312
#define NDBD_EXIT_SR_UNDOLOG 2313 #define NDBD_EXIT_SR_UNDOLOG 2313
#define NDBD_EXIT_SINGLE_USER_MODE 2314
#define NDBD_EXIT_MEMALLOC 2327 #define NDBD_EXIT_MEMALLOC 2327
#define NDBD_EXIT_BLOCK_JBUFCONGESTION 2334 #define NDBD_EXIT_BLOCK_JBUFCONGESTION 2334
#define NDBD_EXIT_TIME_QUEUE_SHORT 2335 #define NDBD_EXIT_TIME_QUEUE_SHORT 2335
......
...@@ -62,5 +62,6 @@ char ndb_version_string_buf[NDB_VERSION_STRING_BUF_SZ]; ...@@ -62,5 +62,6 @@ char ndb_version_string_buf[NDB_VERSION_STRING_BUF_SZ];
#define NDBD_DICT_LOCK_VERSION_5 MAKE_VERSION(5,0,23) #define NDBD_DICT_LOCK_VERSION_5 MAKE_VERSION(5,0,23)
#define NDBD_QMGR_SINGLEUSER_VERSION_5 MAKE_VERSION(5,0,25)
#endif #endif
...@@ -153,6 +153,7 @@ void Qmgr::execCONTINUEB(Signal* signal) ...@@ -153,6 +153,7 @@ void Qmgr::execCONTINUEB(Signal* signal)
return; return;
} }
Uint64 now = NdbTick_CurrentMillisecond(); Uint64 now = NdbTick_CurrentMillisecond();
if (now > (c_start_election_time + c_restartFailureTimeout)) if (now > (c_start_election_time + c_restartFailureTimeout))
{ {
jam(); jam();
...@@ -699,6 +700,39 @@ void Qmgr::execCM_REGREQ(Signal* signal) ...@@ -699,6 +700,39 @@ void Qmgr::execCM_REGREQ(Signal* signal)
return; 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); ptrCheckGuard(addNodePtr, MAX_NDB_NODES, nodeRec);
Phase phase = addNodePtr.p->phase; Phase phase = addNodePtr.p->phase;
if (phase != ZINIT) if (phase != ZINIT)
...@@ -1093,6 +1127,19 @@ void Qmgr::execCM_REGREF(Signal* signal) ...@@ -1093,6 +1127,19 @@ void Qmgr::execCM_REGREF(Signal* signal)
jam(); jam();
progError(__LINE__, NDBD_EXIT_NODE_NOT_DEAD); progError(__LINE__, NDBD_EXIT_NODE_NOT_DEAD);
break; 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: case CmRegRef::ZELECTION:
jam(); jam();
if (candidate_gci > c_start.m_president_candidate_gci || if (candidate_gci > c_start.m_president_candidate_gci ||
......
...@@ -45,6 +45,7 @@ typedef struct ErrStruct { ...@@ -45,6 +45,7 @@ typedef struct ErrStruct {
static const ErrStruct errArray[] = static const ErrStruct errArray[] =
{ {
{NDBD_EXIT_GENERIC, XRE, "Generic error"},
{NDBD_EXIT_PRGERR, XIE, "Assertion"}, {NDBD_EXIT_PRGERR, XIE, "Assertion"},
{NDBD_EXIT_NODE_NOT_IN_CONFIG, XCE, {NDBD_EXIT_NODE_NOT_IN_CONFIG, XCE,
"node id in the configuration has the wrong type, (i.e. not an NDB node)"}, "node id in the configuration has the wrong type, (i.e. not an NDB node)"},
...@@ -68,6 +69,8 @@ static const ErrStruct errArray[] = ...@@ -68,6 +69,8 @@ static const ErrStruct errArray[] =
"No more free UNDO log, increase UndoIndexBuffer"}, "No more free UNDO log, increase UndoIndexBuffer"},
{NDBD_EXIT_SR_UNDOLOG, XFI, {NDBD_EXIT_SR_UNDOLOG, XFI,
"Error while reading the datapages and UNDO log"}, "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, " {NDBD_EXIT_MEMALLOC, XCE, "Memory allocation failure, "
"please decrease some configuration parameters"}, "please decrease some configuration parameters"},
{NDBD_EXIT_BLOCK_JBUFCONGESTION, XIE, "Job buffer congestion"}, {NDBD_EXIT_BLOCK_JBUFCONGESTION, XIE, "Job buffer congestion"},
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment