Merge jhe@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb

into  dev3-240.dev.cn.tlan:/home/justin.he/mysql/mysql-5.1/mysql-5.1-new-ndb-bj.merge
parents 8b049838 ac52f24e
......@@ -582,6 +582,7 @@ class LqhKeyRef {
* Reciver(s)
*/
friend class Dbtc;
friend class Restore;
/**
* Sender(s)
......
Next QMGR 1
Next NDBCNTR 1000
Next NDBCNTR 1001
Next NDBFS 2000
Next DBACC 3002
Next DBTUP 4024
Next DBTUP 4029
Next DBLQH 5045
Next DBDICT 6007
Next DBDIH 7181
......@@ -512,3 +512,12 @@ Dbtup:
4022 - addTuxEntries - fail before add of first entry
4023 - addTuxEntries - fail add of last entry (the entry for last index)
4025: Fail all inserts with out of memory
4026: Fail one insert with oom
4027: Fail inserts randomly with oom
4028: Fail one random insert with oom
NDBCNTR:
1000: Crash insertion on SystemError::CopyFragRef
......@@ -10570,6 +10570,15 @@ void Dblqh::copyCompletedLab(Signal* signal)
closeCopyLab(signal);
return;
}//if
if (scanptr.p->scanState == ScanRecord::WAIT_LQHKEY_COPY &&
scanptr.p->scanErrorCounter)
{
jam();
closeCopyLab(signal);
return;
}
if (scanptr.p->scanState == ScanRecord::WAIT_LQHKEY_COPY) {
jam();
/*---------------------------------------------------------------------------*/
......@@ -10658,13 +10667,16 @@ void Dblqh::continueCopyAfterBlockedLab(Signal* signal)
void Dblqh::copyLqhKeyRefLab(Signal* signal)
{
ndbrequire(tcConnectptr.p->transid[1] == signal->theData[4]);
tcConnectptr.p->copyCountWords -= signal->theData[3];
Uint32 copyWords = signal->theData[3];
scanptr.i = tcConnectptr.p->tcScanRec;
c_scanRecordPool.getPtr(scanptr);
scanptr.p->scanErrorCounter++;
tcConnectptr.p->errorCode = terrorCode;
closeCopyLab(signal);
return;
LqhKeyConf* conf = (LqhKeyConf*)signal->getDataPtrSend();
conf->transId1 = copyWords;
conf->transId2 = tcConnectptr.p->transid[1];
copyCompletedLab(signal);
}//Dblqh::copyLqhKeyRefLab()
void Dblqh::closeCopyLab(Signal* signal)
......@@ -10675,6 +10687,7 @@ void Dblqh::closeCopyLab(Signal* signal)
// Wait until all of those have arrived until we start the
// close process.
/*---------------------------------------------------------------------------*/
scanptr.p->scanState = ScanRecord::WAIT_LQHKEY_COPY;
jam();
return;
}//if
......
......@@ -1259,6 +1259,28 @@ int Dbtup::handleInsertReq(Signal* signal,
{
shrink_tuple(req_struct, sizes+2, regTabPtr, true);
}
if (ERROR_INSERTED(4025))
{
goto mem_error;
}
if (ERROR_INSERTED(4026))
{
CLEAR_ERROR_INSERT_VALUE;
goto mem_error;
}
if (ERROR_INSERTED(4027) && (rand() % 100) > 25)
{
goto mem_error;
}
if (ERROR_INSERTED(4028) && (rand() % 100) > 25)
{
CLEAR_ERROR_INSERT_VALUE;
goto mem_error;
}
/**
* Alloc memory
......
......@@ -110,6 +110,7 @@ Dbtup::Dbtup(Block_context& ctx, Pgman* pgman)
cnoOfAllocatedPages = 0;
initData();
CLEAR_ERROR_INSERT_VALUE;
}//Dbtup::Dbtup()
Dbtup::~Dbtup()
......@@ -260,7 +261,6 @@ void Dbtup::execSTTOR(Signal* signal)
switch (startPhase) {
case ZSTARTPHASE1:
jam();
CLEAR_ERROR_INSERT_VALUE;
ndbrequire((c_lqh= (Dblqh*)globalData.getBlock(DBLQH)) != 0);
ndbrequire((c_tsman= (Tsman*)globalData.getBlock(TSMAN)) != 0);
ndbrequire((c_lgman= (Lgman*)globalData.getBlock(LGMAN)) != 0);
......
......@@ -2918,6 +2918,25 @@ Lgman::stop_run_undo_log(Signal* signal)
ptr.p->m_file_pos[TAIL] = tail;
init_logbuffer_pointers(ptr);
{
Buffer_idx head= ptr.p->m_file_pos[HEAD];
Ptr<Undofile> file;
m_file_pool.getPtr(file, head.m_ptr_i);
if (head.m_idx == file.p->m_file_size - 1)
{
Local_undofile_list files(m_file_pool, ptr.p->m_files);
if(!files.next(file))
{
jam();
files.first(file);
}
head.m_idx = 0;
head.m_ptr_i = file.i;
ptr.p->m_file_pos[HEAD] = head;
}
}
ptr.p->m_free_file_words = (Uint64)File_formats::UNDO_PAGE_WORDS *
(Uint64)compute_free_file_pages(ptr);
ptr.p->m_next_reply_ptr_i = ptr.p->m_file_pos[HEAD].m_ptr_i;
......
......@@ -197,6 +197,7 @@ void Ndbcntr::execSYSTEM_ERROR(Signal* signal)
break;
case SystemError::CopyFragRefError:
CRASH_INSERTION(1000);
BaseString::snprintf(buf, sizeof(buf),
"Killed by node %d as "
"copyfrag failed, error: %u",
......
......@@ -1151,8 +1151,23 @@ Restore::calulate_hash(Uint32 tableId, const Uint32 *src)
}
void
Restore::execLQHKEYREF(Signal*)
Restore::execLQHKEYREF(Signal* signal)
{
FilePtr file_ptr;
LqhKeyRef* ref = (LqhKeyRef*)signal->getDataPtr();
m_file_pool.getPtr(file_ptr, ref->connectPtr);
char buf[255], name[100];
BaseString::snprintf(name, sizeof(name), "%u/T%dF%d",
file_ptr.p->m_lcp_no,
file_ptr.p->m_table_id,
file_ptr.p->m_fragment_id);
BaseString::snprintf(buf, sizeof(buf),
"Error %d during restore of %s",
ref->errorCode, name);
progError(__LINE__, NDBD_EXIT_INVALID_LCP_FILE, buf);
ndbrequire(false);
}
......
......@@ -1415,6 +1415,58 @@ runBug26450(NDBT_Context* ctx, NDBT_Step* step)
return NDBT_OK;
}
int
runBug27003(NDBT_Context* ctx, NDBT_Step* step)
{
int result = NDBT_OK;
int loops = ctx->getNumLoops();
int records = ctx->getNumRecords();
NdbRestarter res;
static const int errnos[] = { 4025, 4026, 4027, 4028, 0 };
int node = res.getRandomNotMasterNodeId(rand());
ndbout_c("node: %d", node);
if (res.restartOneDbNode(node, true, true, true))
return NDBT_FAILED;
Uint32 pos = 0;
for (Uint32 i = 0; i<loops; i++)
{
while (errnos[pos] != 0)
{
ndbout_c("Tesing err: %d", errnos[pos]);
if (res.waitNodesNoStart(&node, 1))
return NDBT_FAILED;
if (res.insertErrorInNode(node, 1000))
return NDBT_FAILED;
if (res.insertErrorInNode(node, errnos[pos]))
return NDBT_FAILED;
int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 3 };
if (res.dumpStateOneNode(node, val2, 2))
return NDBT_FAILED;
res.startNodes(&node, 1);
res.waitNodesStartPhase(&node, 1, 2);
pos++;
}
pos = 0;
}
if (res.waitNodesNoStart(&node, 1))
return NDBT_FAILED;
res.startNodes(&node, 1);
if (res.waitClusterStarted())
return NDBT_FAILED;
return NDBT_OK;
}
NDBT_TESTSUITE(testNodeRestart);
TESTCASE("NoLoad",
"Test that one node at a time can be stopped and then restarted "\
......@@ -1763,6 +1815,9 @@ TESTCASE("Bug26450", ""){
INITIALIZER(runLoadTable);
INITIALIZER(runBug26450);
}
TESTCASE("Bug27003", ""){
INITIALIZER(runBug27003);
}
NDBT_TESTSUITE_END(testNodeRestart);
int main(int argc, const char** argv){
......
......@@ -469,6 +469,10 @@ max-time: 1000
cmd: testScan
args: -n ScanVariants
max-time: 1000
cmd: testNodeRestart
args: -n Bug27003 T1
max-time: 500
cmd: testNodeRestart
args: -n Bug15587 T1
......
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