Class INodeSymlink
java.lang.Object
org.apache.hadoop.hdfs.server.namenode.INode
org.apache.hadoop.hdfs.server.namenode.INodeWithAdditionalFields
org.apache.hadoop.hdfs.server.namenode.INodeSymlink
- All Implemented Interfaces:
Comparable<byte[]>,INodeAttributes,Diff.Element<byte[]>,org.apache.hadoop.util.LightWeightGSet.LinkedElement
An
INode representing a symbolic link.-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.hadoop.hdfs.server.namenode.INode
INode.BlocksMapUpdateInfo, INode.Feature, INode.QuotaDelta, INode.ReclaimContextNested classes/interfaces inherited from interface org.apache.hadoop.hdfs.server.namenode.INodeAttributes
INodeAttributes.SnapshotCopy -
Field Summary
Fields inherited from class org.apache.hadoop.hdfs.server.namenode.INodeWithAdditionalFields
features -
Method Summary
Modifier and TypeMethodDescriptionvoidaccept(NamespaceVisitor visitor, int snapshot) Accept a visitor to visit thisINode.voidvoidCast this inode to anINodeSymlink.voidcleanSubtree(INode.ReclaimContext reclaimContext, int snapshotId, int priorSnapshotId) Clean the subtree under this inode and collect the blocks from the descents for further block deletion/update.computeContentSummary(int snapshotId, ContentSummaryComputationContext summary) Count subtree content summary with aContentCounts.computeQuotaUsage(BlockStoragePolicySuite bsps, byte blockStoragePolicyId, boolean useCache, int lastSnapshotId) Count subtreeQuota.NAMESPACEandQuota.STORAGESPACEusages.voiddestroyAndCollectBlocks(INode.ReclaimContext reclaimContext) Destroy self and clear everything!voiddumpTreeRecursively(PrintWriter out, StringBuilder prefix, int snapshot) Dump tree recursively.bytebytebyte[]booleanCheck whether it's a symlinkvoidvoidMethods inherited from class org.apache.hadoop.hdfs.server.namenode.INodeWithAdditionalFields
addFeature, getAclFeature, getFeature, getFeatures, getFsPermissionShort, getId, getLocalNameBytes, getNext, getPermissionLong, getPermissionStatus, removeFeature, setAccessTime, setLocalName, setModificationTime, setNext, updateModificationTimeMethods inherited from class org.apache.hadoop.hdfs.server.namenode.INode
addSpaceConsumed, asDirectory, asFile, asReference, clear, compareTo, computeAndConvertContentSummary, computeContentSummary, computeQuotaUsage, computeQuotaUsage, dumpINode, dumpParentINodes, dumpTreeRecursively, dumpTreeRecursively, equals, getAccessTime, getAclFeature, getFsPermission, getFullPathAndObjectString, getFullPathName, getGroupName, getKey, getLocalName, getModificationTime, getObjectString, getParent, getParentReference, getParentString, getPathComponents, getPathComponents, getPathNames, getQuotaCounts, getSnapshotINode, getStoragePolicyIDForQuota, getUserName, getXAttrFeature, hashCode, isAncestorDirectory, isDeleted, isDirectory, isFile, isInCurrentState, isInLatestSnapshot, isLastReference, isQuotaSet, isReference, isSetStoragePolicy, setAccessTime, setModificationTime, setParent, setParentReference, shouldRecordInSrcSnapshot, toDetailString, toString
-
Method Details
-
isSymlink
public boolean isSymlink()Description copied from class:INodeCheck whether it's a symlink -
asSymlink
Description copied from class:INodeCast this inode to anINodeSymlink. -
getSymlinkString
-
getSymlink
public byte[] getSymlink() -
cleanSubtree
Description copied from class:INodeClean the subtree under this inode and collect the blocks from the descents for further block deletion/update. The current inode can either resides in the current tree or be stored as a snapshot copy.In general, we have the following rules. 1. When deleting a file/directory in the current tree, we have different actions according to the type of the node to delete. 1.1 The current inode (this) is an
INodeFile. 1.1.1 Ifprioris null, there is no snapshot taken on ancestors before. Thus we simply destroy (i.e., to delete completely, no need to save snapshot copy) the current INode and collect its blocks for further cleansing. 1.1.2 Else do nothing since the current INode will be stored as a snapshot copy. 1.2 The current inode is anINodeDirectory. 1.2.1 Ifprioris null, there is no snapshot taken on ancestors before. Similarly, we destroy the whole subtree and collect blocks. 1.2.2 Else do nothing with the current INode. Recursively clean its children. 1.3 The current inode is a file with snapshot. Call recordModification(..) to capture the current states. Mark the INode as deleted. 1.4 The current inode is anINodeDirectorywith snapshot feature. Call recordModification(..) to capture the current states. Destroy files/directories created after the latest snapshot (i.e., the inodes stored in the created list of the latest snapshot). Recursively clean remaining children. 2. When deleting a snapshot. 2.1 To cleanINodeFile: do nothing. 2.2 To cleanINodeDirectory: recursively clean its children. 2.3 To clean INodeFile with snapshot: delete the corresponding snapshot in its diff list. 2.4 To cleanINodeDirectorywith snapshot: delete the corresponding snapshot in its diff list. Recursively clean its children.- Specified by:
cleanSubtreein classINode- Parameters:
reclaimContext- Record blocks and inodes that need to be reclaimed.snapshotId- The id of the snapshot to delete.Snapshot.CURRENT_STATE_IDmeans to delete the current file/directory.priorSnapshotId- The id of the latest snapshot before the to-be-deleted snapshot. When deleting a current inode, this parameter captures the latest snapshot.
-
destroyAndCollectBlocks
Description copied from class:INodeDestroy self and clear everything! If the INode is a file, this method collects its blocks for further block deletion. If the INode is a directory, the method goes down the subtree and collects blocks from the descents, and clears its parent/children references as well. The method also clears the diff list if the INode contains snapshot diff list.- Specified by:
destroyAndCollectBlocksin classINode- Parameters:
reclaimContext- Record blocks and inodes that need to be reclaimed.
-
computeQuotaUsage
public QuotaCounts computeQuotaUsage(BlockStoragePolicySuite bsps, byte blockStoragePolicyId, boolean useCache, int lastSnapshotId) Description copied from class:INodeCount subtreeQuota.NAMESPACEandQuota.STORAGESPACEusages. With the existence ofINodeReference, the same inode and its subtree may be referred by multipleINodeReference.WithNamenodes and aINodeReference.DstReferencenode. To avoid circles while quota usage computation, we have the following rules:1. For a
INodeReference.DstReferencenode, since the node must be in the current tree (or has been deleted as the end point of a series of rename operations), we compute the quota usage of the referred node (and its subtree) in the regular manner, i.e., including every inode in the current tree and in snapshot copies, as well as the size of diff list. 2. For aINodeReference.WithNamenode, since the node must be in a snapshot, we only count the quota usage for those nodes that still existed at the creation time of the snapshot associated with theINodeReference.WithNamenode. We do not count in the size of the diff list.- Specified by:
computeQuotaUsagein classINode- Parameters:
bsps- Block storage policy suite to calculate intended storage type usageblockStoragePolicyId- block storage policy id of the current INodeuseCache- Whether to use cached quota usage. Note thatINodeReference.WithNamenode never uses cache for its subtree.lastSnapshotId-Snapshot.CURRENT_STATE_IDindicates the computation is in the current tree. Otherwise the id indicates the computation range for aINodeReference.WithNamenode.- Returns:
- The subtree quota counts.
-
computeContentSummary
public ContentSummaryComputationContext computeContentSummary(int snapshotId, ContentSummaryComputationContext summary) Description copied from class:INodeCount subtree content summary with aContentCounts.- Specified by:
computeContentSummaryin classINode- Parameters:
snapshotId- Specify the time range for the calculation. If this parameter equals toSnapshot.CURRENT_STATE_ID, the result covers both the current states and all the snapshots. Otherwise the result only covers all the files/directories contained in the specific snapshot.summary- the context object holding counts for the subtree.- Returns:
- The same objects as summary.
-
dumpTreeRecursively
Description copied from class:INodeDump tree recursively.- Overrides:
dumpTreeRecursivelyin classINodeprefix- The prefix string that each line should print.
-
accept
Description copied from class:INodeAccept a visitor to visit thisINode. -
removeAclFeature
public void removeAclFeature()- Overrides:
removeAclFeaturein classINodeWithAdditionalFields
-
addAclFeature
- Overrides:
addAclFeaturein classINodeWithAdditionalFields
-
removeXAttrFeature
public void removeXAttrFeature()- Overrides:
removeXAttrFeaturein classINodeWithAdditionalFields
-
addXAttrFeature
- Overrides:
addXAttrFeaturein classINodeWithAdditionalFields
-
getStoragePolicyID
public byte getStoragePolicyID()- Specified by:
getStoragePolicyIDin classINode- Returns:
- the latest block storage policy id of the INode. Specifically, if a storage policy is directly specified on the INode then return the ID of that policy. Otherwise follow the latest parental path and return the ID of the first specified storage policy.
-
getLocalStoragePolicyID
public byte getLocalStoragePolicyID()- Specified by:
getLocalStoragePolicyIDin classINode- Returns:
- the storage policy directly specified on the INode. Return
HdfsConstants.BLOCK_STORAGE_POLICY_ID_UNSPECIFIEDif no policy has been specified.
-