FSDirectory详解:接口
This commit is contained in:
parent
63d301e1d5
commit
09851a8e69
@ -109,3 +109,40 @@ HdfsFileStatus startFile(String src, PermissionStatus permissions,
|
||||
}
|
||||
```
|
||||
|
||||
- 检查当前用户是否有写权限。
|
||||
- 检查是否处于安全模式,如果处于安全模式,则不能进行当前操作。
|
||||
- 检查是否对当前文件所在的目录是否有权限(开启权限管理的情况下)
|
||||
- 调用FSDirWriteFileOp.startFile开始创建文件或者覆盖已有文件。
|
||||
- 对于已经存在的文件。在覆盖的场景下。主要核心代码如下,会将原来的文件删除。并且释放租约。
|
||||
```java
|
||||
List<INode> toRemoveINodes = new ChunkedArrayList<>();
|
||||
List<Long> toRemoveUCFiles = new ChunkedArrayList<>();
|
||||
long ret = FSDirDeleteOp.delete(fsd, iip, toRemoveBlocks,
|
||||
toRemoveINodes, toRemoveUCFiles, now());
|
||||
if (ret >= 0) {
|
||||
iip = INodesInPath.replace(iip, iip.length() - 1, null);
|
||||
FSDirDeleteOp.incrDeletedFileCount(ret);
|
||||
fsn.removeLeasesAndINodes(toRemoveUCFiles, toRemoveINodes, true);
|
||||
}
|
||||
```
|
||||
- 对于不需要覆盖的场景下,需要重新刷新租约信息。
|
||||
```java
|
||||
fsn.recoverLeaseInternal(FSNamesystem.RecoverLeaseOp.CREATE_FILE, iip,
|
||||
src, holder, clientMachine, false);
|
||||
```
|
||||
- 对于父文件夹存在的时候,将文件添加到父文件夹下面。
|
||||
```java
|
||||
iip = addFile(fsd, parent, iip.getLastLocalName(), permissions,
|
||||
replication, blockSize, holder, clientMachine, shouldReplicate,
|
||||
ecPolicyName, storagePolicy);
|
||||
newNode = iip != null ? iip.getLastINode().asFile() : null;
|
||||
```
|
||||
- 添加租约信息。
|
||||
```java
|
||||
fsn.leaseManager.addLease(
|
||||
newNode.getFileUnderConstructionFeature().getClientName(),
|
||||
newNode.getId());
|
||||
```
|
||||
- 返回文件信息。
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user