Before the data node actually starts, a number of other setup and initialization tasks must be done for the block objects, transporters, and watchdog checks, among others.
This initialization process begins in
storage/ndb/src/kernel/main.cpp with a
series of calls to
globalEmulatorData.theThreadConfig->doStart().
When starting ndbd with the
-n or --nostart option there
is only one call to this method; otherwise, there are two, with
the second call actually starting the data node. The first
invocation of doStart() sends the
START_ORD signal to the
CMVMI block (see
Section 6.4.2, “The CMVMI Block”); the second
call to this method sends a START_ORD signal
to NDBCNTR (see
Section 6.4.12, “The NDBCNTR Block”).
When START_ORD is received by the
NDBCNTR block, the signal is immediately
transferred to NDBCNTR's
MISSRA sub-block, which handles the start
process by sending a READ_CONFIG_REQ signals
to all blocks in order as given in the array
readConfigOrder:
NDBFS
DBTUP
DBACC
DBTC
DBLQH
DBTUX
DBDICT
DBDIH
NDBCNTR
QMGR
TRIX
BACKUP
DBUTIL
SUMA
TSMAN
LGMAN
PGMAN
RESTORE
NDBFS is allowed to run before any of the
remaining blocks are contacted, in order to make sure that it
can start the CMVMI block's threads.
