4.15 NDBFS 块

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

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

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

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

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

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

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

  • VoidFs.cpp:用于无盘操作。生成一个虚拟确认写入操作。

  • CircularIndex.hpp:该 CircularIndex文件中定义的类用作实现循环缓冲区的构建块。它作为普通索引递增,直到达到最大大小,然后重置为零。

  • CircularIndex.cpp: 只包含一个#define, 目前没有实际使用。

  • MemoryChannel.hpp: 定义 MemoryChannelMemoryChannelMultipleWriter类,它们为两个线程之间的通信提供基于指针的通道。它不会将任何数据复制到通道中或从通道中复制出来,因此在另一个线程将其归还之前,无法使用放入的项目。不支持检测物品的退货。

  • MemoryChannel.cpp: Dummy 文件,此时不用。

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

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

  • Pool.hpp:创建和管理一个对象池,供Ndbfs此块中的其他类使用。

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