|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.hadoop.hdfs.server.namenode.INode
org.apache.hadoop.hdfs.server.namenode.INodeReference
public abstract class INodeReference
An anonymous reference to an inode. This class and its subclasses are used to support multiple access paths. A file/directory may have multiple access paths when it is stored in some snapshots and it is renamed/moved to other locations. For example, (1) Suppose we have /abc/foo, say the inode of foo is inode(id=1000,name=foo) (2) create snapshot s0 for /abc (3) mv /abc/foo /xyz/bar, i.e. inode(id=1000,name=...) is renamed from "foo" to "bar" and its parent becomes /xyz. Then, /xyz/bar and /abc/.snapshot/s0/foo are two different access paths to the same inode, inode(id=1000,name=bar). With references, we have the following - /abc has a child ref(id=1001,name=foo). - /xyz has a child ref(id=1002) - Both ref(id=1001,name=foo) and ref(id=1002) point to another reference, ref(id=1003,count=2). - Finally, ref(id=1003,count=2) points to inode(id=1000,name=bar). Note 1: For a reference without name, e.g. ref(id=1002), it uses the name of the referred inode. Note 2: getParent() always returns the parent in the current state, e.g. inode(id=1000,name=bar).getParent() returns /xyz but not /abc.
Nested Class Summary | |
---|---|
static class |
INodeReference.DstReference
|
static class |
INodeReference.WithCount
An anonymous reference with reference count. |
static class |
INodeReference.WithName
A reference with a fixed name. |
Nested classes/interfaces inherited from class org.apache.hadoop.hdfs.server.namenode.INode |
---|
INode.BlocksMapUpdateInfo, INode.Feature |
Nested 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.INode |
---|
LOG |
Constructor Summary | |
---|---|
INodeReference(org.apache.hadoop.hdfs.server.namenode.INode parent,
org.apache.hadoop.hdfs.server.namenode.INode referred)
|
Method Summary | |
---|---|
INodeDirectory |
asDirectory()
Cast this inode to an INodeDirectory . |
org.apache.hadoop.hdfs.server.namenode.INodeFile |
asFile()
Cast this inode to an INodeFile . |
INodeReference |
asReference()
Cast this inode to an INodeReference . |
org.apache.hadoop.hdfs.server.namenode.INodeSymlink |
asSymlink()
Cast this inode to an INodeSymlink . |
Quota.Counts |
cleanSubtree(int snapshot,
int prior,
INode.BlocksMapUpdateInfo collectedBlocks,
List<org.apache.hadoop.hdfs.server.namenode.INode> removedINodes,
boolean countDiffChange)
Clean the subtree under this inode and collect the blocks from the descents for further block deletion/update. |
void |
clear()
Clear references to other objects. |
org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext |
computeContentSummary(org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext summary)
Count subtree content summary with a Content.Counts . |
Quota.Counts |
computeQuotaUsage(Quota.Counts counts,
boolean useCache,
int lastSnapshotId)
Count subtree Quota.NAMESPACE and Quota.DISKSPACE usages. |
void |
destroyAndCollectBlocks(INode.BlocksMapUpdateInfo collectedBlocks,
List<org.apache.hadoop.hdfs.server.namenode.INode> removedINodes)
Destroy self and clear everything! If the INode is a file, this method collects its blocks for further block deletion. |
void |
dumpTreeRecursively(PrintWriter out,
StringBuilder prefix,
int snapshot)
Dump tree recursively. |
long |
getAccessTime(int snapshotId)
|
int |
getDstSnapshotId()
|
org.apache.hadoop.fs.permission.FsPermission |
getFsPermission(int snapshotId)
|
short |
getFsPermissionShort()
|
String |
getGroupName(int snapshotId)
|
long |
getId()
Get inode id |
byte[] |
getLocalNameBytes()
|
byte |
getLocalStoragePolicyID()
|
long |
getModificationTime(int snapshotId)
|
long |
getPermissionLong()
|
org.apache.hadoop.fs.permission.PermissionStatus |
getPermissionStatus(int snapshotId)
Get the PermissionStatus |
Quota.Counts |
getQuotaCounts()
Get the quota set for this inode |
org.apache.hadoop.hdfs.server.namenode.INode |
getReferredINode()
|
org.apache.hadoop.hdfs.server.namenode.INodeAttributes |
getSnapshotINode(int snapshotId)
|
byte |
getStoragePolicyID()
|
String |
getUserName(int snapshotId)
|
boolean |
isDirectory()
Check whether it's a directory |
boolean |
isFile()
Check whether it's a file. |
boolean |
isReference()
Check whether it's a reference. |
boolean |
isSymlink()
Check whether it's a symlink |
void |
setAccessTime(long accessTime)
Set last access time of inode. |
void |
setLocalName(byte[] name)
Set local file name |
void |
setModificationTime(long modificationTime)
Set the last modification time of inode. |
void |
setReferredINode(org.apache.hadoop.hdfs.server.namenode.INode referred)
|
static int |
tryRemoveReference(org.apache.hadoop.hdfs.server.namenode.INode inode)
Try to remove the given reference and then return the reference count. |
org.apache.hadoop.hdfs.server.namenode.INode |
updateModificationTime(long mtime,
int latestSnapshotId)
Update modification time if it is larger than the current value. |
Methods inherited from class org.apache.hadoop.hdfs.server.namenode.INode |
---|
addSpaceConsumed, compareTo, computeAndConvertContentSummary, computeContentSummary, computeQuotaUsage, computeQuotaUsage, dumpTreeRecursively, dumpTreeRecursively, equals, getAccessTime, getAclFeature, getFsPermission, getFullPathName, getGroupName, getKey, getLocalName, getModificationTime, getObjectString, getParent, getParentReference, getParentString, getPathComponents, getPathNames, getUserName, getXAttrFeature, hashCode, isAncestorDirectory, isInLatestSnapshot, isQuotaSet, setAccessTime, setModificationTime, setParent, setParentReference, shouldRecordInSrcSnapshot, toDetailString, toString |
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Constructor Detail |
---|
public INodeReference(org.apache.hadoop.hdfs.server.namenode.INode parent, org.apache.hadoop.hdfs.server.namenode.INode referred)
Method Detail |
---|
public static int tryRemoveReference(org.apache.hadoop.hdfs.server.namenode.INode inode)
public final org.apache.hadoop.hdfs.server.namenode.INode getReferredINode()
public final void setReferredINode(org.apache.hadoop.hdfs.server.namenode.INode referred)
public final boolean isReference()
org.apache.hadoop.hdfs.server.namenode.INode
isReference
in class org.apache.hadoop.hdfs.server.namenode.INode
public final INodeReference asReference()
org.apache.hadoop.hdfs.server.namenode.INode
INodeReference
.
asReference
in class org.apache.hadoop.hdfs.server.namenode.INode
public final boolean isFile()
org.apache.hadoop.hdfs.server.namenode.INode
isFile
in class org.apache.hadoop.hdfs.server.namenode.INode
public final org.apache.hadoop.hdfs.server.namenode.INodeFile asFile()
org.apache.hadoop.hdfs.server.namenode.INode
INodeFile
.
asFile
in class org.apache.hadoop.hdfs.server.namenode.INode
public final boolean isDirectory()
org.apache.hadoop.hdfs.server.namenode.INode
isDirectory
in class org.apache.hadoop.hdfs.server.namenode.INode
public final INodeDirectory asDirectory()
org.apache.hadoop.hdfs.server.namenode.INode
INodeDirectory
.
asDirectory
in class org.apache.hadoop.hdfs.server.namenode.INode
public final boolean isSymlink()
org.apache.hadoop.hdfs.server.namenode.INode
isSymlink
in class org.apache.hadoop.hdfs.server.namenode.INode
public final org.apache.hadoop.hdfs.server.namenode.INodeSymlink asSymlink()
org.apache.hadoop.hdfs.server.namenode.INode
INodeSymlink
.
asSymlink
in class org.apache.hadoop.hdfs.server.namenode.INode
public byte[] getLocalNameBytes()
public void setLocalName(byte[] name)
org.apache.hadoop.hdfs.server.namenode.INode
setLocalName
in class org.apache.hadoop.hdfs.server.namenode.INode
public final long getId()
org.apache.hadoop.hdfs.server.namenode.INode
getId
in class org.apache.hadoop.hdfs.server.namenode.INode
public final org.apache.hadoop.fs.permission.PermissionStatus getPermissionStatus(int snapshotId)
org.apache.hadoop.hdfs.server.namenode.INode
PermissionStatus
getPermissionStatus
in class org.apache.hadoop.hdfs.server.namenode.INode
public final String getUserName(int snapshotId)
getUserName
in class org.apache.hadoop.hdfs.server.namenode.INode
snapshotId
- if it is not Snapshot.CURRENT_STATE_ID
, get the result
from the given snapshot; otherwise, get the result from the
current inode.
public final String getGroupName(int snapshotId)
getGroupName
in class org.apache.hadoop.hdfs.server.namenode.INode
snapshotId
- if it is not Snapshot.CURRENT_STATE_ID
, get the result
from the given snapshot; otherwise, get the result from the
current inode.
public final org.apache.hadoop.fs.permission.FsPermission getFsPermission(int snapshotId)
getFsPermission
in class org.apache.hadoop.hdfs.server.namenode.INode
snapshotId
- if it is not Snapshot.CURRENT_STATE_ID
, get the result
from the given snapshot; otherwise, get the result from the
current inode.
public final short getFsPermissionShort()
public long getPermissionLong()
public final long getModificationTime(int snapshotId)
getModificationTime
in class org.apache.hadoop.hdfs.server.namenode.INode
snapshotId
- if it is not Snapshot.CURRENT_STATE_ID
, get the result
from the given snapshot; otherwise, get the result from the
current inode.
public final org.apache.hadoop.hdfs.server.namenode.INode updateModificationTime(long mtime, int latestSnapshotId) throws org.apache.hadoop.hdfs.protocol.QuotaExceededException
org.apache.hadoop.hdfs.server.namenode.INode
updateModificationTime
in class org.apache.hadoop.hdfs.server.namenode.INode
org.apache.hadoop.hdfs.protocol.QuotaExceededException
public final void setModificationTime(long modificationTime)
org.apache.hadoop.hdfs.server.namenode.INode
setModificationTime
in class org.apache.hadoop.hdfs.server.namenode.INode
public final long getAccessTime(int snapshotId)
getAccessTime
in class org.apache.hadoop.hdfs.server.namenode.INode
snapshotId
- if it is not Snapshot.CURRENT_STATE_ID
, get the result
from the given snapshot; otherwise, get the result from the
current inode.
public final void setAccessTime(long accessTime)
org.apache.hadoop.hdfs.server.namenode.INode
setAccessTime
in class org.apache.hadoop.hdfs.server.namenode.INode
public final byte getStoragePolicyID()
getStoragePolicyID
in class org.apache.hadoop.hdfs.server.namenode.INode
public final byte getLocalStoragePolicyID()
getLocalStoragePolicyID
in class org.apache.hadoop.hdfs.server.namenode.INode
BlockStoragePolicySuite.ID_UNSPECIFIED
if no policy has
been specified.public Quota.Counts cleanSubtree(int snapshot, int prior, INode.BlocksMapUpdateInfo collectedBlocks, List<org.apache.hadoop.hdfs.server.namenode.INode> removedINodes, boolean countDiffChange) throws org.apache.hadoop.hdfs.protocol.QuotaExceededException
org.apache.hadoop.hdfs.server.namenode.INode
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 anINodeFile
. 1.1.1 Ifprior
is 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 Ifprior
is 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 anINodeDirectory
with 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 cleanINodeDirectory
with snapshot: delete the corresponding snapshot in its diff list. Recursively clean its children.
cleanSubtree
in class org.apache.hadoop.hdfs.server.namenode.INode
snapshot
- The id of the snapshot to delete.
Snapshot.CURRENT_STATE_ID
means to delete the current
file/directory.prior
- The id of the latest snapshot before the to-be-deleted snapshot.
When deleting a current inode, this parameter captures the latest
snapshot.collectedBlocks
- blocks collected from the descents for further block
deletion/update will be added to the given map.removedINodes
- INodes collected from the descents for further cleaning up of
inodeMap
org.apache.hadoop.hdfs.protocol.QuotaExceededException
public void destroyAndCollectBlocks(INode.BlocksMapUpdateInfo collectedBlocks, List<org.apache.hadoop.hdfs.server.namenode.INode> removedINodes)
org.apache.hadoop.hdfs.server.namenode.INode
destroyAndCollectBlocks
in class org.apache.hadoop.hdfs.server.namenode.INode
collectedBlocks
- blocks collected from the descents for further block
deletion/update will be added to this map.removedINodes
- INodes collected from the descents for further cleaning up of
inodeMappublic org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext computeContentSummary(org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext summary)
org.apache.hadoop.hdfs.server.namenode.INode
Content.Counts
.
computeContentSummary
in class org.apache.hadoop.hdfs.server.namenode.INode
summary
- the context object holding counts for the subtree.
public Quota.Counts computeQuotaUsage(Quota.Counts counts, boolean useCache, int lastSnapshotId)
org.apache.hadoop.hdfs.server.namenode.INode
Quota.NAMESPACE
and Quota.DISKSPACE
usages.
With the existence of INodeReference
, the same inode and its
subtree may be referred by multiple INodeReference.WithName
nodes and a
INodeReference.DstReference
node. To avoid circles while quota usage computation,
we have the following rules:
1. For aINodeReference.DstReference
node, 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.WithName
node, 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.WithName
node. We do not count in the size of the diff list.
computeQuotaUsage
in class org.apache.hadoop.hdfs.server.namenode.INode
counts
- The subtree counts for returning.useCache
- Whether to use cached quota usage. Note that
INodeReference.WithName
node never uses cache for its subtree.lastSnapshotId
- Snapshot.CURRENT_STATE_ID
indicates the
computation is in the current tree. Otherwise the id
indicates the computation range for a
INodeReference.WithName
node.
public final org.apache.hadoop.hdfs.server.namenode.INodeAttributes getSnapshotINode(int snapshotId)
getSnapshotINode
in class org.apache.hadoop.hdfs.server.namenode.INode
Snapshot.CURRENT_STATE_ID
,
return this; otherwise return the corresponding snapshot inode.public Quota.Counts getQuotaCounts()
org.apache.hadoop.hdfs.server.namenode.INode
getQuotaCounts
in class org.apache.hadoop.hdfs.server.namenode.INode
public final void clear()
org.apache.hadoop.hdfs.server.namenode.INode
clear
in class org.apache.hadoop.hdfs.server.namenode.INode
public void dumpTreeRecursively(PrintWriter out, StringBuilder prefix, int snapshot)
org.apache.hadoop.hdfs.server.namenode.INode
dumpTreeRecursively
in class org.apache.hadoop.hdfs.server.namenode.INode
prefix
- The prefix string that each line should print.public int getDstSnapshotId()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |