From b83b0dcf0400868a50e6297fc13a2245ab7922ba Mon Sep 17 00:00:00 2001 From: zeekling Date: Mon, 8 Apr 2024 23:57:38 +0800 Subject: [PATCH] =?UTF-8?q?FSDirectory=E8=AF=A6=E8=A7=A3:=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=92=8C=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hdfs/FSDirectory详解.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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 实现逻辑**