该READ_CONFIG_REQ
信号为所有内核块提供了读取配置数据的机会,配置数据存储在所有块都可以访问的全局对象中。数据节点中的所有内存分配都发生在这个阶段。
内核块和
NDB
文件系统之间的连接也在阶段 0 期间建立。这对于使块能够轻松地通信将表结构的哪些部分写入磁盘是必要的。
NDB
以两种不同的方式执行内存分配。第一个是使用
allocRecord()
方法(在 中定义
storage/ndb/src/kernel/vm/SimulatedBlock.hpp
)。ptrCheckGuard
这是使用宏(在 中定义
)访问记录的传统方法storage/ndb/src/kernel/vm/pc.hpp
。setSize()
另一种方法是使用在中找到的模板帮助下定义
的方法分配内存
storage/ndb/src/kernel/vm/CArray.hpp
。
这些方法有时也会初始化内存,确保内存分配和初始化都是在看门狗保护下完成的。
许多块还执行特定于块的初始化,这通常需要构建链表或双向链表(在某些情况下还需要哈希表)。
分配中使用的许多大小是在
Configuration::calcSizeAlt()
方法中计算的,在 中找到
storage/ndb/src/kernel/vm/Configuration.cpp
。
已经为更智能的内存资源池做了一些准备。
DataMemory
和磁盘记录已经属于这个全局内存池。