Source code structure in RonDB#
RonDB is based on MySQL Cluster, thus it uses the same code structure as the MySQL code.
We will only describe the source code structure of the RonDB parts and will not describe the structure of the MySQL code.
All the RonDB specific code is found under the directory storage/ndb.
Below this directory the main paths are src, include, test,
clusterj, plugin, tools and ndbapi-examples.
clusterj contains the code for ClusterJ, the native Java API towards
RonDB. nodejs similarly contains part of the code for the NodeJS
although this code is maintained mainly in its own git tree.
tools contains a number of binaries that are useful such as
ndb_import, ndb_top, ndb_restore and lots of other tools.
The plugin directory contains all the source code for the NDB storage
engine.
The test directory contains all the source code for tests in the
Autotest framework.
The ndbapi-examples directory contains a number of example NDB API
programs.
The src and include directories contain the actual source code of
the RonDB data node, management server and the NDB API.
The rest-server2 contains the C++ RonDB Rest Server. In the RonDB
22.10 tree we have instead the rest-server directory that contains the
RonDB Rest Server implemented in Go (with C++ parts to access NDB API).
The test directory#
The test directory contains a src, tools and a include that implements the previously mentioned Hugo framework used in most test programs.
Most of the actual test programs are found in the ndbapi directory.
The include directory#
The most important directory here is the ndbapi directory which
contains the header files for the NDB API. Obviously not changed very
often, but the base for most of the work in RonDB. Also the mgmapi is
important since it defines the C API towards the RonDB management server
used by management clients.
There are include files for the transporter, utilities, portability libraries, debug support, data node kernel parts, the management server and common things for management server and clients.
The src directory#
The ndbjtie contains the C++ code that implements the interface to JNI
for ClusterJ. It makes it possible to develop code in Java that uses a
direct mapping of the C++ NDB API towards Java.
common/portlib contains portability code for RonDB.
common/transporter contains code for communication between nodes in
RonDB, these are called transporters in RonDB and can use different
communication medias, currently TCP/IP sockets and shared memory
communication. Previously there has been transporters for Dolphin SCI,
OSE/Delta transporter and also prototypes of RDMA transporters have been
developed at research institutes.
common/util contains various utilities used by various parts of the
RonDB source code.
common/mgmcommon contains common code for RonDB management server and
client.
common/logger contains code for logging in RonDB.
common/debugger contains various debug support functionality in RonDB.
mgmapi contains the source code of the RonDB MGM API.
ndbapi contains the source code of the NDB API.
mgmsrv contains the source code of the RonDB management server.
mgmclient contains the source code of the RonDB management client.
kernel contains the source code of the RonDB data node.
cw/cpcd contains the source code of ndb_cpcd.
ronsql contains the source code of RonSQL.
The src/kernel directory#
The blocks directory contains all of the important modules of the
RonDB data node. There are currently 29 such modules implementing the
transaction functionality, checkpoint, REDO logging, recovery, index
management, replication and so forth.
The vm contains support code for the blocks. A very important file
here is the mt.cpp file which implements the multithreaded
asynchronous engine. It can be seen as similar to what the Linux kernel
is to Linux. The mt.cpp handles all communication with other threads,
within a thread, communication to other nodes, binding to CPUs and a lot
of other low-level stuff.