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.