blob: aa5eea8c32281b82727a4bb3d5c2fe0a36794b02 [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 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SnapshotFileCache (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)</title>
<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="SnapshotFileCache (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All 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/SnapshotFileCache.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/hbase/master/snapshot/MasterSnapshotVerifier.html" title="class in org.apache.hadoop.hbase.master.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html" title="class in org.apache.hadoop.hbase.master.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" target="_top">Frames</a></li>
<li><a href="SnapshotFileCache.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.hbase.master.snapshot</div>
<h2 title="Class SnapshotFileCache" class="title">Class SnapshotFileCache</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.hbase.master.snapshot.SnapshotFileCache</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></dd>
</dl>
<hr>
<br>
<pre>@InterfaceAudience.Private
@InterfaceStability.Evolving
public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.77">SnapshotFileCache</a>
extends <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>
implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></pre>
<div class="block">Intelligently keep track of all the files for all the snapshots.
<p>
A cache of files is kept to avoid querying the <code>FileSystem</code> frequently. If there is a cache
miss the directory modification time is used to ensure that we don't rescan directories that we
already have in cache. We only check the modification times of the snapshot directories
(/hbase/.snapshot/[snapshot_name]) to determine if the files need to be loaded into the cache.
<p>
New snapshots will be added to the cache and deleted snapshots will be removed when we refresh
the cache. If the files underneath a snapshot directory are changed, but not the snapshot itself,
we will ignore updates to that snapshot's files.
<p>
This is sufficient because each snapshot has its own directory and is added via an atomic rename
<i>once</i>, when the snapshot is created. We don't need to worry about the data in the snapshot
being run.
<p>
Further, the cache is periodically refreshed ensure that files in snapshots that were deleted are
also removed from the cache.
<p>
A <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot"><code>SnapshotFileCache.SnapshotFileInspector</code></a> must be passed when creating <tt>this</tt> to
allow extraction of files under /hbase/.snapshot/[snapshot name] directory, for each snapshot.
This allows you to only cache files under, for instance, all the logs in the .logs directory or
all the files under all the regions.
<p>
<tt>this</tt> also considers all running snapshots (those under /hbase/.snapshot/.tmp) as valid
snapshots and will attempt to cache files from those snapshots as well.
<p>
Queries about a given file are thread-safe with respect to multiple queries and cache refreshes.</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>class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.RefreshCacheTask</a></span></code>
<div class="block">Simple helper task that just periodically attempts to refresh the cache</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotDirectoryInfo</a></span></code>
<div class="block">Information about a snapshot directory</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) static interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a></span></code>&nbsp;</td>
</tr>
</table>
</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>private org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet&lt;<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>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#cache">cache</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#fileInspector">fileInspector</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private org.apache.hadoop.fs.FileSystem</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#fs">fs</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#LOG">LOG</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html?is-external=true" title="class or interface in java.util">Timer</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#refreshTimer">refreshTimer</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private org.apache.hadoop.fs.Path</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#snapshotDir">snapshotDir</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private org.apache.hbase.thirdparty.com.google.common.collect.ImmutableMap&lt;<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>,<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotDirectoryInfo</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#snapshots">snapshots</a></span></code>
<div class="block">This is a helper map of information about the snapshot directories so we don't need to rescan
them if they haven't changed since the last time we looked.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#stop">stop</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private org.apache.hadoop.fs.FileSystem</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#workingFs">workingFs</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private org.apache.hadoop.fs.Path</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#workingSnapshotDir">workingSnapshotDir</a></span></code>&nbsp;</td>
</tr>
</table>
</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/hbase/master/snapshot/SnapshotFileCache.html#SnapshotFileCache-org.apache.hadoop.conf.Configuration-long-long-java.lang.String-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.SnapshotFileInspector-">SnapshotFileCache</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
long&nbsp;cacheRefreshPeriod,
long&nbsp;cacheRefreshDelay,
<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;refreshThreadName,
<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a>&nbsp;inspectSnapshotFiles)</code>
<div class="block">Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the
filesystem.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#SnapshotFileCache-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-long-long-java.lang.String-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.SnapshotFileInspector-">SnapshotFileCache</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
org.apache.hadoop.fs.Path&nbsp;rootDir,
org.apache.hadoop.fs.FileSystem&nbsp;workingFs,
org.apache.hadoop.fs.Path&nbsp;workingDir,
long&nbsp;cacheRefreshPeriod,
long&nbsp;cacheRefreshDelay,
<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;refreshThreadName,
<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a>&nbsp;inspectSnapshotFiles)</code>
<div class="block">Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the
filesystem</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="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>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<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>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getSnapshotsInProgress--">getSnapshotsInProgress</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><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;org.apache.hadoop.fs.FileStatus&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#getUnreferencedFiles-java.lang.Iterable-org.apache.hadoop.hbase.master.snapshot.SnapshotManager-">getUnreferencedFiles</a></span>(<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;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files,
<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)</code>
<div class="block">Check to see if any of the passed file names is contained in any of the snapshots.</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/hbase/master/snapshot/SnapshotFileCache.html#isStopped--">isStopped</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#refreshCache--">refreshCache</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#stop-java.lang.String-">stop</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;why)</code>
<div class="block">Stop this service.</div>
</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/hbase/master/snapshot/SnapshotFileCache.html#triggerCacheRefreshForTesting--">triggerCacheRefreshForTesting</a></span>()</code>
<div class="block">Trigger a cache refresh, even if its before the next cache refresh.</div>
</td>
</tr>
</table>
<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#equals-java.lang.Object-" title="class or interface in java.lang">equals</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#hashCode--" title="class or interface in java.lang">hashCode</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#toString--" title="class or interface in java.lang">toString</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>
</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="LOG">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.89">LOG</a></pre>
</li>
</ul>
<a name="stop">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.90">stop</a></pre>
</li>
</ul>
<a name="fs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fs</h4>
<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.91">fs</a></pre>
</li>
</ul>
<a name="workingFs">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>workingFs</h4>
<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.91">workingFs</a></pre>
</li>
</ul>
<a name="fileInspector">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fileInspector</h4>
<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.92">fileInspector</a></pre>
</li>
</ul>
<a name="snapshotDir">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>snapshotDir</h4>
<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.93">snapshotDir</a></pre>
</li>
</ul>
<a name="workingSnapshotDir">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>workingSnapshotDir</h4>
<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.93">workingSnapshotDir</a></pre>
</li>
</ul>
<a name="cache">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>cache</h4>
<pre>private volatile&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet&lt;<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>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.94">cache</a></pre>
</li>
</ul>
<a name="snapshots">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>snapshots</h4>
<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableMap&lt;<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>,<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotDirectoryInfo.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotDirectoryInfo</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.99">snapshots</a></pre>
<div class="block">This is a helper map of information about the snapshot directories so we don't need to rescan
them if they haven't changed since the last time we looked.</div>
</li>
</ul>
<a name="refreshTimer">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>refreshTimer</h4>
<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html?is-external=true" title="class or interface in java.util">Timer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.100">refreshTimer</a></pre>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="SnapshotFileCache-org.apache.hadoop.conf.Configuration-long-long-java.lang.String-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.SnapshotFileInspector-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>SnapshotFileCache</h4>
<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.115">SnapshotFileCache</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
long&nbsp;cacheRefreshPeriod,
long&nbsp;cacheRefreshDelay,
<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;refreshThreadName,
<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a>&nbsp;inspectSnapshotFiles)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the
filesystem.
<p>
Immediately loads the file cache.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>conf</code> - to extract the configured <code>FileSystem</code> where the snapshots are stored and
hbase root directory</dd>
<dd><code>cacheRefreshPeriod</code> - frequency (ms) with which the cache should be refreshed</dd>
<dd><code>cacheRefreshDelay</code> - amount of time to wait for the cache to be refreshed</dd>
<dd><code>refreshThreadName</code> - name of the cache refresh thread</dd>
<dd><code>inspectSnapshotFiles</code> - Filter to apply to each snapshot to extract the files.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if the <code>FileSystem</code> or root directory cannot be loaded</dd>
</dl>
</li>
</ul>
<a name="SnapshotFileCache-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-long-long-java.lang.String-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.SnapshotFileInspector-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>SnapshotFileCache</h4>
<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.136">SnapshotFileCache</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
org.apache.hadoop.fs.Path&nbsp;rootDir,
org.apache.hadoop.fs.FileSystem&nbsp;workingFs,
org.apache.hadoop.fs.Path&nbsp;workingDir,
long&nbsp;cacheRefreshPeriod,
long&nbsp;cacheRefreshDelay,
<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;refreshThreadName,
<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.SnapshotFileInspector.html" title="interface in org.apache.hadoop.hbase.master.snapshot">SnapshotFileCache.SnapshotFileInspector</a>&nbsp;inspectSnapshotFiles)</pre>
<div class="block">Create a snapshot file cache for all snapshots under the specified [root]/.snapshot on the
filesystem</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fs</code> - <code>FileSystem</code> where the snapshots are stored</dd>
<dd><code>rootDir</code> - hbase root directory</dd>
<dd><code>workingFs</code> - <code>FileSystem</code> where ongoing snapshot mainifest files are stored</dd>
<dd><code>workingDir</code> - Location to store ongoing snapshot manifest files</dd>
<dd><code>cacheRefreshPeriod</code> - period (ms) with which the cache should be refreshed</dd>
<dd><code>cacheRefreshDelay</code> - amount of time to wait for the cache to be refreshed</dd>
<dd><code>refreshThreadName</code> - name of the cache refresh thread</dd>
<dd><code>inspectSnapshotFiles</code> - Filter to apply to each snapshot to extract the files.</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="triggerCacheRefreshForTesting--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>triggerCacheRefreshForTesting</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.158">triggerCacheRefreshForTesting</a>()</pre>
<div class="block">Trigger a cache refresh, even if its before the next cache refresh. Does not affect pending
cache refreshes.
<p/>
Blocks until the cache is refreshed.
<p/>
Exposed for TESTING.</div>
</li>
</ul>
<a name="getUnreferencedFiles-java.lang.Iterable-org.apache.hadoop.hbase.master.snapshot.SnapshotManager-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getUnreferencedFiles</h4>
<pre>public&nbsp;<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;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.187">getUnreferencedFiles</a>(<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;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files,
<a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;snapshotManager)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Check to see if any of the passed file names is contained in any of the snapshots. First checks
an in-memory cache of the files to keep. If its not in the cache, then the cache is refreshed
and the cache checked again for that file. This ensures that we never return files that exist.
<p>
Note this may lead to periodic false positives for the file being referenced. Periodically, the
cache is refreshed even if there are no requests to ensure that the false negatives get removed
eventually. For instance, suppose you have a file in the snapshot and it gets loaded into the
cache. Then at some point later that snapshot is deleted. If the cache has not been refreshed
at that point, cache will still think the file system contains that file and return
<tt>true</tt>, even if it is no longer present (false positive). However, if the file never was
on the filesystem, we will never find it and always return <tt>false</tt>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>files</code> - file to check, NOTE: Relies that files are loaded from hdfs before method is
called (NOT LAZY)</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><tt>unReferencedFiles</tt> the collection of files that do not have snapshot references</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if there is an unexpected error reaching the filesystem.</dd>
</dl>
</li>
</ul>
<a name="refreshCache--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>refreshCache</h4>
<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.233">refreshCache</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
</dl>
</li>
</ul>
<a name="getSnapshotsInProgress--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSnapshotsInProgress</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<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>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.278">getSnapshotsInProgress</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
</dl>
</li>
</ul>
<a name="stop-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.318">stop</a>(<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;why)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
<div class="block">Stop this service.
Implementers should favor logging errors over throwing RuntimeExceptions.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">stop</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>why</code> - Why we're stopping.</dd>
</dl>
</li>
</ul>
<a name="isStopped--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>isStopped</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html#line.326">isStopped</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True if <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-"><code>Stoppable.stop(String)</code></a> has been closed.</dd>
</dl>
</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/SnapshotFileCache.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/hbase/master/snapshot/MasterSnapshotVerifier.html" title="class in org.apache.hadoop.hbase.master.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.RefreshCacheTask.html" title="class in org.apache.hadoop.hbase.master.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.html" target="_top">Frames</a></li>
<li><a href="SnapshotFileCache.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; 2007&#x2013;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>