diff --git a/hdfs/FSDirectory详解.md b/hdfs/FSDirectory详解.md index 246b813..6627c62 100644 --- a/hdfs/FSDirectory详解.md +++ b/hdfs/FSDirectory详解.md @@ -49,11 +49,29 @@ FSDirectory的操作则全部是在内存中进行的, 并不进行editlog的 ### 删除 -接口: +**接口**: ```java boolean delete(String src, boolean recursive, boolean logRetryCache) throws IOException {} ``` +**简介** + +删除文件或者文件夹,如果删除文件夹参数recursive必须为true。 + +**实现逻辑** + +- 1、检查是否有写权限。具体可查看`checkOperation(OperationCategory.WRITE)`; +- 2、加全局锁。 +- 3、再次检查是否有写权限。 +- 4、调用FSDirDeleteOp.delete删除目录或者文件。 + ```java + toRemovedBlocks = FSDirDeleteOp.delete(this, pc, src, recursive, logRetryCache); + ``` +- 5、释放全局锁。 +- 6、同步editlog,并且记录审计日志。 +- 7、将需要删除的块`toRemovedBlocks`添加到`markedDeleteQueue`队列里面,等待异步删除。 + +**FSDirDeleteOp.delete 实现逻辑**