Commit e68194dc authored by tomas@poseidon.ndb.mysql.com's avatar tomas@poseidon.ndb.mysql.com

Merge poseidon.ndb.mysql.com:/home/tomas/mysql-5.0

into  poseidon.ndb.mysql.com:/home/tomas/mysql-5.0-main
parents 8b57568a 9944e41f
...@@ -71,6 +71,7 @@ typedef ndbd_exit_classification_enum ndbd_exit_classification; ...@@ -71,6 +71,7 @@ typedef ndbd_exit_classification_enum ndbd_exit_classification;
#define NDBD_EXIT_INDEX_NOTINRANGE 2304 #define NDBD_EXIT_INDEX_NOTINRANGE 2304
#define NDBD_EXIT_ARBIT_SHUTDOWN 2305 #define NDBD_EXIT_ARBIT_SHUTDOWN 2305
#define NDBD_EXIT_POINTER_NOTINRANGE 2306 #define NDBD_EXIT_POINTER_NOTINRANGE 2306
#define NDBD_EXIT_PARTITIONED_SHUTDOWN 2307
#define NDBD_EXIT_SR_OTHERNODEFAILED 2308 #define NDBD_EXIT_SR_OTHERNODEFAILED 2308
#define NDBD_EXIT_NODE_NOT_DEAD 2309 #define NDBD_EXIT_NODE_NOT_DEAD 2309
#define NDBD_EXIT_SR_REDOLOG 2310 #define NDBD_EXIT_SR_REDOLOG 2310
......
...@@ -438,6 +438,7 @@ void Qmgr::execCONNECT_REP(Signal* signal) ...@@ -438,6 +438,7 @@ void Qmgr::execCONNECT_REP(Signal* signal)
void void
Qmgr::execREAD_NODESCONF(Signal* signal) Qmgr::execREAD_NODESCONF(Signal* signal)
{ {
jamEntry();
check_readnodes_reply(signal, check_readnodes_reply(signal,
refToNode(signal->getSendersBlockRef()), refToNode(signal->getSendersBlockRef()),
GSN_READ_NODESCONF); GSN_READ_NODESCONF);
...@@ -446,6 +447,7 @@ Qmgr::execREAD_NODESCONF(Signal* signal) ...@@ -446,6 +447,7 @@ Qmgr::execREAD_NODESCONF(Signal* signal)
void void
Qmgr::execREAD_NODESREF(Signal* signal) Qmgr::execREAD_NODESREF(Signal* signal)
{ {
jamEntry();
check_readnodes_reply(signal, check_readnodes_reply(signal,
refToNode(signal->getSendersBlockRef()), refToNode(signal->getSendersBlockRef()),
GSN_READ_NODESREF); GSN_READ_NODESREF);
...@@ -907,9 +909,9 @@ Qmgr::check_readnodes_reply(Signal* signal, Uint32 nodeId, Uint32 gsn) ...@@ -907,9 +909,9 @@ Qmgr::check_readnodes_reply(Signal* signal, Uint32 nodeId, Uint32 gsn)
char buf[255]; char buf[255];
BaseString::snprintf(buf, sizeof(buf), BaseString::snprintf(buf, sizeof(buf),
"Partitioned cluster! check StartPartialTimeout, " "check StartPartialTimeout, "
" node %d thinks %d is president, " "node %d thinks %d is president, "
" I think president is: %d", "I think president is: %d",
nodeId, president, cpresident); nodeId, president, cpresident);
ndbout_c(buf); ndbout_c(buf);
...@@ -941,7 +943,7 @@ Qmgr::check_readnodes_reply(Signal* signal, Uint32 nodeId, Uint32 gsn) ...@@ -941,7 +943,7 @@ Qmgr::check_readnodes_reply(Signal* signal, Uint32 nodeId, Uint32 gsn)
CRASH_INSERTION(932); CRASH_INSERTION(932);
progError(__LINE__, progError(__LINE__,
NDBD_EXIT_ARBIT_SHUTDOWN, NDBD_EXIT_PARTITIONED_SHUTDOWN,
buf); buf);
ndbrequire(false); ndbrequire(false);
...@@ -2794,7 +2796,7 @@ void Qmgr::failReportLab(Signal* signal, Uint16 aFailedNode, ...@@ -2794,7 +2796,7 @@ void Qmgr::failReportLab(Signal* signal, Uint16 aFailedNode,
break; break;
case FailRep::ZPARTITIONED_CLUSTER: case FailRep::ZPARTITIONED_CLUSTER:
{ {
code = NDBD_EXIT_ARBIT_SHUTDOWN; code = NDBD_EXIT_PARTITIONED_SHUTDOWN;
char buf1[100], buf2[100]; char buf1[100], buf2[100];
c_clusterNodes.getText(buf1); c_clusterNodes.getText(buf1);
if (signal->getLength()== FailRep::SignalLength + FailRep::ExtraLength && if (signal->getLength()== FailRep::SignalLength + FailRep::ExtraLength &&
...@@ -2805,16 +2807,14 @@ void Qmgr::failReportLab(Signal* signal, Uint16 aFailedNode, ...@@ -2805,16 +2807,14 @@ void Qmgr::failReportLab(Signal* signal, Uint16 aFailedNode,
part.assign(NdbNodeBitmask::Size, rep->partition); part.assign(NdbNodeBitmask::Size, rep->partition);
part.getText(buf2); part.getText(buf2);
BaseString::snprintf(extra, sizeof(extra), BaseString::snprintf(extra, sizeof(extra),
"Partitioned cluster!" "Our cluster: %s other cluster: %s",
" Our cluster: %s other cluster: %s",
buf1, buf2); buf1, buf2);
} }
else else
{ {
jam(); jam();
BaseString::snprintf(extra, sizeof(extra), BaseString::snprintf(extra, sizeof(extra),
"Partitioned cluster!" "Our cluster: %s", buf1);
" Our cluster: %s ", buf1);
} }
msg = extra; msg = extra;
break; break;
......
...@@ -54,6 +54,8 @@ static const ErrStruct errArray[] = ...@@ -54,6 +54,8 @@ static const ErrStruct errArray[] =
{NDBD_EXIT_ARBIT_SHUTDOWN, XAE, "Node lost connection to other nodes and " {NDBD_EXIT_ARBIT_SHUTDOWN, XAE, "Node lost connection to other nodes and "
"can not form a unpartitioned cluster, please investigate if there are " "can not form a unpartitioned cluster, please investigate if there are "
"error(s) on other node(s)"}, "error(s) on other node(s)"},
{NDBD_EXIT_PARTITIONED_SHUTDOWN, XAE, "Partitioned cluster detected. "
"Please check if cluster is already running"},
{NDBD_EXIT_POINTER_NOTINRANGE, XIE, "Pointer too large"}, {NDBD_EXIT_POINTER_NOTINRANGE, XIE, "Pointer too large"},
{NDBD_EXIT_SR_OTHERNODEFAILED, XRE, "Another node failed during system " {NDBD_EXIT_SR_OTHERNODEFAILED, XRE, "Another node failed during system "
"restart, please investigate error(s) on other node(s)"}, "restart, please investigate error(s) on other node(s)"},
......
...@@ -325,12 +325,15 @@ GlobalDictCache::invalidate_all() ...@@ -325,12 +325,15 @@ GlobalDictCache::invalidate_all()
if (vers->size()) if (vers->size())
{ {
TableVersion * ver = & vers->back(); TableVersion * ver = & vers->back();
ver->m_impl->m_status = NdbDictionary::Object::Invalid; if (ver->m_status != RETREIVING)
ver->m_status = DROPPED;
if (ver->m_refCount == 0)
{ {
delete ver->m_impl; ver->m_impl->m_status = NdbDictionary::Object::Invalid;
vers->erase(vers->size() - 1); ver->m_status = DROPPED;
if (ver->m_refCount == 0)
{
delete ver->m_impl;
vers->erase(vers->size() - 1);
}
} }
} }
curr = m_tableHash.getNext(curr); curr = m_tableHash.getNext(curr);
......
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