FSDirectory详解:配置和变量 #24
@ -74,4 +74,25 @@ boolean delete(String src, boolean recursive, boolean logRetryCache) throws IOEx
|
|||||||
|
|
||||||
**FSDirDeleteOp.delete 实现逻辑**
|
**FSDirDeleteOp.delete 实现逻辑**
|
||||||
|
|
||||||
|
- 检查权限:调用FSDirectory的函数checkPermission检查权限。
|
||||||
|
- 如果是非空的文件夹,检查是否有-r参数。如果没有-r参数则需要报错。
|
||||||
|
- 调用deleteInternal,开始删除文件夹。核心删除代码如下:
|
||||||
|
|
||||||
|
```java
|
||||||
|
List<INodeDirectory> snapshottableDirs = new ArrayList<>();
|
||||||
|
FSDirSnapshotOp.checkSnapshot(fsd, iip, snapshottableDirs);
|
||||||
|
ReclaimContext context = new ReclaimContext(
|
||||||
|
fsd.getBlockStoragePolicySuite(), collectedBlocks, removedINodes,
|
||||||
|
removedUCFiles);
|
||||||
|
// 更核心的删除代码再这个函数里面,会调用destroyAndCollectBlocks删除block,代码:targetNode.destroyAndCollectBlocks(reclaimContext);
|
||||||
|
if (unprotectedDelete(fsd, iip, context, mtime)) {
|
||||||
|
filesRemoved = context.quotaDelta().getNsDelta();
|
||||||
|
fsn.removeSnapshottableDirs(snapshottableDirs);
|
||||||
|
}
|
||||||
|
fsd.updateReplicationFactor(context.collectedBlocks()
|
||||||
|
.toUpdateReplicationInfo());
|
||||||
|
fsd.updateCount(iip, context.quotaDelta(), false);
|
||||||
|
```
|
||||||
|
- 删除EditLog。
|
||||||
|
- 调用incrDeletedFileCount更新metrics信息。
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user