TFS分布式文件系统学习总结(3)-dataserver类结构详解
本小节主要是介绍dataserver文件访问管理类结构,dataserver主要是由DataManagement和BlockManagement进行管理,其中DataManagement是用来管理client正在写文件的缓存数据的(即还没有持久化的阶段),而BlockManagement是管理磁盘中的物理块数据信息的。下面来详细的阐释下DataManagement和BlockManagement。
1、DataManagement文件数据缓存管理类:
DataManagement:
简介:DataManagement主要是用于管理DataFile信息。
file_number_:为该dataserver的文件序号,在集群里唯一。它是有一个64位的整形进行存储,高32位存储dataserver的信息(ip:port),低32位用于分配该dataserver的文件序号,最大不超过4的32次方个文件,视图如下:
last_gc_data_file_time_:清除已经过期的保留在缓存里的没有写到磁盘的文件,对应的类为DataFile。
data_file_map_:类型为hash_map<uint64_t, DataFile *>的缓存未写入磁盘的文件数据管理hash map。
DataFile:
简介:DataFile主要是用于缓存client端写入的信息,该信息client未写完毕所以缓存在DataFile内存中。在DataFile的文件内容信息如果超过一定时期后,会认为是超时写而清理掉。
这里主要介绍crc_, tmp_file_name_, ref_count三个字段的意义,其余的字段看字段名就知道其作用了。
crc_:该字段用于检测当client端发送写完成操作时携带的crc值进行判断,传输的数据是否有误。
fd_:如果client写入的数据文件大于2M的话,那么就不要用内存的方式进行缓存了,就用到写文件的方式来缓存,而tmp_file_name_字段则是要写入的文件名路径。
ref_count_:该文件的引用计数
2、BlockManagement物理块数据信息管理类:
BlockFileManagement:
简介:BlockFileManager主要是用于管理逻辑/物理磁盘块的,当有一个文件写完毕后BlockFileManagement会在某个逻辑块中选择一个物理块让文件持久化。
compact_logic_blocks_:压缩块map
physical_blocks_:物理块map
bit_map_size_:super_block_.main_block_count_ + super_block_.extend_block_count_ + 1,从代码可以看出是dataserver上的主块与扩展块数量之和,BlockFileManager会维护一个整形数组,该数组的每一bit代表一个对应块的信息标识。
normal_bit_map_:normal_bit_map_是用来统计块的使用情况的
error_bit_map_:error_bit_map_是用来统计出问题块的情况的
super_block_:超级块信息
super_block_impl:超级块操作接口
LogicBlock:
简介:LogicBlock意为逻辑块,逻辑块管理着属于它的物理块信息。
avail_data_size:当前逻辑块总空间大小,包括已使用的和未使用的空间大小。
visit_count_:该逻辑块访问次数。
last_abnorm_time_:上次逻辑块处理出现异常的时间。
phusical_blocks_:逻辑块对应的物理块。
PhysicalBlock:
简介:PhysicalBlock意为物理块,文件写入的载体。
data_start_:物理块开始存储数据的偏移量(为512字节),因为每个物理块都前都会保存一个BlockPrefix结构体信息。
total_data_len:块总大小 - data_start_
block_prefix_:用于连接一个逻辑块下的物理块信息