2021SC@SDUSC
1.NameNode中的文件操作
public void abandonBlock(Block b, String src, String holder
) throws IOException;
abandonBlock 用于放弃一个数据块。当客户端通过类似addBlock方法获取LocatedBlock 后,可以打开到一个 block 的输出流,由于从DataNode 出错到 NameNode 发现这个信息,需要有一段时间,导致打开输出流时可能出错,这
时客户端可以向 NameNode 请求放弃这个数据块。
abandonBlock 的处理不是很复杂,首先检查租约(调用 checkLease 方法。block 对应的文件存在,文件处于构造状态,租约拥有者匹配),如果通过检查,调用 FSDirectory 的 removeBlock,从INodeFileUnderConstruction/BlocksMap/CorruptReplicasMap 中删除 block,然后通过 logOpenFile()记录变化。
public LocatedBlock addBlock(String src, String clientName) throws IOException;
如果数据块被写满,客户端可以通过