mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 03:21:53 +01:00
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
This commit is contained in:
commit
2e583e96ee
10 changed files with 146 additions and 7 deletions
|
@ -582,6 +582,7 @@ class LqhKeyRef {
|
|||
* Reciver(s)
|
||||
*/
|
||||
friend class Dbtc;
|
||||
friend class Restore;
|
||||
|
||||
/**
|
||||
* Sender(s)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue