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 库所,记录了当前写成功的文件块数)、写文件块请
   23   24   25   26   27   28   29   30   31   32   33