Commit 2e583e96 authored by unknown's avatar unknown

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


storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp:
  Auto merged
parents d87ba06c f653ed82
...@@ -582,6 +582,7 @@ class LqhKeyRef { ...@@ -582,6 +582,7 @@ class LqhKeyRef {
* Reciver(s) * Reciver(s)
*/ */
friend class Dbtc; friend class Dbtc;
friend class Restore;
/** /**
* Sender(s) * Sender(s)
......
Next QMGR 1 Next QMGR 1
Next NDBCNTR 1000 Next NDBCNTR 1001
Next NDBFS 2000 Next NDBFS 2000
Next DBACC 3002 Next DBACC 3002
Next DBTUP 4024 Next DBTUP 4029
Next DBLQH 5045 Next DBLQH 5045
Next DBDICT 6007 Next DBDICT 6007
Next DBDIH 7181 Next DBDIH 7181
...@@ -512,3 +512,12 @@ Dbtup: ...@@ -512,3 +512,12 @@ Dbtup:
4022 - addTuxEntries - fail before add of first entry 4022 - addTuxEntries - fail before add of first entry
4023 - addTuxEntries - fail add of last entry (the entry for last index) 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) ...@@ -10570,6 +10570,15 @@ void Dblqh::copyCompletedLab(Signal* signal)
closeCopyLab(signal); closeCopyLab(signal);
return; return;
}//if }//if
if (scanptr.p->scanState == ScanRecord::WAIT_LQHKEY_COPY &&
scanptr.p->scanErrorCounter)
{
jam();
closeCopyLab(signal);
return;
}
if (scanptr.p->scanState == ScanRecord::WAIT_LQHKEY_COPY) { if (scanptr.p->scanState == ScanRecord::WAIT_LQHKEY_COPY) {
jam(); jam();
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
...@@ -10658,13 +10667,16 @@ void Dblqh::continueCopyAfterBlockedLab(Signal* signal) ...@@ -10658,13 +10667,16 @@ void Dblqh::continueCopyAfterBlockedLab(Signal* signal)
void Dblqh::copyLqhKeyRefLab(Signal* signal) void Dblqh::copyLqhKeyRefLab(Signal* signal)
{ {
ndbrequire(tcConnectptr.p->transid[1] == signal->theData[4]); ndbrequire(tcConnectptr.p->transid[1] == signal->theData[4]);
tcConnectptr.p->copyCountWords -= signal->theData[3]; Uint32 copyWords = signal->theData[3];
scanptr.i = tcConnectptr.p->tcScanRec; scanptr.i = tcConnectptr.p->tcScanRec;
c_scanRecordPool.getPtr(scanptr); c_scanRecordPool.getPtr(scanptr);
scanptr.p->scanErrorCounter++; scanptr.p->scanErrorCounter++;
tcConnectptr.p->errorCode = terrorCode; 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() }//Dblqh::copyLqhKeyRefLab()
void Dblqh::closeCopyLab(Signal* signal) void Dblqh::closeCopyLab(Signal* signal)
...@@ -10675,6 +10687,7 @@ 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 // Wait until all of those have arrived until we start the
// close process. // close process.
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
scanptr.p->scanState = ScanRecord::WAIT_LQHKEY_COPY;
jam(); jam();
return; return;
}//if }//if
......
...@@ -1259,6 +1259,28 @@ int Dbtup::handleInsertReq(Signal* signal, ...@@ -1259,6 +1259,28 @@ int Dbtup::handleInsertReq(Signal* signal,
{ {
shrink_tuple(req_struct, sizes+2, regTabPtr, true); 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 * Alloc memory
......
...@@ -110,6 +110,7 @@ Dbtup::Dbtup(Block_context& ctx, Pgman* pgman) ...@@ -110,6 +110,7 @@ Dbtup::Dbtup(Block_context& ctx, Pgman* pgman)
cnoOfAllocatedPages = 0; cnoOfAllocatedPages = 0;
initData(); initData();
CLEAR_ERROR_INSERT_VALUE;
}//Dbtup::Dbtup() }//Dbtup::Dbtup()
Dbtup::~Dbtup() Dbtup::~Dbtup()
...@@ -260,7 +261,6 @@ void Dbtup::execSTTOR(Signal* signal) ...@@ -260,7 +261,6 @@ void Dbtup::execSTTOR(Signal* signal)
switch (startPhase) { switch (startPhase) {
case ZSTARTPHASE1: case ZSTARTPHASE1:
jam(); jam();
CLEAR_ERROR_INSERT_VALUE;
ndbrequire((c_lqh= (Dblqh*)globalData.getBlock(DBLQH)) != 0); ndbrequire((c_lqh= (Dblqh*)globalData.getBlock(DBLQH)) != 0);
ndbrequire((c_tsman= (Tsman*)globalData.getBlock(TSMAN)) != 0); ndbrequire((c_tsman= (Tsman*)globalData.getBlock(TSMAN)) != 0);
ndbrequire((c_lgman= (Lgman*)globalData.getBlock(LGMAN)) != 0); ndbrequire((c_lgman= (Lgman*)globalData.getBlock(LGMAN)) != 0);
......
...@@ -2918,6 +2918,25 @@ Lgman::stop_run_undo_log(Signal* signal) ...@@ -2918,6 +2918,25 @@ Lgman::stop_run_undo_log(Signal* signal)
ptr.p->m_file_pos[TAIL] = tail; ptr.p->m_file_pos[TAIL] = tail;
init_logbuffer_pointers(ptr); 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 * ptr.p->m_free_file_words = (Uint64)File_formats::UNDO_PAGE_WORDS *
(Uint64)compute_free_file_pages(ptr); (Uint64)compute_free_file_pages(ptr);
ptr.p->m_next_reply_ptr_i = ptr.p->m_file_pos[HEAD].m_ptr_i; 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) ...@@ -197,6 +197,7 @@ void Ndbcntr::execSYSTEM_ERROR(Signal* signal)
break; break;
case SystemError::CopyFragRefError: case SystemError::CopyFragRefError:
CRASH_INSERTION(1000);
BaseString::snprintf(buf, sizeof(buf), BaseString::snprintf(buf, sizeof(buf),
"Killed by node %d as " "Killed by node %d as "
"copyfrag failed, error: %u", "copyfrag failed, error: %u",
......
...@@ -1151,8 +1151,23 @@ Restore::calulate_hash(Uint32 tableId, const Uint32 *src) ...@@ -1151,8 +1151,23 @@ Restore::calulate_hash(Uint32 tableId, const Uint32 *src)
} }
void 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); ndbrequire(false);
} }
......
...@@ -1415,6 +1415,58 @@ runBug26450(NDBT_Context* ctx, NDBT_Step* step) ...@@ -1415,6 +1415,58 @@ runBug26450(NDBT_Context* ctx, NDBT_Step* step)
return NDBT_OK; 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); NDBT_TESTSUITE(testNodeRestart);
TESTCASE("NoLoad", TESTCASE("NoLoad",
"Test that one node at a time can be stopped and then restarted "\ "Test that one node at a time can be stopped and then restarted "\
...@@ -1763,6 +1815,9 @@ TESTCASE("Bug26450", ""){ ...@@ -1763,6 +1815,9 @@ TESTCASE("Bug26450", ""){
INITIALIZER(runLoadTable); INITIALIZER(runLoadTable);
INITIALIZER(runBug26450); INITIALIZER(runBug26450);
} }
TESTCASE("Bug27003", ""){
INITIALIZER(runBug27003);
}
NDBT_TESTSUITE_END(testNodeRestart); NDBT_TESTSUITE_END(testNodeRestart);
int main(int argc, const char** argv){ int main(int argc, const char** argv){
......
...@@ -469,6 +469,10 @@ max-time: 1000 ...@@ -469,6 +469,10 @@ max-time: 1000
cmd: testScan cmd: testScan
args: -n ScanVariants args: -n ScanVariants
max-time: 1000
cmd: testNodeRestart
args: -n Bug27003 T1
max-time: 500 max-time: 500
cmd: testNodeRestart cmd: testNodeRestart
args: -n Bug15587 T1 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