mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 06:22:28 +01:00
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.1
into poseidon.ndb.mysql.com:/home/tomas/mysql-5.1-ndb
This commit is contained in:
commit
1d5969c8bd
6 changed files with 55 additions and 31 deletions
|
@ -18,10 +18,6 @@
|
|||
#im_life_cycle : Bug#20368 2006-06-10 alik im_life_cycle test fails
|
||||
ndb_autodiscover : BUG#18952 2006-02-16 jmiller Needs to be fixed w.r.t binlog
|
||||
ndb_autodiscover2 : BUG#18952 2006-02-16 jmiller Needs to be fixed w.r.t binlog
|
||||
ndb_autodiscover3 : BUD#20843 2006-07-04 tomas ndb_autodiscover3 fails randomly
|
||||
#ndb_binlog_discover : BUG#19395 2006-04-28 tomas/knielsen mysqld does not always detect cluster shutdown
|
||||
#ndb_cache2 : BUG#18597 2006-03-28 brian simultaneous drop table and ndb statistics update triggers node failure
|
||||
#ndb_cache_multi2 : BUG#18597 2006-04-10 kent simultaneous drop table and ndb statistics update triggers node failure
|
||||
ndb_load : BUG#17233 2006-05-04 tomas failed load data from infile causes mysqld dbug_assert, binlog not flushed
|
||||
partition_03ndb : BUG#16385 2006-03-24 mikael Partitions: crash when updating a range partitioned NDB table
|
||||
ps_7ndb : BUG#18950 2006-02-16 jmiller create table like does not obtain LOCK_open
|
||||
|
|
|
@ -3442,8 +3442,8 @@ restart:
|
|||
// wait for the first event
|
||||
thd->proc_info= "Waiting for first event from ndbcluster";
|
||||
DBUG_PRINT("info", ("Waiting for the first event"));
|
||||
int schema_res= 0;
|
||||
Uint64 schema_gci= 0;
|
||||
int schema_res= 0, res= 0;
|
||||
Uint64 schema_gci= 0, gci= 0;
|
||||
while (schema_res == 0 && !abort_loop)
|
||||
{
|
||||
schema_res= s_ndb->pollEvents(100, &schema_gci);
|
||||
|
@ -3452,7 +3452,14 @@ restart:
|
|||
DBUG_PRINT("info", ("schema_res: %d schema_gci: %d", schema_res, schema_gci));
|
||||
if (schema_res > 0)
|
||||
{
|
||||
i_ndb->pollEvents(0);
|
||||
while (res >= 0 && gci < schema_gci && !abort_loop)
|
||||
{
|
||||
res= i_ndb->pollEvents(100, &gci);
|
||||
}
|
||||
if (gci > schema_gci)
|
||||
{
|
||||
schema_gci= gci;
|
||||
}
|
||||
i_ndb->flushIncompleteEvents(schema_gci);
|
||||
s_ndb->flushIncompleteEvents(schema_gci);
|
||||
if (schema_gci < ndb_latest_handled_binlog_epoch)
|
||||
|
@ -3466,6 +3473,12 @@ restart:
|
|||
ndb_latest_applied_binlog_epoch= 0;
|
||||
ndb_latest_received_binlog_epoch= 0;
|
||||
}
|
||||
else if (ndb_latest_applied_binlog_epoch > 0)
|
||||
{
|
||||
sql_print_warning("NDB Binlog: cluster has reconnected. "
|
||||
"Changes to the database that occured while "
|
||||
"disconnected will not be in the binlog");
|
||||
}
|
||||
if (ndb_extra_logging)
|
||||
{
|
||||
sql_print_information("NDB Binlog: starting log at epoch %u",
|
||||
|
|
|
@ -71,6 +71,7 @@ typedef ndbd_exit_classification_enum ndbd_exit_classification;
|
|||
#define NDBD_EXIT_INDEX_NOTINRANGE 2304
|
||||
#define NDBD_EXIT_ARBIT_SHUTDOWN 2305
|
||||
#define NDBD_EXIT_POINTER_NOTINRANGE 2306
|
||||
#define NDBD_EXIT_PARTITIONED_SHUTDOWN 2307
|
||||
#define NDBD_EXIT_SR_OTHERNODEFAILED 2308
|
||||
#define NDBD_EXIT_NODE_NOT_DEAD 2309
|
||||
#define NDBD_EXIT_SR_REDOLOG 2310
|
||||
|
|
|
@ -438,6 +438,7 @@ void Qmgr::execCONNECT_REP(Signal* signal)
|
|||
void
|
||||
Qmgr::execREAD_NODESCONF(Signal* signal)
|
||||
{
|
||||
jamEntry();
|
||||
check_readnodes_reply(signal,
|
||||
refToNode(signal->getSendersBlockRef()),
|
||||
GSN_READ_NODESCONF);
|
||||
|
@ -446,6 +447,7 @@ Qmgr::execREAD_NODESCONF(Signal* signal)
|
|||
void
|
||||
Qmgr::execREAD_NODESREF(Signal* signal)
|
||||
{
|
||||
jamEntry();
|
||||
check_readnodes_reply(signal,
|
||||
refToNode(signal->getSendersBlockRef()),
|
||||
GSN_READ_NODESREF);
|
||||
|
@ -907,9 +909,9 @@ retry:
|
|||
|
||||
char buf[255];
|
||||
BaseString::snprintf(buf, sizeof(buf),
|
||||
"Partitioned cluster! check StartPartialTimeout, "
|
||||
" node %d thinks %d is president, "
|
||||
" I think president is: %d",
|
||||
"check StartPartialTimeout, "
|
||||
"node %d thinks %d is president, "
|
||||
"I think president is: %d",
|
||||
nodeId, president, cpresident);
|
||||
|
||||
ndbout_c(buf);
|
||||
|
@ -941,7 +943,7 @@ retry:
|
|||
CRASH_INSERTION(932);
|
||||
|
||||
progError(__LINE__,
|
||||
NDBD_EXIT_ARBIT_SHUTDOWN,
|
||||
NDBD_EXIT_PARTITIONED_SHUTDOWN,
|
||||
buf);
|
||||
|
||||
ndbrequire(false);
|
||||
|
@ -2798,7 +2800,7 @@ void Qmgr::failReportLab(Signal* signal, Uint16 aFailedNode,
|
|||
break;
|
||||
case FailRep::ZPARTITIONED_CLUSTER:
|
||||
{
|
||||
code = NDBD_EXIT_ARBIT_SHUTDOWN;
|
||||
code = NDBD_EXIT_PARTITIONED_SHUTDOWN;
|
||||
char buf1[100], buf2[100];
|
||||
c_clusterNodes.getText(buf1);
|
||||
if (signal->getLength()== FailRep::SignalLength + FailRep::ExtraLength &&
|
||||
|
@ -2809,16 +2811,14 @@ void Qmgr::failReportLab(Signal* signal, Uint16 aFailedNode,
|
|||
part.assign(NdbNodeBitmask::Size, rep->partition);
|
||||
part.getText(buf2);
|
||||
BaseString::snprintf(extra, sizeof(extra),
|
||||
"Partitioned cluster!"
|
||||
" Our cluster: %s other cluster: %s",
|
||||
"Our cluster: %s other cluster: %s",
|
||||
buf1, buf2);
|
||||
}
|
||||
else
|
||||
{
|
||||
jam();
|
||||
BaseString::snprintf(extra, sizeof(extra),
|
||||
"Partitioned cluster!"
|
||||
" Our cluster: %s ", buf1);
|
||||
"Our cluster: %s", buf1);
|
||||
}
|
||||
msg = extra;
|
||||
break;
|
||||
|
|
|
@ -54,6 +54,8 @@ static const ErrStruct errArray[] =
|
|||
{NDBD_EXIT_ARBIT_SHUTDOWN, XAE, "Node lost connection to other nodes and "
|
||||
"can not form a unpartitioned cluster, please investigate if there are "
|
||||
"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_SR_OTHERNODEFAILED, XRE, "Another node failed during system "
|
||||
"restart, please investigate error(s) on other node(s)"},
|
||||
|
|
|
@ -1025,14 +1025,19 @@ int Ndb::initAutoIncrement()
|
|||
setDatabaseName("sys");
|
||||
setDatabaseSchemaName("def");
|
||||
|
||||
m_sys_tab_0 = getDictionary()->getTableGlobal("SYSTAB_0");
|
||||
m_sys_tab_0 = theDictionary->getTableGlobal("SYSTAB_0");
|
||||
|
||||
// Restore current name space
|
||||
setDatabaseName(currentDb.c_str());
|
||||
setDatabaseSchemaName(currentSchema.c_str());
|
||||
|
||||
if (m_sys_tab_0 == NULL) {
|
||||
assert(theDictionary->m_error.code != 0);
|
||||
theError.code = theDictionary->m_error.code;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return (m_sys_tab_0 == NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -1043,19 +1048,19 @@ Ndb::opTupleIdOnNdb(const NdbTableImpl* table,
|
|||
Uint32 aTableId = table->m_id;
|
||||
DBUG_PRINT("enter", ("table=%u value=%llu op=%u", aTableId, opValue, op));
|
||||
|
||||
NdbTransaction* tConnection;
|
||||
NdbOperation* tOperation= 0; // Compiler warning if not initialized
|
||||
NdbTransaction* tConnection = NULL;
|
||||
NdbOperation* tOperation = NULL;
|
||||
Uint64 tValue;
|
||||
NdbRecAttr* tRecAttrResult;
|
||||
|
||||
CHECK_STATUS_MACRO_ZERO;
|
||||
CHECK_STATUS_MACRO;
|
||||
|
||||
if (initAutoIncrement())
|
||||
goto error_return;
|
||||
if (initAutoIncrement() == -1)
|
||||
goto error_handler;
|
||||
|
||||
tConnection = this->startTransaction();
|
||||
if (tConnection == NULL)
|
||||
goto error_return;
|
||||
goto error_handler;
|
||||
|
||||
tOperation = tConnection->getNdbOperation(m_sys_tab_0);
|
||||
if (tOperation == NULL)
|
||||
|
@ -1065,7 +1070,7 @@ Ndb::opTupleIdOnNdb(const NdbTableImpl* table,
|
|||
{
|
||||
case 0:
|
||||
tOperation->interpretedUpdateTuple();
|
||||
tOperation->equal("SYSKEY_0", aTableId );
|
||||
tOperation->equal("SYSKEY_0", aTableId);
|
||||
tOperation->incValue("NEXTID", opValue);
|
||||
tRecAttrResult = tOperation->getValue("NEXTID");
|
||||
|
||||
|
@ -1130,14 +1135,21 @@ Ndb::opTupleIdOnNdb(const NdbTableImpl* table,
|
|||
|
||||
DBUG_RETURN(0);
|
||||
|
||||
error_handler:
|
||||
theError.code = tConnection->theError.code;
|
||||
this->closeTransaction(tConnection);
|
||||
error_return:
|
||||
error_handler:
|
||||
DBUG_PRINT("error", ("ndb=%d con=%d op=%d",
|
||||
theError.code,
|
||||
tConnection ? tConnection->theError.code : -1,
|
||||
tOperation ? tOperation->theError.code : -1));
|
||||
tConnection != NULL ? tConnection->theError.code : -1,
|
||||
tOperation != NULL ? tOperation->theError.code : -1));
|
||||
|
||||
if (theError.code == 0 && tConnection != NULL)
|
||||
theError.code = tConnection->theError.code;
|
||||
if (theError.code == 0 && tOperation != NULL)
|
||||
theError.code = tOperation->theError.code;
|
||||
DBUG_ASSERT(theError.code != 0);
|
||||
|
||||
if (tConnection != NULL)
|
||||
this->closeTransaction(tConnection);
|
||||
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue