Page 28 - 《软件学报》2021年第10期
P. 28
3000 Journal of Software 软件学报 Vol.32, No.10, October 2021
写流程的输入是客户端发起的写文件请求(库所 WriteFileRequest),输出是写文件请求的回复(库所
WriteFileResponse).输出包括第 1 关系(库所 FileINode)和第 2 关系(库所 BlocksMap)、数据节点存储的文件块
信息(库所 MergedBlock).另外 3 个库所是写流程的中间结果,分别是发送给数据节点的写文件块请求(库所
WriteBlockRequest)、数据节点发给名字节点的接受块报告(库所 ReceivedBlock)、数据节点发给客户端的写文
件块回复(库所 WriteBlockResponse).
写流程如下:上层应用的请求作为系统输入到达客户端,客户端联系名字节点创建文件元信息并申请文件
块,根据返回结果构造写文件块请求(NamenodeWrite 子流程);该请求发送到数据节点并写入数据,数据节点返
回给客户端写文件块回复(DatanodeWrite 子流程);客户端关闭文件并释放资源,向上层应用返回写文件结果
(NamenodeWrite 子流程).
3.2.2 NamenodeWrite 流程
NamenodeWrite 是客户端向名字节点写入文件元信息的流程.图 5 所示为 NamenodeWrite 的模型,该流程包
含两个子流程:打开文件并获取存储位置的子流程 OpenFileGetWriteLocations 和处理写文件块结果的子流程
ProcessWriteBlockResult.该流程的输入有:写文件请求(库所 WriteFileRequest)、写文件块回复(库所 WriteBlock
Response)、接收文件块通知(库所 ReceivedBlock).该流程的输出有:写文件块请求(库所 WriteBlockRequest)、
第 2 关系(库所 BlocksMap)、写文件回复(库所 WriteFileResponse).既是输入又是输出的是第 1 关系(库所
FileINode),中间结果是租约(库所 Lease)和等待回复的写文件块请求(库所 WaitWriteFile).
Fig.5 NamenodeWrite model
图 5 NamenodeWrite 模型
NamenodeWrite 流程为:客户端接收到写文件请求,联系名字节点创建文件,创建过程中会检查并更新第 1
关系、第 2 关系和租约,生成写文件块请求(由 DatanodeWrite 流程处理)和等待回复的写文件块请求,或由于失
败直接产生写文件回复(由 OpenFileGetWriteLocations 子流程处理).写文件块回复由 ProcessWriteBlockResult
子流程处理.接收文件块通知由 UpdateBlocksMap 变迁更新第 2 关系.
在文件写入流程中,客户端需要定时地向名字节点发送心跳维护租约,流程中对写入流程中出现错误(如网
络超时、节点失效、本地写磁盘失败等)建模为一次租约失效,由 LoseLease 变迁模拟.
3.2.3 OpenFileGetWriteLocations 流程
OpenFileGetWriteLocations 流程如图 6 所示,输入是写文件请求(WriteFileRequest),输出包括写文件回复
(WriteFileResponse)、等待回复的写文件请求(WaitWriteFile 库所,记录了当前写成功的文件块数)、写文件块请