NDB 集群内部  /  NDB 内核块  /  NDBFS 块

4.15 NDBFS 块

此块提供 NDB 文件系统抽象层,位于目录 storage/ndb/src/kernel/blocks/ndbfs 中,包含以下文件

  • AsyncFile.hpp: 定义 AsyncFile 类,表示异步文件。所有操作都与进程执行的其他活动同时进行。由于所有操作都在单独的线程中执行,因此操作结果通过内存通道发送回来。对于异步通知已完成请求,每个调用都包含一个请求作为参数。此类用于与其他活动同时将数据写入磁盘或从磁盘读取数据。

  • AsyncFile.cpp: 定义异步文件可能的操作,并实现它们。

  • Filename.hpp: 定义 Filename 类。它使用 128 位值(作为四个长整型数组)并从中生成文件名。此文件名编码有关文件的信息,例如它是文件还是目录,以及如果是前者,文件的类型。可能的类型包括数据文件、片段日志、片段列表、表列表、模式日志和系统文件等。

  • Filename.cpp: 实现 Filename 类的 set() 方法。

  • MemoryChannelTest/MemoryChannelTest.cpp: 用于测试从内存通道读取和写入(即从循环缓冲区读取和写入)的基本程序。

  • OpenFiles.hpp: 实现 OpenFiles 类,它提供了一些方便的方法来确定给定文件是否已打开。

  • VoidFs.cpp: 用于无磁盘操作。生成对写入操作的“伪”确认。

  • CircularIndex.hpp: 此文件中定义的 CircularIndex 类充当实现循环缓冲区的构建块。它像正常索引一样递增,直到达到最大大小,然后重置为零。

  • CircularIndex.cpp: 仅包含一个 #define,目前未使用。

  • MemoryChannel.hpp: 定义 MemoryChannelMemoryChannelMultipleWriter 类,它们提供指针驱动的通道,用于两个线程之间的通信。它不会将任何数据复制进或出通道,因此放入的项目在另一个线程将其返回之前无法使用。不支持检测项目返回。

  • MemoryChannel.cpp: “伪”文件,目前未使用。

  • Ndbfs.hpp: 由于 NDB 信号请求会导致对 AsyncFile 的多个请求,因此一个类(在此文件中定义)负责跟踪所有未完成的请求,并在所有请求完成后将结果报告回发送块。

  • Ndbfs.cpp: 实现 Ndbfs 类的初始化和信号处理方法。

  • Pool.hpp: 创建和管理用于 Ndbfs 和此块中其他类的对象池。

  • AsyncFileTest/AsyncFileTest.cpp: 测试程序,用于测试和基准测试 AsyncFile 的功能。