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; the second call
to this method sends a START_ORD signal to
NDBCNTR.
When START_ORD is received by the
NDBCNTR block, the signal is immediately
transferred to the NDBCNTR block'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 is permitted to run
before any of the remaining blocks are contacted, in order to
make sure that it can start the
CMVMI block's threads.