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_:该文件的引用计数

TFS分布式文件系统学习总结(3)-dataserver类结构详解

 

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_:用于连接一个逻辑块下的物理块信息

TFS分布式文件系统学习总结(3)-dataserver类结构详解