Commit a3dcbff6 authored by pekka@orca.ndb.mysql.com's avatar pekka@orca.ndb.mysql.com

Merge orca.ndb.mysql.com:/space_old/pekka/ndb/version/my50-1.2167.1.2

into  orca.ndb.mysql.com:/space_old/pekka/ndb/version/my51-bug18781
parents d525409b 9f3b47e5
......@@ -85,10 +85,14 @@ DIH/s
START_MECONF
DIH/s
* sp7 - release DICT lock
* (copy data, omitted)
DIH/s
DICT_UNLOCK_ORD
DICT/m
* SL_STARTED - release DICT lock
CNTR/s
NODE_START_REP
DIH/s
DICT_UNLOCK_ORD
DICT/m
# vim: set et sw=4:
......@@ -1609,6 +1609,9 @@ private:
void dump_replica_info();
// DIH specifics for execNODE_START_REP (sendDictUnlockOrd)
void exec_node_start_rep(Signal* signal);
/*
* Lock master DICT. Only current use is by starting node
* during NR. A pool of slave records is convenient anyway.
......
......@@ -1387,24 +1387,6 @@ void Dbdih::execNDB_STTOR(Signal* signal)
}
ndbrequire(false);
break;
case ZNDB_SPH7:
jam();
switch (typestart) {
case NodeState::ST_INITIAL_START:
case NodeState::ST_SYSTEM_RESTART:
jam();
ndbsttorry10Lab(signal, __LINE__);
return;
case NodeState::ST_NODE_RESTART:
case NodeState::ST_INITIAL_NODE_RESTART:
jam();
sendDictUnlockOrd(signal, c_dictLockSlavePtrI_nodeRestart);
c_dictLockSlavePtrI_nodeRestart = RNIL;
ndbsttorry10Lab(signal, __LINE__);
return;
}
ndbrequire(false);
break;
default:
jam();
ndbsttorry10Lab(signal, __LINE__);
......@@ -1412,6 +1394,27 @@ void Dbdih::execNDB_STTOR(Signal* signal)
}//switch
}//Dbdih::execNDB_STTOR()
void
Dbdih::exec_node_start_rep(Signal* signal)
{
/*
* Send DICT_UNLOCK_ORD when this node is SL_STARTED.
*
* Sending it before (sp 7) conflicts with code which assumes
* SL_STARTING means we are in copy phase of NR.
*
* NodeState::starting.restartType is not supposed to be used
* when SL_STARTED. Also it seems NODE_START_REP can arrive twice.
*
* For these reasons there are no consistency checks and
* we rely on c_dictLockSlavePtrI_nodeRestart alone.
*/
if (c_dictLockSlavePtrI_nodeRestart != RNIL) {
sendDictUnlockOrd(signal, c_dictLockSlavePtrI_nodeRestart);
c_dictLockSlavePtrI_nodeRestart = RNIL;
}
}
void
Dbdih::createMutexes(Signal * signal, Uint32 count){
Callback c = { safe_cast(&Dbdih::createMutex_done), count };
......@@ -1636,6 +1639,7 @@ void Dbdih::nodeRestartPh2Lab(Signal* signal)
void Dbdih::recvDictLockConf_nodeRestart(Signal* signal, Uint32 data, Uint32 ret)
{
ndbrequire(c_dictLockSlavePtrI_nodeRestart == RNIL);
ndbrequire(data != RNIL);
c_dictLockSlavePtrI_nodeRestart = data;
nodeRestartPh2Lab2(signal);
......
......@@ -920,6 +920,15 @@ SimulatedBlock::execCONTINUE_FRAGMENTED(Signal * signal){
void
SimulatedBlock::execNODE_START_REP(Signal* signal)
{
// common stuff for all blocks
// block specific stuff by virtual method override (default empty)
exec_node_start_rep(signal);
}
void
SimulatedBlock::exec_node_start_rep(Signal* signal)
{
}
......
......@@ -446,7 +446,8 @@ private:
void execCONTINUE_FRAGMENTED(Signal* signal);
void execAPI_START_REP(Signal* signal);
void execNODE_START_REP(Signal* signal);
virtual void exec_node_start_rep(Signal* signal);
Uint32 c_fragmentIdCounter;
ArrayPool<FragmentInfo> c_fragmentInfoPool;
DLHashTable<FragmentInfo> c_fragmentInfoHash;
......
......@@ -531,6 +531,10 @@ max-time: 1500
cmd: testDict
args: -n TemporaryTables T1 T6 T7 T8
max-time: 1500
cmd: testDict
args: -n Restart_NR2 T1
#
# TEST NDBAPI
#
......
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