FastDFS trunk binlog的A ,D (version:3.11)

来源:互联网 发布:淘宝hottoys在哪买 编辑:程序博客网 时间:2024/05/16 01:56

看FastDFS的trunk操作时, 开始以为binlog中记录的A, D是表示小文件在trunk中的增加和删除文件的操作; 后来比较代码和binlog文件才发现原来是表示空闲空间的操作: 


     FastDFS 中进行trunk操作时, 会将操作过程记录到trunk下的binlog中, 记录的A(TRUNK_OP_TYPE_ADD_SPACE)和D(TRUNK_OP_TYPE_DEL_SPACE)不是表示向trunk中写入文件, 而是表示空闲空间的操作; 如下面的日志, 第一个表示创建了一个大小为67108864的节点并加入到AVL树中(1348197690 A 0 0 0 1 0 67108864);当向trunk文件中写入数据(小文件)时, 因为要用到空闲节点中的空间; 所以现将原来的空闲空间节点删除(1348197690 D 0 0 0 1 0 67108864); 将空闲中间的大小减去写入文件的大小(67108864 - 70 = 67108794)后作为一个节点加入到AVL树中(1348197690 A 0 0 0 1 70 67108794); 创建一个大小为70的节点加入到AVL树中(1348197690 A 0 0 0 1 0 70); 将文件内容写入到trunk中, 将大小为70的节点置为已用(置为FDFS_TRUNK_STATUS_HOLD); 所以从空闲空间中删除(1348197690 D 0 0 0 1 0 70);  所以A不是表示增加文件到trunk中; D不是表示从trunk中删除文件; 删除文件会在binlog中记录A, 表示将空闲空间增加到AVL树中; 而增加文件则最后的操作是D,表示空闲空间被用掉。


1348197690 A 0 0 0 1 0 67108864

1348197690 D 0 0 0 1 0 67108864

1348197690 A 0 0 0 1 70 67108794

1348197690 A 0 0 0 1 0 70

1348197690 D 0 0 0 1 0 70

1348218956 D 0 0 0 1 70 67108794

1348218956 A 0 0 0 1 140 67108724

1348218956 A 0 0 0 1 70 70

1348218956 D 0 0 0 1 70 70

1348456492 D 0 0 0 1 140 67108724

1348456492 A 0 0 0 1 324 67108540

1348456492 A 0 0 0 1 140 184

1348456492 D 0 0 0 1 140 184



storage_trunk.dat:内容:

270   :storage/data/trunk/binlog 文件的大小

                       0                                0                                    0                           1          140        67108724

path.store_path_index    path.sub_path_high      path.sub_path_low         file.id  file.offset    file.size*/



binlog的大小指的是重新启动后binlog文件的大小, 在插入小文件到trunk操作过程中binlog文件大小会变化, 但storage_trunk.dat内的表示binlog文件大小是不变的; 但当trunk server和组内的storage同步数据时会根据storage_trunk.dat记录的binlog大小和实际的大小进行增量同步, 此时会改变storage_trunk.dat中记录binlog的大小, trunk的增量同步就是根据这个来实现的。trunk server 关闭时会, 此时会更改storage_trunk.dat中binlog的大小为现在的binlog文件的大小。trunk server重启后会根据binlog的记录来组建内部的数据结构(主要是AVL树), 也会更改storage_trunk.dat中binlog的大小为现在的binlog文件的大小。

原创粉丝点击