mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge perch.ndb.mysql.com:/home/jonas/src/50-work
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.0-ndb ndb/src/kernel/blocks/dbdih/Dbdih.hpp: Auto merged ndb/src/kernel/blocks/dbdih/DbdihInit.cpp: Auto merged ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: Auto merged ndb/src/kernel/blocks/dblqh/DblqhMain.cpp: Auto merged ndb/test/ndbapi/testNodeRestart.cpp: Auto merged
This commit is contained in:
@@ -1366,6 +1366,7 @@ private:
|
|||||||
Uint32 csystemnodes;
|
Uint32 csystemnodes;
|
||||||
Uint32 currentgcp;
|
Uint32 currentgcp;
|
||||||
Uint32 c_newest_restorable_gci;
|
Uint32 c_newest_restorable_gci;
|
||||||
|
Uint32 c_set_initial_start_flag;
|
||||||
|
|
||||||
enum GcpMasterTakeOverState {
|
enum GcpMasterTakeOverState {
|
||||||
GMTOS_IDLE = 0,
|
GMTOS_IDLE = 0,
|
||||||
|
@@ -74,6 +74,7 @@ void Dbdih::initData()
|
|||||||
c_blockCommit = false;
|
c_blockCommit = false;
|
||||||
c_blockCommitNo = 1;
|
c_blockCommitNo = 1;
|
||||||
cntrlblockref = RNIL;
|
cntrlblockref = RNIL;
|
||||||
|
c_set_initial_start_flag = FALSE;
|
||||||
}//Dbdih::initData()
|
}//Dbdih::initData()
|
||||||
|
|
||||||
void Dbdih::initRecords()
|
void Dbdih::initRecords()
|
||||||
|
@@ -666,6 +666,12 @@ done:
|
|||||||
{
|
{
|
||||||
jam();
|
jam();
|
||||||
memcpy(sysfileData, cdata, sizeof(sysfileData));
|
memcpy(sysfileData, cdata, sizeof(sysfileData));
|
||||||
|
|
||||||
|
if (c_set_initial_start_flag)
|
||||||
|
{
|
||||||
|
jam();
|
||||||
|
Sysfile::setInitialStartOngoing(SYSFILE->systemRestartBits);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c_copyGCISlave.m_copyReason = reason;
|
c_copyGCISlave.m_copyReason = reason;
|
||||||
@@ -1259,6 +1265,11 @@ void Dbdih::execNDB_STTOR(Signal* signal)
|
|||||||
// The permission is given by the master node in the alive set.
|
// The permission is given by the master node in the alive set.
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
createMutexes(signal, 0);
|
createMutexes(signal, 0);
|
||||||
|
if (cstarttype == NodeState::ST_INITIAL_NODE_RESTART)
|
||||||
|
{
|
||||||
|
jam();
|
||||||
|
c_set_initial_start_flag = TRUE; // In sysfile...
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ZNDB_SPH3:
|
case ZNDB_SPH3:
|
||||||
@@ -10284,6 +10295,17 @@ Dbdih::sendLCP_COMPLETE_REP(Signal* signal){
|
|||||||
|
|
||||||
sendSignal(c_lcpState.m_masterLcpDihRef, GSN_LCP_COMPLETE_REP, signal,
|
sendSignal(c_lcpState.m_masterLcpDihRef, GSN_LCP_COMPLETE_REP, signal,
|
||||||
LcpCompleteRep::SignalLength, JBB);
|
LcpCompleteRep::SignalLength, JBB);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Say that an initial node restart does not need to be redone
|
||||||
|
* once node has been part of first LCP
|
||||||
|
*/
|
||||||
|
if (c_set_initial_start_flag &&
|
||||||
|
c_lcpState.m_participatingLQH.get(getOwnNodeId()))
|
||||||
|
{
|
||||||
|
jam();
|
||||||
|
c_set_initial_start_flag = FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------- */
|
/*-------------------------------------------------------------------------- */
|
||||||
|
@@ -11672,7 +11672,8 @@ void Dblqh::execGCP_SAVEREQ(Signal* signal)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getNodeState().getNodeRestartInProgress()){
|
if(getNodeState().getNodeRestartInProgress() && cstartRecReq == ZFALSE)
|
||||||
|
{
|
||||||
GCPSaveRef * const saveRef = (GCPSaveRef*)&signal->theData[0];
|
GCPSaveRef * const saveRef = (GCPSaveRef*)&signal->theData[0];
|
||||||
saveRef->dihPtr = dihPtr;
|
saveRef->dihPtr = dihPtr;
|
||||||
saveRef->nodeId = getOwnNodeId();
|
saveRef->nodeId = getOwnNodeId();
|
||||||
|
@@ -1084,6 +1084,46 @@ retry:
|
|||||||
return NDBT_OK;
|
return NDBT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
runBug26481(NDBT_Context* ctx, NDBT_Step* step)
|
||||||
|
{
|
||||||
|
|
||||||
|
int result = NDBT_OK;
|
||||||
|
int loops = ctx->getNumLoops();
|
||||||
|
int records = ctx->getNumRecords();
|
||||||
|
NdbRestarter res;
|
||||||
|
|
||||||
|
int node = res.getRandomNotMasterNodeId(rand());
|
||||||
|
ndbout_c("node: %d", node);
|
||||||
|
if (res.restartOneDbNode(node, true, true, true))
|
||||||
|
return NDBT_FAILED;
|
||||||
|
|
||||||
|
if (res.waitNodesNoStart(&node, 1))
|
||||||
|
return NDBT_FAILED;
|
||||||
|
|
||||||
|
int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 };
|
||||||
|
if (res.dumpStateOneNode(node, val2, 2))
|
||||||
|
return NDBT_FAILED;
|
||||||
|
|
||||||
|
if (res.insertErrorInNode(node, 7018))
|
||||||
|
return NDBT_FAILED;
|
||||||
|
|
||||||
|
if (res.startNodes(&node, 1))
|
||||||
|
return NDBT_FAILED;
|
||||||
|
|
||||||
|
res.waitNodesStartPhase(&node, 1, 3);
|
||||||
|
|
||||||
|
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 "\
|
||||||
@@ -1408,6 +1448,9 @@ TESTCASE("Bug25554", ""){
|
|||||||
TESTCASE("Bug26457", ""){
|
TESTCASE("Bug26457", ""){
|
||||||
INITIALIZER(runBug26457);
|
INITIALIZER(runBug26457);
|
||||||
}
|
}
|
||||||
|
TESTCASE("Bug26481", ""){
|
||||||
|
INITIALIZER(runBug26481);
|
||||||
|
}
|
||||||
NDBT_TESTSUITE_END(testNodeRestart);
|
NDBT_TESTSUITE_END(testNodeRestart);
|
||||||
|
|
||||||
int main(int argc, const char** argv){
|
int main(int argc, const char** argv){
|
||||||
|
Reference in New Issue
Block a user