Page 29 - 《软件学报》2021年第10期
P. 29

乔嘉林  等:基于着色 Petri 网的 HDFS 数据一致性建模与分析                                            3001


                 求(WriteBlockRequest 库所)和第 2 关系(BlocksMap 库所).既是输入又是输出的是租约(Lease 库所)和第 1 关系
                 (FileINode 库所).中间数据包括创建文件请求(CreateFile 库所)、获得后续文件块请求(GetFollowingBlock 库所)、
                 文件块计数器(BlockCounter 库所)和复合中间结果(WFB 库所).





























                                            Fig.6   OpenFileGetWriteLocations model
                                             图 6   OpenFileGetWriteLocations 模型
                    主要流程为:根据写文件请求,生成创建文件的请求(IsCreateFile 变迁),如果该文件已经存在,生成创建失败
                 的结果返回(FileExist 变迁);否则检查并获取文件租约,在第 1 关系添加文件元数据(AddFile 变迁),生成获取后
                 续文件块请求,getAdditionalBlock 变迁负责处理获取文件块的请求,根据文件块计数器和第 1 关系,生成等待回
                 复的写文件请求、复合中间结果(更新第 1 关系的信息、更新第 2 关系的信息和写文件块请求),更新第 1 关系
                 的信息由 updateFileINode 变迁处理,更新第 2 关系的信息由 updateBlocksMap 变迁处理.写文件块请求由
                 genWriteBlockRequest 变迁处理.
                 3.2.4    DatanodeWrite 流程
                    DatanodeWrite 流程是客户端向数据节点上写文件块过程的建模.如图 7 所示,该流程的输入是写文件块请
                 求(WriteBlockRequest 库所),输出是写文件块回复(WriteBlockResponse 库所)、接收文件块通知(ReceivedBlock
                 库所)、更新数据节点存储的文件块(MergedBlock 库所).中间结果包括本地写文件块请求(WritingBlock 库所)、
                 未合并的文件块(UnmergedBlock 库所)、失败的写文件快回复(WriteLocalFail 库所)、更新写文件块回复
                 (WriteBlockAck 库所)、成功的写文件块回复(WriteLocalSuccess 库所).
                    主要流程为:
                       Receive 变迁的输入和输出相同,作为标识,ReceiveAndTransfer 变迁模拟需要写入的每个数据节点接
                        受到请求的行为(下文我们用“写入链”表示需要按需写入的数据节点链表).包括生成本地写文件块请
                        求(WritingBlock 库所)和发给下一节点的写文件块请求(WriteBlockRequest 库所).本地写入成功后会
                        产生一个通知名字节点接受文件块信息;
                       Fail 变迁模拟了本地写文件块失败的情况.写文件块回复(WriteBlockAck 库所)是写文件块过程中链条
                        下方的节点向上一节点发送的回复.genLastFAck 变迁处理写链条最后一个节点本地写失败的情况,直
                        接产生写文件块失败回复.genMidFAck 变迁用来生成失败的写文件块回复,包括中间节点的回复和写
   24   25   26   27   28   29   30   31   32   33   34