blob: 1937e5b8427741e45e6131ea6cbf916573692602 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_292) on Tue Jun 15 06:06:54 GMT 2021 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>INodeDirectory (Apache Hadoop HDFS 3.3.1 API)</title>
<meta name="date" content="2021-06-15">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="INodeDirectory (Apache Hadoop HDFS 3.3.1 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":9,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/INodeDirectory.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeAttributes.SnapshotCopy.html" title="class in org.apache.hadoop.hdfs.server.namenode"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.SnapshotAndINode.html" title="class in org.apache.hadoop.hdfs.server.namenode"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" target="_top">Frames</a></li>
<li><a href="INodeDirectory.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.hadoop.hdfs.server.namenode</div>
<h2 title="Class INodeDirectory" class="title">Class INodeDirectory</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.hadoop.hdfs.server.namenode.INode</li>
<li>
<ul class="inheritance">
<li>org.apache.hadoop.hdfs.server.namenode.INodeWithAdditionalFields</li>
<li>
<ul class="inheritance">
<li>org.apache.hadoop.hdfs.server.namenode.INodeDirectory</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;byte[]&gt;, org.apache.hadoop.hdfs.server.namenode.INodeAttributes, org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes, <a href="../../../../../../org/apache/hadoop/hdfs/util/Diff.Element.html" title="interface in org.apache.hadoop.hdfs.util">Diff.Element</a>&lt;byte[]&gt;, org.apache.hadoop.util.LightWeightGSet.LinkedElement</dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/snapshot/Snapshot.Root.html" title="class in org.apache.hadoop.hdfs.server.namenode.snapshot">Snapshot.Root</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="typeNameLabel">INodeDirectory</span>
extends org.apache.hadoop.hdfs.server.namenode.INodeWithAdditionalFields
implements org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes</pre>
<div class="block">Directory INode class.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.SnapshotAndINode.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory.SnapshotAndINode</a></span></code>
<div class="block">A pair of Snapshot and INode objects.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hdfs.server.namenode.INode">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hdfs.server.namenode.INode</h3>
<code><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.BlocksMapUpdateInfo.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.BlocksMapUpdateInfo</a>, <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.Feature.html" title="interface in org.apache.hadoop.hdfs.server.namenode">INode.Feature</a>, <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.QuotaDelta.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.QuotaDelta</a>, <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.ReclaimContext.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.ReclaimContext</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes</h3>
<code><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectoryAttributes.CopyWithQuota.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectoryAttributes.CopyWithQuota</a>, <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectoryAttributes.SnapshotCopy.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectoryAttributes.SnapshotCopy</a></code></li>
</ul>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#DEFAULT_FILES_PER_DIRECTORY">DEFAULT_FILES_PER_DIRECTORY</a></span></code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hdfs.server.namenode.INodeWithAdditionalFields">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.hadoop.hdfs.server.namenode.INodeWithAdditionalFields</h3>
<code>features</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hdfs.server.namenode.INode">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.hadoop.hdfs.server.namenode.INode</h3>
<code>LOG</code></li>
</ul>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#INodeDirectory-org.apache.hadoop.hdfs.server.namenode.INodeDirectory-boolean-org.apache.hadoop.hdfs.server.namenode.INode.Feature...-">INodeDirectory</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory</a>&nbsp;other,
boolean&nbsp;adopt,
<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.Feature.html" title="interface in org.apache.hadoop.hdfs.server.namenode">INode.Feature</a>...&nbsp;featuresToCopy)</code>
<div class="block">Copy constructor</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#INodeDirectory-long-byte:A-org.apache.hadoop.fs.permission.PermissionStatus-long-">INodeDirectory</a></span>(long&nbsp;id,
byte[]&nbsp;name,
org.apache.hadoop.fs.permission.PermissionStatus&nbsp;permissions,
long&nbsp;mtime)</code>
<div class="block">constructor</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#addChild-org.apache.hadoop.hdfs.server.namenode.INode-">addChild</a></span>(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;node)</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#addChild-org.apache.hadoop.hdfs.server.namenode.INode-boolean-int-">addChild</a></span>(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;node,
boolean&nbsp;setModTime,
int&nbsp;latestSnapshotId)</code>
<div class="block">Add a child inode to the directory.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#addChildAtLoading-org.apache.hadoop.hdfs.server.namenode.INode-">addChildAtLoading</a></span>(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;node)</code>
<div class="block">During image loading, the search is unnecessary since the insert position
should always be at the end of the map given the sequence they are
serialized on disk.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#addSnapshot-int-java.lang.String-org.apache.hadoop.hdfs.server.namenode.LeaseManager-boolean-int-long-">addSnapshot</a></span>(int&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
org.apache.hadoop.hdfs.server.namenode.LeaseManager&nbsp;leaseManager,
boolean&nbsp;captureOpenFiles,
int&nbsp;maxSnapshotLimit,
long&nbsp;mtime)</code>
<div class="block">Add a snapshot.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.snapshot.DirectoryWithSnapshotFeature</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#addSnapshotFeature-org.apache.hadoop.hdfs.server.namenode.snapshot.DirectoryWithSnapshotFeature.DirectoryDiffList-">addSnapshotFeature</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/snapshot/DirectoryWithSnapshotFeature.DirectoryDiffList.html" title="class in org.apache.hadoop.hdfs.server.namenode.snapshot">DirectoryWithSnapshotFeature.DirectoryDiffList</a>&nbsp;diffs)</code>&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#addSnapshottableFeature--">addSnapshottableFeature</a></span>()</code>
<div class="block">add DirectorySnapshottableFeature</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#addSpaceConsumed-org.apache.hadoop.hdfs.server.namenode.QuotaCounts-">addSpaceConsumed</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a>&nbsp;counts)</code>
<div class="block">Check and add namespace/storagespace/storagetype consumed to itself and the ancestors.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#asDirectory--">asDirectory</a></span>()</code>
<div class="block">Cast this inode to an <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeDirectory</code></a>.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#cleanSubtree-org.apache.hadoop.hdfs.server.namenode.INode.ReclaimContext-int-int-">cleanSubtree</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.ReclaimContext.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.ReclaimContext</a>&nbsp;reclaimContext,
int&nbsp;snapshotId,
int&nbsp;priorSnapshotId)</code>
<div class="block">Clean the subtree under this inode and collect the blocks from the descents
for further block deletion/update.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#cleanSubtreeRecursively-org.apache.hadoop.hdfs.server.namenode.INode.ReclaimContext-int-int-java.util.Map-">cleanSubtreeRecursively</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.ReclaimContext.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.ReclaimContext</a>&nbsp;reclaimContext,
int&nbsp;snapshot,
int&nbsp;prior,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hdfs.server.namenode.INode,org.apache.hadoop.hdfs.server.namenode.INode&gt;&nbsp;excludedNodes)</code>
<div class="block">Call cleanSubtree(..) recursively down the subtree.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#clear--">clear</a></span>()</code>
<div class="block">Clear references to other objects.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#clearChildren--">clearChildren</a></span>()</code>
<div class="block">Set the children list to null.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#computeContentSummary-int-org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext-">computeContentSummary</a></span>(int&nbsp;snapshotId,
org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext&nbsp;summary)</code>
<div class="block">Count subtree content summary with a <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/ContentCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>ContentCounts</code></a>.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>protected org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#computeDirectoryContentSummary-org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext-int-">computeDirectoryContentSummary</a></span>(org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext&nbsp;summary,
int&nbsp;snapshotId)</code>&nbsp;</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#computeQuotaUsage-org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite-byte-boolean-int-">computeQuotaUsage</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/blockmanagement/BlockStoragePolicySuite.html" title="class in org.apache.hadoop.hdfs.server.blockmanagement">BlockStoragePolicySuite</a>&nbsp;bsps,
byte&nbsp;blockStoragePolicyId,
boolean&nbsp;useCache,
int&nbsp;lastSnapshotId)</code>
<div class="block">Count subtree <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/Quota.html#NAMESPACE"><code>Quota.NAMESPACE</code></a> and <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/Quota.html#STORAGESPACE"><code>Quota.STORAGESPACE</code></a> usages.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#computeQuotaUsage4CurrentDirectory-org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite-byte-org.apache.hadoop.hdfs.server.namenode.QuotaCounts-">computeQuotaUsage4CurrentDirectory</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/blockmanagement/BlockStoragePolicySuite.html" title="class in org.apache.hadoop.hdfs.server.blockmanagement">BlockStoragePolicySuite</a>&nbsp;bsps,
byte&nbsp;storagePolicyId,
<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a>&nbsp;counts)</code>
<div class="block">Add quota usage for this inode excluding children.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#destroyAndCollectBlocks-org.apache.hadoop.hdfs.server.namenode.INode.ReclaimContext-">destroyAndCollectBlocks</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.ReclaimContext.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.ReclaimContext</a>&nbsp;reclaimContext)</code>
<div class="block">Destroy self and clear everything! If the INode is a file, this method
collects its blocks for further block deletion.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#dumpTreeRecursively-java.io.PrintWriter-java.lang.StringBuilder-int-">dumpTreeRecursively</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;out,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;prefix,
int&nbsp;snapshot)</code>
<div class="block">Dump tree recursively.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#dumpTreeRecursively-java.io.PrintWriter-java.lang.StringBuilder-java.lang.Iterable-">dumpTreeRecursively</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;out,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;prefix,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.SnapshotAndINode.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory.SnapshotAndINode</a>&gt;&nbsp;subs)</code>
<div class="block">Dump the given subtrees.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.INode</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getChild-byte:A-int-">getChild</a></span>(byte[]&nbsp;name,
int&nbsp;snapshotId)</code>&nbsp;</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.util.ReadOnlyList&lt;org.apache.hadoop.hdfs.server.namenode.INode&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getChildrenList-int-">getChildrenList</a></span>(int&nbsp;snapshotId)</code>&nbsp;</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getChildrenNum-int-">getChildrenNum</a></span>(int&nbsp;snapshotId)</code>&nbsp;</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/snapshot/DirectoryWithSnapshotFeature.DirectoryDiffList.html" title="class in org.apache.hadoop.hdfs.server.namenode.snapshot">DirectoryWithSnapshotFeature.DirectoryDiffList</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getDiffs--">getDiffs</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.snapshot.DirectorySnapshottableFeature</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getDirectorySnapshottableFeature--">getDirectorySnapshottableFeature</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/DirectoryWithQuotaFeature.html" title="class in org.apache.hadoop.hdfs.server.namenode">DirectoryWithQuotaFeature</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getDirectoryWithQuotaFeature--">getDirectoryWithQuotaFeature</a></span>()</code>
<div class="block">If the directory contains a <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/DirectoryWithQuotaFeature.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>DirectoryWithQuotaFeature</code></a>, return it;
otherwise, return null.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.snapshot.DirectoryWithSnapshotFeature</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getDirectoryWithSnapshotFeature--">getDirectoryWithSnapshotFeature</a></span>()</code>
<div class="block">If feature list contains a <code>DirectoryWithSnapshotFeature</code>, return it;
otherwise, return null.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code>byte</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getLocalStoragePolicyID--">getLocalStoragePolicyID</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getQuotaCounts--">getQuotaCounts</a></span>()</code>
<div class="block">Get the quota set for this inode</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getSnapshot-byte:A-">getSnapshot</a></span>(byte[]&nbsp;snapshotName)</code>&nbsp;</td>
</tr>
<tr id="i29" class="rowColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getSnapshotINode-int-">getSnapshotINode</a></span>(int&nbsp;snapshotId)</code>&nbsp;</td>
</tr>
<tr id="i30" class="altColor">
<td class="colFirst"><code>byte</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#getStoragePolicyID--">getStoragePolicyID</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i31" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#isDescendantOfSnapshotRoot-org.apache.hadoop.hdfs.server.namenode.INodeDirectory-">isDescendantOfSnapshotRoot</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory</a>&nbsp;snapshotRootDir)</code>
<div class="block">Check if this directory is a descendant directory
of a snapshot root directory.</div>
</td>
</tr>
<tr id="i32" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#isDirectory--">isDirectory</a></span>()</code>
<div class="block">Check whether it's a directory</div>
</td>
</tr>
<tr id="i33" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#isSnapshottable--">isSnapshottable</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i34" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#isWithSnapshot--">isWithSnapshot</a></span>()</code>
<div class="block">Is this file has the snapshot feature?</div>
</td>
</tr>
<tr id="i35" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#metadataEquals-org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes-">metadataEquals</a></span>(org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes&nbsp;other)</code>
<div class="block">Compare the metadata with another INodeDirectory</div>
</td>
</tr>
<tr id="i36" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#recordModification-int-">recordModification</a></span>(int&nbsp;latestSnapshotId)</code>
<div class="block">This inode is being modified.</div>
</td>
</tr>
<tr id="i37" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#removeChild-org.apache.hadoop.hdfs.server.namenode.INode-">removeChild</a></span>(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;child)</code>
<div class="block">Remove the specified child from this directory.</div>
</td>
</tr>
<tr id="i38" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#removeChild-org.apache.hadoop.hdfs.server.namenode.INode-int-">removeChild</a></span>(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;child,
int&nbsp;latestSnapshotId)</code>
<div class="block">Remove the specified child from this directory.</div>
</td>
</tr>
<tr id="i39" class="rowColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#removeSnapshot-org.apache.hadoop.hdfs.server.namenode.INode.ReclaimContext-java.lang.String-long-">removeSnapshot</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.ReclaimContext.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.ReclaimContext</a>&nbsp;reclaimContext,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
long&nbsp;mtime)</code>
<div class="block">Delete a snapshot.</div>
</td>
</tr>
<tr id="i40" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#removeSnapshottableFeature--">removeSnapshottableFeature</a></span>()</code>
<div class="block">remove DirectorySnapshottableFeature</div>
</td>
</tr>
<tr id="i41" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#renameSnapshot-java.lang.String-java.lang.String-java.lang.String-long-">renameSnapshot</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;oldName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;newName,
long&nbsp;mtime)</code>
<div class="block">Rename a snapshot.</div>
</td>
</tr>
<tr id="i42" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#replaceChild-org.apache.hadoop.hdfs.server.namenode.INode-org.apache.hadoop.hdfs.server.namenode.INode-org.apache.hadoop.hdfs.server.namenode.INodeMap-">replaceChild</a></span>(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;oldChild,
org.apache.hadoop.hdfs.server.namenode.INode&nbsp;newChild,
<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeMap.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeMap</a>&nbsp;inodeMap)</code>
<div class="block">Replace the given child with a new child.</div>
</td>
</tr>
<tr id="i43" class="rowColor">
<td class="colFirst"><code>org.apache.hadoop.hdfs.server.namenode.INode</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#saveChild2Snapshot-org.apache.hadoop.hdfs.server.namenode.INode-int-org.apache.hadoop.hdfs.server.namenode.INode-">saveChild2Snapshot</a></span>(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;child,
int&nbsp;latestSnapshotId,
org.apache.hadoop.hdfs.server.namenode.INode&nbsp;snapshotCopy)</code>
<div class="block">Save the child to the latest snapshot.</div>
</td>
</tr>
<tr id="i44" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#searchChild-org.apache.hadoop.hdfs.server.namenode.INode-">searchChild</a></span>(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;inode)</code>
<div class="block">Search for the given INode in the children list and the deleted lists of
snapshots.</div>
</td>
</tr>
<tr id="i45" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#setSnapshotQuota-int-">setSnapshotQuota</a></span>(int&nbsp;snapshotQuota)</code>&nbsp;</td>
</tr>
<tr id="i46" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#toDetailString--">toDetailString</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i47" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#undoRename4DstParent-org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite-org.apache.hadoop.hdfs.server.namenode.INode-int-">undoRename4DstParent</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/blockmanagement/BlockStoragePolicySuite.html" title="class in org.apache.hadoop.hdfs.server.blockmanagement">BlockStoragePolicySuite</a>&nbsp;bsps,
org.apache.hadoop.hdfs.server.namenode.INode&nbsp;deletedChild,
int&nbsp;latestSnapshotId)</code>
<div class="block">Undo the rename operation for the dst tree, i.e., if the rename operation
(with OVERWRITE option) removes a file/dir from the dst tree, add it back
and delete possible record in the deleted list.</div>
</td>
</tr>
<tr id="i48" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#undoRename4ScrParent-org.apache.hadoop.hdfs.server.namenode.INodeReference-org.apache.hadoop.hdfs.server.namenode.INode-">undoRename4ScrParent</a></span>(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeReference</a>&nbsp;oldChild,
org.apache.hadoop.hdfs.server.namenode.INode&nbsp;newChild)</code>
<div class="block">This method is usually called by the undo section of rename.</div>
</td>
</tr>
<tr id="i49" class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html#valueOf-org.apache.hadoop.hdfs.server.namenode.INode-java.lang.Object-">valueOf</a></span>(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;inode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;path)</code>
<div class="block">Cast INode to INodeDirectory.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hdfs.server.namenode.INodeWithAdditionalFields">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.hadoop.hdfs.server.namenode.INodeWithAdditionalFields</h3>
<code>addAclFeature, addFeature, addXAttrFeature, getAclFeature, getFeature, getFeatures, getFsPermissionShort, getId, getLocalNameBytes, getNext, getPermissionLong, removeAclFeature, removeFeature, removeXAttrFeature, setAccessTime, setLocalName, setModificationTime, setNext, updateModificationTime</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hdfs.server.namenode.INode">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.hadoop.hdfs.server.namenode.INode</h3>
<code>asFile, asReference, asSymlink, compareTo, computeAndConvertContentSummary, computeContentSummary, computeQuotaUsage, computeQuotaUsage, dumpTreeRecursively, dumpTreeRecursively, equals, getAccessTime, getAclFeature, getFsPermission, getFullPathName, getGroupName, getKey, getLocalName, getModificationTime, getObjectString, getParent, getParentReference, getParentString, getPathComponents, getPathComponents, getPathNames, getStoragePolicyIDForQuota, getUserName, getXAttrFeature, hashCode, isAncestorDirectory, isDeleted, isFile, isInCurrentState, isInLatestSnapshot, isLastReference, isQuotaSet, isReference, isSymlink, setAccessTime, setModificationTime, setParent, setParentReference, shouldRecordInSrcSnapshot, toString</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hdfs.server.namenode.INodeAttributes">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hdfs.server.namenode.INodeAttributes</h3>
<code>getAccessTime, getAclFeature, getFsPermission, getFsPermissionShort, getGroupName, getLocalNameBytes, getModificationTime, getPermissionLong, getUserName, getXAttrFeature</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="DEFAULT_FILES_PER_DIRECTORY">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>DEFAULT_FILES_PER_DIRECTORY</h4>
<pre>public static final&nbsp;int DEFAULT_FILES_PER_DIRECTORY</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hdfs.server.namenode.INodeDirectory.DEFAULT_FILES_PER_DIRECTORY">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="INodeDirectory-long-byte:A-org.apache.hadoop.fs.permission.PermissionStatus-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>INodeDirectory</h4>
<pre>public&nbsp;INodeDirectory(long&nbsp;id,
byte[]&nbsp;name,
org.apache.hadoop.fs.permission.PermissionStatus&nbsp;permissions,
long&nbsp;mtime)</pre>
<div class="block">constructor</div>
</li>
</ul>
<a name="INodeDirectory-org.apache.hadoop.hdfs.server.namenode.INodeDirectory-boolean-org.apache.hadoop.hdfs.server.namenode.INode.Feature...-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>INodeDirectory</h4>
<pre>public&nbsp;INodeDirectory(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory</a>&nbsp;other,
boolean&nbsp;adopt,
<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.Feature.html" title="interface in org.apache.hadoop.hdfs.server.namenode">INode.Feature</a>...&nbsp;featuresToCopy)</pre>
<div class="block">Copy constructor</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>other</code> - The INodeDirectory to be copied</dd>
<dd><code>adopt</code> - Indicate whether or not need to set the parent field of child
INodes to the new node</dd>
<dd><code>featuresToCopy</code> - any number of features to copy to the new node.
The method will do a reference copy, not a deep copy.</dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="valueOf-org.apache.hadoop.hdfs.server.namenode.INode-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>valueOf</h4>
<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory</a>&nbsp;valueOf(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;inode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;path)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</a>,
org.apache.hadoop.fs.PathIsNotDirectoryException</pre>
<div class="block">Cast INode to INodeDirectory.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</a></code></dd>
<dd><code>org.apache.hadoop.fs.PathIsNotDirectoryException</code></dd>
</dl>
</li>
</ul>
<a name="isDirectory--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isDirectory</h4>
<pre>public final&nbsp;boolean&nbsp;isDirectory()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Check whether it's a directory</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>isDirectory</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INodeAttributes</code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>isDirectory</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true unconditionally.</dd>
</dl>
</li>
</ul>
<a name="asDirectory--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>asDirectory</h4>
<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory</a>&nbsp;asDirectory()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Cast this inode to an <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeDirectory</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>asDirectory</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this object.</dd>
</dl>
</li>
</ul>
<a name="getLocalStoragePolicyID--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getLocalStoragePolicyID</h4>
<pre>public&nbsp;byte&nbsp;getLocalStoragePolicyID()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>getLocalStoragePolicyID</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the storage policy directly specified on the INode. Return
<code>HdfsConstants.BLOCK_STORAGE_POLICY_ID_UNSPECIFIED</code> if no policy has
been specified.</dd>
</dl>
</li>
</ul>
<a name="getStoragePolicyID--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getStoragePolicyID</h4>
<pre>public&nbsp;byte&nbsp;getStoragePolicyID()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>getStoragePolicyID</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>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.</dd>
</dl>
</li>
</ul>
<a name="getQuotaCounts--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getQuotaCounts</h4>
<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a>&nbsp;getQuotaCounts()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Get the quota set for this inode</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>getQuotaCounts</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes</code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>getQuotaCounts</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the quota counts. The count is -1 if it is not set.</dd>
</dl>
</li>
</ul>
<a name="addSpaceConsumed-org.apache.hadoop.hdfs.server.namenode.QuotaCounts-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addSpaceConsumed</h4>
<pre>public&nbsp;void&nbsp;addSpaceConsumed(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a>&nbsp;counts)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Check and add namespace/storagespace/storagetype consumed to itself and the ancestors.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>addSpaceConsumed</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
</dl>
</li>
</ul>
<a name="getDirectoryWithQuotaFeature--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDirectoryWithQuotaFeature</h4>
<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/DirectoryWithQuotaFeature.html" title="class in org.apache.hadoop.hdfs.server.namenode">DirectoryWithQuotaFeature</a>&nbsp;getDirectoryWithQuotaFeature()</pre>
<div class="block">If the directory contains a <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/DirectoryWithQuotaFeature.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>DirectoryWithQuotaFeature</code></a>, return it;
otherwise, return null.</div>
</li>
</ul>
<a name="addSnapshotFeature-org.apache.hadoop.hdfs.server.namenode.snapshot.DirectoryWithSnapshotFeature.DirectoryDiffList-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addSnapshotFeature</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.server.namenode.snapshot.DirectoryWithSnapshotFeature&nbsp;addSnapshotFeature(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/snapshot/DirectoryWithSnapshotFeature.DirectoryDiffList.html" title="class in org.apache.hadoop.hdfs.server.namenode.snapshot">DirectoryWithSnapshotFeature.DirectoryDiffList</a>&nbsp;diffs)</pre>
</li>
</ul>
<a name="getDirectoryWithSnapshotFeature--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDirectoryWithSnapshotFeature</h4>
<pre>public final&nbsp;org.apache.hadoop.hdfs.server.namenode.snapshot.DirectoryWithSnapshotFeature&nbsp;getDirectoryWithSnapshotFeature()</pre>
<div class="block">If feature list contains a <code>DirectoryWithSnapshotFeature</code>, return it;
otherwise, return null.</div>
</li>
</ul>
<a name="isWithSnapshot--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isWithSnapshot</h4>
<pre>public final&nbsp;boolean&nbsp;isWithSnapshot()</pre>
<div class="block">Is this file has the snapshot feature?</div>
</li>
</ul>
<a name="getDiffs--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDiffs</h4>
<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/snapshot/DirectoryWithSnapshotFeature.DirectoryDiffList.html" title="class in org.apache.hadoop.hdfs.server.namenode.snapshot">DirectoryWithSnapshotFeature.DirectoryDiffList</a>&nbsp;getDiffs()</pre>
</li>
</ul>
<a name="getSnapshotINode-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSnapshotINode</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes&nbsp;getSnapshotINode(int&nbsp;snapshotId)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>getSnapshotINode</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>if the given snapshot id is <code>Snapshot.CURRENT_STATE_ID</code>,
return this; otherwise return the corresponding snapshot inode.</dd>
</dl>
</li>
</ul>
<a name="toDetailString--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>toDetailString</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;toDetailString()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>toDetailString</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
</dl>
</li>
</ul>
<a name="getDirectorySnapshottableFeature--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDirectorySnapshottableFeature</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.server.namenode.snapshot.DirectorySnapshottableFeature&nbsp;getDirectorySnapshottableFeature()</pre>
</li>
</ul>
<a name="isSnapshottable--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isSnapshottable</h4>
<pre>public&nbsp;boolean&nbsp;isSnapshottable()</pre>
</li>
</ul>
<a name="isDescendantOfSnapshotRoot-org.apache.hadoop.hdfs.server.namenode.INodeDirectory-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isDescendantOfSnapshotRoot</h4>
<pre>public&nbsp;boolean&nbsp;isDescendantOfSnapshotRoot(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory</a>&nbsp;snapshotRootDir)</pre>
<div class="block">Check if this directory is a descendant directory
of a snapshot root directory.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>snapshotRootDir</code> - the snapshot root directory</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if this directory is a descendant of snapshot root</dd>
</dl>
</li>
</ul>
<a name="getSnapshot-byte:A-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSnapshot</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot&nbsp;getSnapshot(byte[]&nbsp;snapshotName)</pre>
</li>
</ul>
<a name="setSnapshotQuota-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setSnapshotQuota</h4>
<pre>public&nbsp;void&nbsp;setSnapshotQuota(int&nbsp;snapshotQuota)</pre>
</li>
</ul>
<a name="addSnapshot-int-java.lang.String-org.apache.hadoop.hdfs.server.namenode.LeaseManager-boolean-int-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addSnapshot</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot&nbsp;addSnapshot(int&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
org.apache.hadoop.hdfs.server.namenode.LeaseManager&nbsp;leaseManager,
boolean&nbsp;captureOpenFiles,
int&nbsp;maxSnapshotLimit,
long&nbsp;mtime)
throws <a href="../../../../../../org/apache/hadoop/hdfs/protocol/SnapshotException.html" title="class in org.apache.hadoop.hdfs.protocol">SnapshotException</a></pre>
<div class="block">Add a snapshot.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>name</code> - Name of the snapshot.</dd>
<dd><code>mtime</code> - The snapshot creation time set by Time.now().</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hdfs/protocol/SnapshotException.html" title="class in org.apache.hadoop.hdfs.protocol">SnapshotException</a></code></dd>
</dl>
</li>
</ul>
<a name="removeSnapshot-org.apache.hadoop.hdfs.server.namenode.INode.ReclaimContext-java.lang.String-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeSnapshot</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot&nbsp;removeSnapshot(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.ReclaimContext.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.ReclaimContext</a>&nbsp;reclaimContext,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
long&nbsp;mtime)
throws <a href="../../../../../../org/apache/hadoop/hdfs/protocol/SnapshotException.html" title="class in org.apache.hadoop.hdfs.protocol">SnapshotException</a></pre>
<div class="block">Delete a snapshot.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>snapshotName</code> - Name of the snapshot.</dd>
<dd><code>mtime</code> - The snapshot deletion time set by Time.now().</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hdfs/protocol/SnapshotException.html" title="class in org.apache.hadoop.hdfs.protocol">SnapshotException</a></code></dd>
</dl>
</li>
</ul>
<a name="renameSnapshot-java.lang.String-java.lang.String-java.lang.String-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>renameSnapshot</h4>
<pre>public&nbsp;void&nbsp;renameSnapshot(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;oldName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;newName,
long&nbsp;mtime)
throws <a href="../../../../../../org/apache/hadoop/hdfs/protocol/SnapshotException.html" title="class in org.apache.hadoop.hdfs.protocol">SnapshotException</a></pre>
<div class="block">Rename a snapshot.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>path</code> - The directory path where the snapshot was taken.</dd>
<dd><code>oldName</code> - Old name of the snapshot</dd>
<dd><code>newName</code> - New name the snapshot will be renamed to</dd>
<dd><code>mtime</code> - The snapshot modification time set by Time.now().</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hdfs/protocol/SnapshotException.html" title="class in org.apache.hadoop.hdfs.protocol">SnapshotException</a></code></dd>
</dl>
</li>
</ul>
<a name="addSnapshottableFeature--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addSnapshottableFeature</h4>
<pre>public&nbsp;void&nbsp;addSnapshottableFeature()</pre>
<div class="block">add DirectorySnapshottableFeature</div>
</li>
</ul>
<a name="removeSnapshottableFeature--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeSnapshottableFeature</h4>
<pre>public&nbsp;void&nbsp;removeSnapshottableFeature()</pre>
<div class="block">remove DirectorySnapshottableFeature</div>
</li>
</ul>
<a name="replaceChild-org.apache.hadoop.hdfs.server.namenode.INode-org.apache.hadoop.hdfs.server.namenode.INode-org.apache.hadoop.hdfs.server.namenode.INodeMap-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>replaceChild</h4>
<pre>public&nbsp;void&nbsp;replaceChild(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;oldChild,
org.apache.hadoop.hdfs.server.namenode.INode&nbsp;newChild,
<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeMap.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeMap</a>&nbsp;inodeMap)</pre>
<div class="block">Replace the given child with a new child. Note that we no longer need to
replace an normal INodeDirectory or INodeFile into an
INodeDirectoryWithSnapshot or INodeFileUnderConstruction. The only cases
for child replacement is for reference nodes.</div>
</li>
</ul>
<a name="recordModification-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>recordModification</h4>
<pre>public&nbsp;void&nbsp;recordModification(int&nbsp;latestSnapshotId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">This inode is being modified. The previous version of the inode needs to
be recorded in the latest snapshot.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>recordModification</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>latestSnapshotId</code> - The id of the latest snapshot that has been taken.
Note that it is <code>Snapshot.CURRENT_STATE_ID</code>
if no snapshots have been taken.</dd>
</dl>
</li>
</ul>
<a name="saveChild2Snapshot-org.apache.hadoop.hdfs.server.namenode.INode-int-org.apache.hadoop.hdfs.server.namenode.INode-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>saveChild2Snapshot</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.server.namenode.INode&nbsp;saveChild2Snapshot(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;child,
int&nbsp;latestSnapshotId,
org.apache.hadoop.hdfs.server.namenode.INode&nbsp;snapshotCopy)</pre>
<div class="block">Save the child to the latest snapshot.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the child inode, which may be replaced.</dd>
</dl>
</li>
</ul>
<a name="getChild-byte:A-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getChild</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.server.namenode.INode&nbsp;getChild(byte[]&nbsp;name,
int&nbsp;snapshotId)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>name</code> - the name of the child</dd>
<dd><code>snapshotId</code> - if it is not <code>Snapshot.CURRENT_STATE_ID</code>, get the result
from the corresponding snapshot; otherwise, get the result from
the current directory.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the child inode.</dd>
</dl>
</li>
</ul>
<a name="searchChild-org.apache.hadoop.hdfs.server.namenode.INode-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>searchChild</h4>
<pre>public&nbsp;int&nbsp;searchChild(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;inode)</pre>
<div class="block">Search for the given INode in the children list and the deleted lists of
snapshots.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><code>Snapshot.CURRENT_STATE_ID</code> if the inode is in the children
list; <code>Snapshot.NO_SNAPSHOT_ID</code> if the inode is neither in the
children list nor in any snapshot; otherwise the snapshot id of the
corresponding snapshot diff list.</dd>
</dl>
</li>
</ul>
<a name="getChildrenList-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getChildrenList</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.util.ReadOnlyList&lt;org.apache.hadoop.hdfs.server.namenode.INode&gt;&nbsp;getChildrenList(int&nbsp;snapshotId)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>snapshotId</code> - if it is not <code>Snapshot.CURRENT_STATE_ID</code>, get the result
from the corresponding snapshot; otherwise, get the result from
the current directory.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the current children list if the specified snapshot is null;
otherwise, return the children list corresponding to the snapshot.
Note that the returned list is never null.</dd>
</dl>
</li>
</ul>
<a name="removeChild-org.apache.hadoop.hdfs.server.namenode.INode-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeChild</h4>
<pre>public&nbsp;boolean&nbsp;removeChild(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;child,
int&nbsp;latestSnapshotId)</pre>
<div class="block">Remove the specified child from this directory.</div>
</li>
</ul>
<a name="removeChild-org.apache.hadoop.hdfs.server.namenode.INode-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeChild</h4>
<pre>public&nbsp;boolean&nbsp;removeChild(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;child)</pre>
<div class="block">Remove the specified child from this directory.
The basic remove method which actually calls children.remove(..).</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>child</code> - the child inode to be removed</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the child is removed; false if the child is not found.</dd>
</dl>
</li>
</ul>
<a name="addChild-org.apache.hadoop.hdfs.server.namenode.INode-boolean-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addChild</h4>
<pre>public&nbsp;boolean&nbsp;addChild(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;node,
boolean&nbsp;setModTime,
int&nbsp;latestSnapshotId)</pre>
<div class="block">Add a child inode to the directory.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>node</code> - INode to insert</dd>
<dd><code>setModTime</code> - set modification time for the parent node
not needed when replaying the addition and
the parent already has the proper mod time</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>false if the child with this name already exists;
otherwise, return true;</dd>
</dl>
</li>
</ul>
<a name="addChild-org.apache.hadoop.hdfs.server.namenode.INode-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addChild</h4>
<pre>public&nbsp;boolean&nbsp;addChild(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;node)</pre>
</li>
</ul>
<a name="addChildAtLoading-org.apache.hadoop.hdfs.server.namenode.INode-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addChildAtLoading</h4>
<pre>public&nbsp;boolean&nbsp;addChildAtLoading(org.apache.hadoop.hdfs.server.namenode.INode&nbsp;node)</pre>
<div class="block">During image loading, the search is unnecessary since the insert position
should always be at the end of the map given the sequence they are
serialized on disk.</div>
</li>
</ul>
<a name="computeQuotaUsage-org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite-byte-boolean-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeQuotaUsage</h4>
<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a>&nbsp;computeQuotaUsage(<a href="../../../../../../org/apache/hadoop/hdfs/server/blockmanagement/BlockStoragePolicySuite.html" title="class in org.apache.hadoop.hdfs.server.blockmanagement">BlockStoragePolicySuite</a>&nbsp;bsps,
byte&nbsp;blockStoragePolicyId,
boolean&nbsp;useCache,
int&nbsp;lastSnapshotId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Count subtree <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/Quota.html#NAMESPACE"><code>Quota.NAMESPACE</code></a> and <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/Quota.html#STORAGESPACE"><code>Quota.STORAGESPACE</code></a> usages.
With the existence of <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeReference</code></a>, the same inode and its
subtree may be referred by multiple <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.WithName.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeReference.WithName</code></a> nodes and a
<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.DstReference.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeReference.DstReference</code></a> node. To avoid circles while quota usage computation,
we have the following rules:
<pre>
1. For a <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.DstReference.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeReference.DstReference</code></a> 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 a <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.WithName.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeReference.WithName</code></a> 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 the <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.WithName.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeReference.WithName</code></a> node.
We do not count in the size of the diff list.
</pre></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>computeQuotaUsage</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>bsps</code> - Block storage policy suite to calculate intended storage type usage</dd>
<dd><code>blockStoragePolicyId</code> - block storage policy id of the current INode</dd>
<dd><code>useCache</code> - Whether to use cached quota usage. Note that
<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.WithName.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeReference.WithName</code></a> node never uses cache for its subtree.</dd>
<dd><code>lastSnapshotId</code> - <code>Snapshot.CURRENT_STATE_ID</code> indicates the
computation is in the current tree. Otherwise the id
indicates the computation range for a
<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.WithName.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeReference.WithName</code></a> node.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The subtree quota counts.</dd>
</dl>
</li>
</ul>
<a name="computeQuotaUsage4CurrentDirectory-org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite-byte-org.apache.hadoop.hdfs.server.namenode.QuotaCounts-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeQuotaUsage4CurrentDirectory</h4>
<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a>&nbsp;computeQuotaUsage4CurrentDirectory(<a href="../../../../../../org/apache/hadoop/hdfs/server/blockmanagement/BlockStoragePolicySuite.html" title="class in org.apache.hadoop.hdfs.server.blockmanagement">BlockStoragePolicySuite</a>&nbsp;bsps,
byte&nbsp;storagePolicyId,
<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/QuotaCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode">QuotaCounts</a>&nbsp;counts)</pre>
<div class="block">Add quota usage for this inode excluding children.</div>
</li>
</ul>
<a name="computeContentSummary-int-org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeContentSummary</h4>
<pre>public&nbsp;org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext&nbsp;computeContentSummary(int&nbsp;snapshotId,
org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext&nbsp;summary)
throws org.apache.hadoop.security.AccessControlException</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Count subtree content summary with a <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/ContentCounts.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>ContentCounts</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>computeContentSummary</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>snapshotId</code> - Specify the time range for the calculation. If this
parameter equals to <code>Snapshot.CURRENT_STATE_ID</code>,
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.</dd>
<dd><code>summary</code> - the context object holding counts for the subtree.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The same objects as summary.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.hadoop.security.AccessControlException</code></dd>
</dl>
</li>
</ul>
<a name="computeDirectoryContentSummary-org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeDirectoryContentSummary</h4>
<pre>protected&nbsp;org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext&nbsp;computeDirectoryContentSummary(org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext&nbsp;summary,
int&nbsp;snapshotId)
throws org.apache.hadoop.security.AccessControlException</pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.hadoop.security.AccessControlException</code></dd>
</dl>
</li>
</ul>
<a name="undoRename4ScrParent-org.apache.hadoop.hdfs.server.namenode.INodeReference-org.apache.hadoop.hdfs.server.namenode.INode-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>undoRename4ScrParent</h4>
<pre>public&nbsp;void&nbsp;undoRename4ScrParent(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeReference.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeReference</a>&nbsp;oldChild,
org.apache.hadoop.hdfs.server.namenode.INode&nbsp;newChild)</pre>
<div class="block">This method is usually called by the undo section of rename.
Before calling this function, in the rename operation, we replace the
original src node (of the rename operation) with a reference node (WithName
instance) in both the children list and a created list, delete the
reference node from the children list, and add it to the corresponding
deleted list.
To undo the above operations, we have the following steps in particular:
<pre>
1) remove the WithName node from the deleted list (if it exists)
2) replace the WithName node in the created list with srcChild
3) add srcChild back as a child of srcParent. Note that we already add
the node into the created list of a snapshot diff in step 2, we do not need
to add srcChild to the created list of the latest snapshot.
</pre>
We do not need to update quota usage because the old child is in the
deleted list before.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>oldChild</code> - The reference node to be removed/replaced</dd>
<dd><code>newChild</code> - The node to be added back</dd>
</dl>
</li>
</ul>
<a name="undoRename4DstParent-org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite-org.apache.hadoop.hdfs.server.namenode.INode-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>undoRename4DstParent</h4>
<pre>public&nbsp;void&nbsp;undoRename4DstParent(<a href="../../../../../../org/apache/hadoop/hdfs/server/blockmanagement/BlockStoragePolicySuite.html" title="class in org.apache.hadoop.hdfs.server.blockmanagement">BlockStoragePolicySuite</a>&nbsp;bsps,
org.apache.hadoop.hdfs.server.namenode.INode&nbsp;deletedChild,
int&nbsp;latestSnapshotId)</pre>
<div class="block">Undo the rename operation for the dst tree, i.e., if the rename operation
(with OVERWRITE option) removes a file/dir from the dst tree, add it back
and delete possible record in the deleted list.</div>
</li>
</ul>
<a name="clearChildren--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clearChildren</h4>
<pre>public&nbsp;void&nbsp;clearChildren()</pre>
<div class="block">Set the children list to null.</div>
</li>
</ul>
<a name="clear--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clear</h4>
<pre>public&nbsp;void&nbsp;clear()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Clear references to other objects.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>clear</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
</dl>
</li>
</ul>
<a name="cleanSubtreeRecursively-org.apache.hadoop.hdfs.server.namenode.INode.ReclaimContext-int-int-java.util.Map-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>cleanSubtreeRecursively</h4>
<pre>public&nbsp;void&nbsp;cleanSubtreeRecursively(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.ReclaimContext.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.ReclaimContext</a>&nbsp;reclaimContext,
int&nbsp;snapshot,
int&nbsp;prior,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hdfs.server.namenode.INode,org.apache.hadoop.hdfs.server.namenode.INode&gt;&nbsp;excludedNodes)</pre>
<div class="block">Call cleanSubtree(..) recursively down the subtree.</div>
</li>
</ul>
<a name="destroyAndCollectBlocks-org.apache.hadoop.hdfs.server.namenode.INode.ReclaimContext-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>destroyAndCollectBlocks</h4>
<pre>public&nbsp;void&nbsp;destroyAndCollectBlocks(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.ReclaimContext.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.ReclaimContext</a>&nbsp;reclaimContext)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Destroy 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.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>destroyAndCollectBlocks</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>reclaimContext</code> - Record blocks and inodes that need to be reclaimed.</dd>
</dl>
</li>
</ul>
<a name="cleanSubtree-org.apache.hadoop.hdfs.server.namenode.INode.ReclaimContext-int-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>cleanSubtree</h4>
<pre>public&nbsp;void&nbsp;cleanSubtree(<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INode.ReclaimContext.html" title="class in org.apache.hadoop.hdfs.server.namenode">INode.ReclaimContext</a>&nbsp;reclaimContext,
int&nbsp;snapshotId,
int&nbsp;priorSnapshotId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Clean 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.
<pre>
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 <code>INodeFile</code>.
1.1.1 If <code> prior</code> 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 an <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeDirectory</code></a>.
1.2.1 If <code> prior</code> 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 an <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeDirectory</code></a> 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 clean <code>INodeFile</code>: do nothing.
2.2 To clean <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeDirectory</code></a>: recursively clean its children.
2.3 To clean INodeFile with snapshot: delete the corresponding snapshot in
its diff list.
2.4 To clean <a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" title="class in org.apache.hadoop.hdfs.server.namenode"><code>INodeDirectory</code></a> with snapshot: delete the corresponding
snapshot in its diff list. Recursively clean its children.
</pre></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>cleanSubtree</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>reclaimContext</code> - Record blocks and inodes that need to be reclaimed.</dd>
<dd><code>snapshotId</code> - The id of the snapshot to delete.
<code>Snapshot.CURRENT_STATE_ID</code> means to delete the current
file/directory.</dd>
<dd><code>priorSnapshotId</code> - The id of the latest snapshot before the to-be-deleted snapshot.
When deleting a current inode, this parameter captures the latest
snapshot.</dd>
</dl>
</li>
</ul>
<a name="metadataEquals-org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>metadataEquals</h4>
<pre>public&nbsp;boolean&nbsp;metadataEquals(org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes&nbsp;other)</pre>
<div class="block">Compare the metadata with another INodeDirectory</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>metadataEquals</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INodeDirectoryAttributes</code></dd>
</dl>
</li>
</ul>
<a name="dumpTreeRecursively-java.io.PrintWriter-java.lang.StringBuilder-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>dumpTreeRecursively</h4>
<pre>public&nbsp;void&nbsp;dumpTreeRecursively(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;out,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;prefix,
int&nbsp;snapshot)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></span></div>
<div class="block">Dump tree recursively.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>dumpTreeRecursively</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hdfs.server.namenode.INode</code></dd>
<dd><code>prefix</code> - The prefix string that each line should print.</dd>
</dl>
</li>
</ul>
<a name="dumpTreeRecursively-java.io.PrintWriter-java.lang.StringBuilder-java.lang.Iterable-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>dumpTreeRecursively</h4>
<pre>public static&nbsp;void&nbsp;dumpTreeRecursively(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;out,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;prefix,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.SnapshotAndINode.html" title="class in org.apache.hadoop.hdfs.server.namenode">INodeDirectory.SnapshotAndINode</a>&gt;&nbsp;subs)</pre>
<div class="block">Dump the given subtrees.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>prefix</code> - The prefix string that each line should print.</dd>
<dd><code>subs</code> - The subtrees.</dd>
</dl>
</li>
</ul>
<a name="getChildrenNum-int-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getChildrenNum</h4>
<pre>public final&nbsp;int&nbsp;getChildrenNum(int&nbsp;snapshotId)</pre>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/INodeDirectory.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeAttributes.SnapshotCopy.html" title="class in org.apache.hadoop.hdfs.server.namenode"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hdfs/server/namenode/INodeDirectory.SnapshotAndINode.html" title="class in org.apache.hadoop.hdfs.server.namenode"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hdfs/server/namenode/INodeDirectory.html" target="_top">Frames</a></li>
<li><a href="INodeDirectory.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2008&#x2013;2021 <a href="https://www.apache.org">Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>