Commit 001c7f5f authored by unknown's avatar unknown
Browse files

ndb - bug#18781: close a tiny window (re-commit, try to by-pass merge jam)


ndb/src/kernel/blocks/dbdict/DictLock.txt:
  wait until SL_STARTED before sending DICT_UNLOCK_ORD
ndb/src/kernel/blocks/dbdih/Dbdih.hpp:
  wait until SL_STARTED before sending DICT_UNLOCK_ORD
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  wait until SL_STARTED before sending DICT_UNLOCK_ORD
ndb/src/kernel/vm/SimulatedBlock.cpp:
  wait until SL_STARTED before sending DICT_UNLOCK_ORD
ndb/src/kernel/vm/SimulatedBlock.hpp:
  wait until SL_STARTED before sending DICT_UNLOCK_ORD
ndb/test/run-test/daily-basic-tests.txt:
  wait until SL_STARTED before sending DICT_UNLOCK_ORD
parent f98f5d63
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -85,8 +85,12 @@ DIH/s
    START_MECONF
DIH/s

* sp7 - release DICT lock
* (copy data, omitted)

* SL_STARTED - release DICT lock

CNTR/s
    NODE_START_REP
        DIH/s
            DICT_UNLOCK_ORD
                DICT/m
+3 −0
Original line number Diff line number Diff line
@@ -1599,6 +1599,9 @@ private:
   */
  void startInfoReply(Signal *, Uint32 nodeId);

  // 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.
+22 −18
Original line number Diff line number Diff line
@@ -1356,24 +1356,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__);
@@ -1381,6 +1363,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 };
@@ -1605,6 +1608,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);
+9 −0
Original line number Diff line number Diff line
@@ -916,6 +916,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)
{
}

+1 −0
Original line number Diff line number Diff line
@@ -424,6 +424,7 @@ private:
  void execSIGNAL_DROPPED_REP(Signal* signal);
  void execCONTINUE_FRAGMENTED(Signal* signal);
  void execNODE_START_REP(Signal* signal);
  virtual void exec_node_start_rep(Signal* signal);

  Uint32 c_fragmentIdCounter;
  ArrayPool<FragmentInfo> c_fragmentInfoPool;
Loading