2671 Jonas Oreland 2008-09-25
ndb - atrt
fix replication in 6.0
allow configurations wo/ cluster
modified:
storage/ndb/test/run-test/db.cpp
storage/ndb/test/run-test/main.cpp
storage/ndb/test/run-test/setup.cpp
2670 Tomas Ulin 2008-09-24
Bug #39404 Core in NdbEventBuffer::deleteUsedEventOperations()
modified:
storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
2669 Jonas Oreland 2008-09-19
ndb - bug#39549 - incorrectly handled resource shortage in TC::scanfragrec
modified:
storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
storage/ndb/src/ndbapi/ndberror.c
2668 Martin Skold 2008-09-19
Added extra checking at constraint violation during mult-row insert
modified:
mysql-test/suite/ndb/r/ndb_insert.result
mysql-test/suite/ndb/t/ndb_insert.test
2667 Jonas Oreland 2008-09-18
ndb - bug#39518 - report error back on SUB_CREATE_REF
modified:
storage/ndb/src/kernel/blocks/trix/Trix.cpp
2666 Tomas Ulin 2008-09-17 [merge]
merge
modified:
storage/ndb/test/include/NDBT_Test.hpp
storage/ndb/test/run-test/autotest-run.sh
storage/ndb/test/src/NDBT_Test.cpp
2665 Tomas Ulin 2008-09-11
fix for machines with clock_monotonic defined but not implemented
modified:
storage/ndb/src/common/portlib/NdbTick.c
storage/ndb/src/common/util/ndb_init.cpp
=== modified file 'mysql-test/suite/ndb/r/ndb_insert.result'
--- a/mysql-test/suite/ndb/r/ndb_insert.result 2007-11-05 20:11:15 +0000
+++ b/mysql-test/suite/ndb/r/ndb_insert.result 2008-09-19 09:14:38 +0000
@@ -419,8 +419,8 @@ COUNT(*)
INSERT INTO t1 VALUES (1,1,1);
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
INSERT INTO t1 VALUES
-(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),
-(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10);
+(-1,-1,-1),(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),
+(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10),(9999,9999,9999);
ERROR 23000: Can't write; duplicate key in table 't1'
select count(*) from t1;
count(*)
=== modified file 'mysql-test/suite/ndb/t/ndb_insert.test'
--- a/mysql-test/suite/ndb/t/ndb_insert.test 2007-11-05 20:11:15 +0000
+++ b/mysql-test/suite/ndb/t/ndb_insert.test 2008-09-19 09:14:38 +0000
@@ -438,8 +438,8 @@ INSERT INTO t1 VALUES (1,1,1);
--error 1022
INSERT INTO t1 VALUES
-(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),
-(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10);
+(-1,-1,-1),(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),
+(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10),(9999,9999,9999);
select count(*) from t1;
=== modified file 'storage/ndb/src/common/portlib/NdbTick.c'
--- a/storage/ndb/src/common/portlib/NdbTick.c 2008-06-09 11:57:17 +0000
+++ b/storage/ndb/src/common/portlib/NdbTick.c 2008-09-11 11:40:54 +0000
@@ -26,15 +26,34 @@
#ifdef HAVE_CLOCK_GETTIME
#ifdef CLOCK_MONOTONIC
-#define CLOCK CLOCK_MONOTONIC
+static clockid_t NdbTick_clk_id = CLOCK_MONOTONIC;
#else
-#define CLOCK CLOCK_REALTIME
+static clockid_t NdbTick_clk_id = CLOCK_REALTIME;
#endif
+void NdbTick_Init()
+{
+ struct timespec tick_time;
+ if (clock_gettime(NdbTick_clk_id, &tick_time) == 0)
+ return;
+#ifdef CLOCK_MONOTONIC
+ fprintf(stderr, "Failed to use CLOCK_MONOTONIC for clock_realtime,"
+ " errno= %u\n", errno);
+ fflush(stderr);
+ NdbTick_clk_id = CLOCK_REALTIME;
+ if (clock_gettime(NdbTick_clk_id, &tick_time) == 0)
+ return;
+#endif
+ fprintf(stderr, "Failed to use CLOCK_REALTIME for clock_realtime,"
+ " errno=%u. Aborting\n", errno);
+ fflush(stderr);
+ abort();
+}
+
NDB_TICKS NdbTick_CurrentMillisecond(void)
{
struct timespec tick_time;
- clock_gettime(CLOCK, &tick_time);
+ clock_gettime(NdbTick_clk_id, &tick_time);
return
((NDB_TICKS)tick_time.tv_sec) * ((NDB_TICKS)MILLISEC_PER_SEC) +
@@ -44,12 +63,16 @@ NDB_TICKS NdbTick_CurrentMillisecond(voi
int
NdbTick_CurrentMicrosecond(NDB_TICKS * secs, Uint32 * micros){
struct timespec t;
- int res = clock_gettime(CLOCK, &t);
+ int res = clock_gettime(NdbTick_clk_id, &t);
* secs = t.tv_sec;
* micros = t.tv_nsec / 1000;
return res;
}
#else
+void NdbTick_Init()
+{
+}
+
NDB_TICKS NdbTick_CurrentMillisecond(void)
{
struct timeval tick_time;
=== modified file 'storage/ndb/src/common/util/ndb_init.cpp'
--- a/storage/ndb/src/common/util/ndb_init.cpp 2008-06-09 11:57:17 +0000
+++ b/storage/ndb/src/common/util/ndb_init.cpp 2008-09-11 11:40:54 +0000
@@ -27,6 +27,7 @@ extern void destroy_event_logger(class E
static int ndb_init_called = 0;
extern "C" void NdbCondition_Init();
+extern "C" void NdbTick_Init();
extern "C"
{
@@ -46,7 +47,7 @@ ndb_init_internal()
exit(1);
}
}
-
+ NdbTick_Init();
NdbCondition_Init();
}
=== modified file 'storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp 2008-08-11 10:41:11 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp 2008-09-19 21:49:00 +0000
@@ -123,6 +123,7 @@
#define ZUNKNOWN_TABLE_ERROR 285
#define ZNODEFAIL_BEFORE_COMMIT 286
#define ZINDEX_CORRUPT_ERROR 287
+#define ZSCAN_FRAGREC_ERROR 291
// ----------------------------------------
// Seize error
@@ -1418,7 +1419,7 @@ private:
UintR anApiConnectPtr);
void handleScanStop(Signal* signal, UintR aFailedNode);
void initScanTcrec(Signal* signal);
- void initScanrec(ScanRecordPtr, const class ScanTabReq*,
+ Uint32 initScanrec(ScanRecordPtr, const class ScanTabReq*,
const UintR scanParallel,
const UintR noOprecPerFrag);
void initScanfragrec(Signal* signal);
=== modified file 'storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp 2008-08-20 20:00:56 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp 2008-09-19 21:49:00 +0000
@@ -9227,7 +9227,12 @@ void Dbtc::execSCAN_TABREQ(Signal* signa
ndbrequire(transP->apiScanRec == RNIL);
ndbrequire(scanptr.p->scanApiRec == RNIL);
- initScanrec(scanptr, scanTabReq, scanParallel, noOprecPerFrag);
+ errCode = initScanrec(scanptr, scanTabReq, scanParallel, noOprecPerFrag);
+ if (unlikely(errCode))
+ {
+ jam();
+ goto SCAN_TAB_error;
+ }
transP->apiScanRec = scanptr.i;
transP->returncode = 0;
@@ -9317,10 +9322,11 @@ SCAN_TAB_error_no_state_change:
return;
}//Dbtc::execSCAN_TABREQ()
-void Dbtc::initScanrec(ScanRecordPtr scanptr,
- const ScanTabReq * scanTabReq,
- UintR scanParallel,
- UintR noOprecPerFrag)
+Uint32
+Dbtc::initScanrec(ScanRecordPtr scanptr,
+ const ScanTabReq * scanTabReq,
+ UintR scanParallel,
+ UintR noOprecPerFrag)
{
const UintR ri = scanTabReq->requestInfo;
scanptr.p->scanTcrec = tcConnectptr.i;
@@ -9355,7 +9361,11 @@ void Dbtc::initScanrec(ScanRecordPtr sca
for (Uint32 i = 0; i < scanParallel; i++) {
jam();
ScanFragRecPtr ptr;
- ndbrequire(list.seize(ptr));
+ if (unlikely(list.seize(ptr) == false))
+ {
+ jam();
+ goto errout;
+ }
ptr.p->scanFragState = ScanFragRec::IDLE;
ptr.p->scanRec = scanptr.i;
ptr.p->scanFragId = 0;
@@ -9365,6 +9375,10 @@ void Dbtc::initScanrec(ScanRecordPtr sca
(* (ScanTabReq::getRangeScanFlag(ri) ?
&c_counters.c_range_scan_count :
&c_counters.c_scan_count))++;
+ return 0;
+errout:
+ list.release();
+ return ZSCAN_FRAGREC_ERROR;
}//Dbtc::initScanrec()
void Dbtc::scanTabRefLab(Signal* signal, Uint32 errCode)
=== modified file 'storage/ndb/src/kernel/blocks/trix/Trix.cpp'
--- a/storage/ndb/src/kernel/blocks/trix/Trix.cpp 2008-02-20 09:04:29 +0000
+++ b/storage/ndb/src/kernel/blocks/trix/Trix.cpp 2008-09-18 14:29:25 +0000
@@ -541,7 +541,11 @@ void Trix::execUTIL_PREPARE_REF(Signal*
return;
}
subRecPtr.p = subRec;
- subRec->errorCode = BuildIndxRef::InternalError;
+ subRec->errorCode = (BuildIndxRef::ErrorCode)utilPrepareRef->errorCode;
+
+ UtilReleaseConf* conf = (UtilReleaseConf*)signal->getDataPtrSend();
+ conf->senderData = subRecPtr.i;
+ execUTIL_RELEASE_CONF(signal);
}
void Trix::execUTIL_EXECUTE_CONF(Signal* signal)
@@ -611,20 +615,27 @@ void Trix::execSUB_CREATE_REF(Signal* si
{
jamEntry();
DBUG_ENTER("Trix::execSUB_CREATE_REF");
- // THIS SIGNAL IS NEVER SENT FROM SUMA?
- /*
+
SubCreateRef * subCreateRef = (SubCreateRef *)signal->getDataPtr();
SubscriptionRecPtr subRecPtr;
SubscriptionRecord* subRec;
- subRecPtr.i = subCreateRef->subscriberData;
- if ((subRec = c_theSubscriptions.getPtr(subRecPtr.i)) == NULL) {
+ subRecPtr.i = subCreateRef->senderData;
+ if ((subRec = c_theSubscriptions.getPtr(subRecPtr.i)) == NULL)
+ {
printf("Trix::execSUB_CREATE_REF: Failed to find subscription data %u\n",
subRecPtr.i);
return;
}
subRecPtr.p = subRec;
- buildFailed(signal, subRecPtr, BuildIndxRef::InternalError);
- */
+ subRecPtr.p->errorCode = (BuildIndxRef::ErrorCode)subCreateRef->errorCode;
+
+ UtilReleaseReq * const req = (UtilReleaseReq*)signal->getDataPtrSend();
+ req->prepareId = subRecPtr.p->prepareId;
+ req->senderData = subRecPtr.i;
+
+ sendSignal(DBUTIL_REF, GSN_UTIL_RELEASE_REQ, signal,
+ UtilReleaseReq::SignalLength, JBB);
+
DBUG_VOID_RETURN;
}
@@ -731,6 +742,7 @@ void Trix::setupSubscription(Signal* sig
sendSignal(SUMA_REF, GSN_SUB_CREATE_REQ,
signal, SubCreateReq::SignalLength, JBB);
+
DBUG_VOID_RETURN;
}
=== modified file 'storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp'
--- a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp 2008-06-25 12:49:13 +0000
+++ b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp 2008-09-24 12:27:11 +0000
@@ -1326,7 +1326,9 @@ NdbEventBuffer::nextEvent()
{
// moved to next gci, check if any references have been
// released when completing the last gci
+ NdbMutex_Lock(m_mutex);
deleteUsedEventOperations();
+ NdbMutex_Unlock(m_mutex);
gci_ops = m_available_data.delete_next_gci_ops();
}
if (!gci_ops->m_consistent)
@@ -1357,12 +1359,14 @@ NdbEventBuffer::nextEvent()
// free all "per gci unique" collected operations
// completed gci, check if any references have been
// released when completing the gci
+ NdbMutex_Lock(m_mutex);
EventBufData_list::Gci_ops *gci_ops = m_available_data.first_gci_ops();
while (gci_ops)
{
deleteUsedEventOperations();
gci_ops = m_available_data.delete_next_gci_ops();
}
+ NdbMutex_Unlock(m_mutex);
DBUG_RETURN_EVENT(0);
}
=== modified file 'storage/ndb/src/ndbapi/ndberror.c'
--- a/storage/ndb/src/ndbapi/ndberror.c 2008-04-25 15:12:47 +0000
+++ b/storage/ndb/src/ndbapi/ndberror.c 2008-09-19 21:49:00 +0000
@@ -191,6 +191,7 @@ ErrorBundle ErrorCodes[] = {
{ 1501, DMEC, TR, "Out of undo space" },
{ 288, DMEC, TR, "Out of index operations in transaction coordinator (increase
MaxNoOfConcurrentIndexOperations)" },
{ 289, DMEC, TR, "Out of transaction buffer memory in TC (increase
TransactionBufferMemory)" },
+ { 291, DMEC, TR, "Out of scanfrag records in TC (increase MaxNoOfLocalScans)" },
/**
* InsufficientSpace
=== modified file 'storage/ndb/test/include/NDBT_Test.hpp'
--- a/storage/ndb/test/include/NDBT_Test.hpp 2007-03-01 09:43:14 +0000
+++ b/storage/ndb/test/include/NDBT_Test.hpp 2008-09-11 10:08:57 +0000
@@ -208,7 +208,7 @@ public:
virtual void print() = 0;
virtual void printHTML() = 0;
- const char* getName(){return name;};
+ const char* getName() const { return _name.c_str(); };
virtual bool tableExists(NdbDictionary::Table* aTable) = 0;
virtual bool isVerify(const NdbDictionary::Table* aTable) = 0;
@@ -238,8 +238,6 @@ protected:
BaseString _name;
BaseString _comment;
- const char* name;
- const char* comment;
NDBT_TestSuite* suite;
Properties props;
NdbTimer timer;
=== modified file 'storage/ndb/test/run-test/autotest-run.sh'
--- a/storage/ndb/test/run-test/autotest-run.sh 2007-08-31 14:55:59 +0000
+++ b/storage/ndb/test/run-test/autotest-run.sh 2008-09-11 08:44:49 +0000
@@ -258,7 +258,8 @@ tar cfz $tar_dir/$tarfile `basename $p2`
if [ "$report" ]
then
- scp $tar_dir/$tarfile $result_host:$result_path/
+ scp $tar_dir/$tarfile $result_host:$result_path/${tarfile}.upload
+ ssh $result_host mv $result_path/${tarfile}.upload $result_path/${tarfile}
fi
cd $p
=== modified file 'storage/ndb/test/run-test/db.cpp'
--- a/storage/ndb/test/run-test/db.cpp 2008-08-27 11:42:30 +0000
+++ b/storage/ndb/test/run-test/db.cpp 2008-09-25 10:21:14 +0000
@@ -23,6 +23,17 @@ static bool setup_repl(atrt_config&);
static atrt_process* f_mysqld = 0;
+static
+int
+run_query(atrt_process* src, const char * query)
+{
+ g_logger.debug("%s:%s - %s",
+ src->m_cluster->m_name.c_str(),
+ src->m_host->m_hostname.c_str(),
+ query);
+ return mysql_query(&src->m_mysql, query);
+}
+
bool
setup_db(atrt_config& config)
{
@@ -398,16 +409,16 @@ populate_db(atrt_config& config, atrt_pr
static
bool
-setup_repl(atrt_process* src, atrt_process* dst)
+setup_repl(atrt_process* dst, atrt_process* src)
{
- if (mysql_query(&src->m_mysql, "STOP SLAVE"))
+ if (run_query(src, "STOP SLAVE"))
{
g_logger.error("Failed to stop slave: %s",
mysql_error(&src->m_mysql));
return false;
}
- if (mysql_query(&src->m_mysql, "RESET SLAVE"))
+ if (run_query(src, "RESET SLAVE"))
{
g_logger.error("Failed to reset slave: %s",
mysql_error(&src->m_mysql));
@@ -421,7 +432,7 @@ setup_repl(atrt_process* src, atrt_proce
dst->m_host->m_hostname.c_str(),
atoi(find(dst, "--port=")));
- if (mysql_query(&src->m_mysql, tmp.c_str()))
+ if (run_query(src, tmp.c_str()))
{
g_logger.error("Failed to setup repl from %s to %s: %s",
src->m_host->m_hostname.c_str(),
@@ -430,7 +441,7 @@ setup_repl(atrt_process* src, atrt_proce
return false;
}
- if (mysql_query(&src->m_mysql, "START SLAVE"))
+ if (run_query(src, "START SLAVE"))
{
g_logger.error("Failed to start slave: %s",
mysql_error(&src->m_mysql));
=== modified file 'storage/ndb/test/run-test/main.cpp'
--- a/storage/ndb/test/run-test/main.cpp 2008-08-27 11:42:30 +0000
+++ b/storage/ndb/test/run-test/main.cpp 2008-09-25 10:21:14 +0000
@@ -767,8 +767,7 @@ wait_ndb(atrt_config& config, int goal){
}
if(handle == 0){
- g_logger.critical("Unable to find mgm handle");
- return false;
+ return true;
}
if(goal == NDB_MGM_NODE_STATUS_STARTED){
=== modified file 'storage/ndb/test/run-test/setup.cpp'
--- a/storage/ndb/test/run-test/setup.cpp 2008-09-04 09:43:51 +0000
+++ b/storage/ndb/test/run-test/setup.cpp 2008-09-25 10:21:14 +0000
@@ -34,10 +34,12 @@ struct proc_option f_options[] = {
,{ "--host=", atrt_process::AP_CLIENT, 0 }
,{ "--server-id=", atrt_process::AP_MYSQLD, PO_REP }
,{ "--log-bin", atrt_process::AP_MYSQLD, PO_REP_MASTER }
+#if 0
,{ "--master-host=", atrt_process::AP_MYSQLD, PO_REP_SLAVE }
,{ "--master-port=", atrt_process::AP_MYSQLD, PO_REP_SLAVE }
,{ "--master-user=", atrt_process::AP_MYSQLD, PO_REP_SLAVE }
,{ "--master-password=", atrt_process::AP_MYSQLD, PO_REP_SLAVE }
+#endif
,{ "--ndb-connectstring=", atrt_process::AP_MYSQLD | atrt_process::AP_CLUSTER
,PO_NDB }
,{ "--ndbcluster", atrt_process::AP_MYSQLD, PO_NDB }
=== modified file 'storage/ndb/test/src/NDBT_Test.cpp'
--- a/storage/ndb/test/src/NDBT_Test.cpp 2007-08-01 07:24:01 +0000
+++ b/storage/ndb/test/src/NDBT_Test.cpp 2008-09-11 10:08:57 +0000
@@ -371,14 +371,10 @@ NDBT_Finalizer::NDBT_Finalizer(NDBT_Test
NDBT_TestCase::NDBT_TestCase(NDBT_TestSuite* psuite,
const char* pname,
const char* pcomment) :
- name(strdup(pname)) ,
- comment(strdup(pcomment)),
+ _name(pname) ,
+ _comment(pcomment),
suite(psuite)
{
- _name.assign(pname);
- _comment.assign(pcomment);
- name= _name.c_str();
- comment= _comment.c_str();
assert(suite != NULL);
m_all_tables = false;
@@ -602,7 +598,7 @@ void NDBT_TestCaseImpl1::reportStepResul
int NDBT_TestCase::execute(NDBT_Context* ctx){
int res;
- ndbout << "- " << name << " started [" <<
ctx->suite->getDate()
+ ndbout << "- " << _name << " started [" <<
ctx->suite->getDate()
<< "]" << endl;
ctx->setCase(this);
@@ -654,11 +650,11 @@ int NDBT_TestCase::execute(NDBT_Context*
runFinal(ctx);
if (res == NDBT_OK) {
- ndbout << "- " << name << " PASSED [" <<
ctx->suite->getDate() << "]"
+ ndbout << "- " << _name << " PASSED [" <<
ctx->suite->getDate() << "]"
<< endl;
}
else {
- ndbout << "- " << name << " FAILED [" <<
ctx->suite->getDate() << "]"
+ ndbout << "- " << _name << " FAILED [" <<
ctx->suite->getDate() << "]"
<< endl;
}
return res;
@@ -741,7 +737,7 @@ void NDBT_TestCaseImpl1::saveTestResult(
void NDBT_TestCaseImpl1::printTestResult(){
char buf[255];
- ndbout << name<<endl;
+ ndbout << _name<<endl;
for (unsigned i = 0; i < testResults.size(); i++){
NDBT_TestCaseResult* tcr = testResults[i];
@@ -754,8 +750,9 @@ void NDBT_TestCaseImpl1::printTestResult
res = "FAILED TO CREATE TABLE";
else if (tcr->getResult() == FAILED_TO_DISCOVER)
res = "FAILED TO DISCOVER TABLE";
- BaseString::snprintf(buf, 255," %-10s %-5s %-20s", tcr->getName(), res,
tcr->getTimeStr());
- ndbout << buf<<endl;
+ BaseString::snprintf(buf, 255," %-10s %-5s %-20s",
+ tcr->getName(), res, tcr->getTimeStr());
+ ndbout << buf<<endl;
}
}
@@ -1444,13 +1441,13 @@ const char* NDBT_TestSuite::getDate(){
void NDBT_TestCaseImpl1::printHTML(){
ndbout << "<tr><td> </td>" << endl;
- ndbout << "<td name=tc>" << endl << name <<
"</td><td width=70%>"
- << comment << "</td></tr>" << endl;
+ ndbout << "<td name=tc>" << endl << _name <<
"</td><td width=70%>"
+ << _comment << "</td></tr>" << endl;
}
void NDBT_TestCaseImpl1::print(){
- ndbout << "Test case: " << name << endl;
- ndbout << "Description: "<< comment << endl;
+ ndbout << "Test case: " << _name << endl;
+ ndbout << "Description: "<< _comment << endl;
ndbout << "Parameters: " << endl;
| Thread |
|---|
| • bzr push into mysql-5.1 branch (jonas:2665 to 2671) Bug#39518, Bug#39549 | Jonas Oreland | 25 Sep |