Commit e8510268 authored by unknown's avatar unknown

Bug #26825 MySQL Server Crashes in high load

Bug #26997  	mysqld segfault when in single user mode


sql/ha_ndbcluster.cc:
  make sure error is always set even if no proper error code from ndb
storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp:
  add error code for failing send signal (typically single user mode)
storage/ndb/src/ndbapi/ndberror.c:
  added error code for failing send signal and timeout waiting for node failure
parent 019c72a4
...@@ -6093,9 +6093,16 @@ int ndbcluster_discover(handlerton *hton, THD* thd, const char *db, ...@@ -6093,9 +6093,16 @@ int ndbcluster_discover(handlerton *hton, THD* thd, const char *db,
{ {
const NdbError err= dict->getNdbError(); const NdbError err= dict->getNdbError();
if (err.code == 709 || err.code == 723) if (err.code == 709 || err.code == 723)
{
error= -1; error= -1;
DBUG_PRINT("info", ("ndb_error.code: %u", ndb_error.code));
}
else else
{
error= -1;
ndb_error= err; ndb_error= err;
DBUG_PRINT("info", ("ndb_error.code: %u", ndb_error.code));
}
goto err; goto err;
} }
DBUG_PRINT("info", ("Found table %s", tab->getName())); DBUG_PRINT("info", ("Found table %s", tab->getName()));
......
...@@ -1753,6 +1753,7 @@ NdbDictInterface::dictSignal(NdbApiSignal* sig, ...@@ -1753,6 +1753,7 @@ NdbDictInterface::dictSignal(NdbApiSignal* sig,
m_transporter->sendSignal(sig, node)); m_transporter->sendSignal(sig, node));
if(res != 0){ if(res != 0){
DBUG_PRINT("info", ("dictSignal failed to send signal")); DBUG_PRINT("info", ("dictSignal failed to send signal"));
m_error.code = 4007;
continue; continue;
} }
...@@ -1770,6 +1771,7 @@ NdbDictInterface::dictSignal(NdbApiSignal* sig, ...@@ -1770,6 +1771,7 @@ NdbDictInterface::dictSignal(NdbApiSignal* sig,
*/ */
if(ret_val == -2) //WAIT_NODE_FAILURE if(ret_val == -2) //WAIT_NODE_FAILURE
{ {
m_error.code = 4013;
continue; continue;
} }
if(m_waiter.m_state == WST_WAIT_TIMEOUT) if(m_waiter.m_state == WST_WAIT_TIMEOUT)
......
...@@ -149,10 +149,12 @@ ErrorBundle ErrorCodes[] = { ...@@ -149,10 +149,12 @@ ErrorBundle ErrorCodes[] = {
/** /**
* Unknown result * Unknown result
*/ */
{ 4007, DMEC, UR, "Send to ndbd failed" },
{ 4008, DMEC, UR, "Receive from NDB failed" }, { 4008, DMEC, UR, "Receive from NDB failed" },
{ 4009, DMEC, UR, "Cluster Failure" }, { 4009, DMEC, UR, "Cluster Failure" },
{ 4012, DMEC, UR, { 4012, DMEC, UR,
"Request ndbd time-out, maybe due to high load or communication problems"}, "Request ndbd time-out, maybe due to high load or communication problems"},
{ 4013, DMEC, UR, "Request timed out in waiting for node faiulure"},
{ 4024, DMEC, UR, { 4024, DMEC, UR,
"Time-out, most likely caused by simple read or cluster failure" }, "Time-out, most likely caused by simple read or cluster failure" },
......
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